문제

Qt에서는 둘 다 유효하며 동일하게 동작합니다.

emit someSignal(value);

emit(someSignal(value));

차이점이 있나요?

도움이 되었습니까?

해결책

차이점이 있나요?

외부 브래킷이 필요 없다는 것 외에는 차이점이 없으므로 프로그래머는 이를 선호할 것이며 Qt 프로젝트에서는 더 일반적으로 사용됩니다.

차이가 없는 이유는 다음과 같습니다.

# define emit

이것의 정의를 볼 수 있습니다. 소스 코드에서.

따라서 기본적으로 "빈" 문자열로 선언되며 전처리기는 변형을 다음과 같이 대체합니다.

someSignal(value);

또는

(someSignal(value));

빠른 테스트를 위해 전처리기가 실행된 후 컴파일러 실행을 중지하면 이를 직접 확인할 수 있습니다.그만큼 -E gcc의 경우 옵션입니다.

추가 정보:댓글의 누군가가 import 키워드가 전역 매크로 네임스페이스를 오염시키기 때문에 이에 대해 의구심을 갖고 있었습니다.그것은 사실이지만 이를 수행하는 일반적인 방법이 있다는 것을 보장하는 좋은 방법입니다.

반면에 이는 필수 사항이 아니므로 누구든지 재정의하거나 정의 취소하거나 끌 수도 있습니다. Qt에게 말함으로써 다음과 같은 키워드를 사용하지 마십시오.

CONFIG += no_keywords

이런 식으로 Qt 신호 슬롯 메커니즘을 다음과 같이 사용하는 것이 여전히 가능할 수 있습니다. Q_SIGNAL, Q_SIGNALS, Q_SLOT, Q_SLOTS, Q_EMIT 그리고 그 모든 것.

여기에서 다음을 찾을 수 있습니다. 해당 문서 ~에 대한 Q_EMIT, 예를 들어:

Q_EMIT

Qt 신호 및 슬롯을 제3자 신호/슬롯 메커니즘과 함께 사용하려는 경우 신호 방출을 위한 방출 키워드를 대체하려면 이 매크로를 사용하십시오.

매크로는 일반적으로 .pro 파일에서 CONFIG 변수로 no_keywords를 지정한 경우에 사용되지만, no_keywords를 지정하지 않은 경우에도 사용할 수 있습니다.

다른 팁

차이가 없습니다.사실, emit는 빈 매크로로 정의되므로

someSignal(value);
.

는 또한 동일합니다.emit는 Qt 신호를 트리거하는 것이 더 명확 해집니다.

절대적으로 차이가 없습니다.그것은 빈 전 처리기 정의이므로 컴파일러가 코드를 보려면 제거되기 전에 제거됩니다.컴파일러가 걱정하는 한,조차 존재하지 않습니다.

프로그래머의 이익을 위해서는 그 시점에서 신호가 처리 될 수 있고 코드의 디버깅에 도움이 될 수 있음을 알려주는 것이 중요합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top