문제

을 찾고 있었어에서는 Qt 튜토리얼 을 사용하는 건설 내가 전에 보지 못:

 (void) new QShortcut(Qt::Key_Enter, this, SLOT(fire()));
 (void) new QShortcut(Qt::Key_Return, this, SLOT(fire()));
 (void) new QShortcut(Qt::CTRL + Qt::Key_Q, this, SLOT(close()));

이없 (void) 그리고 아직도 컴파일하고 작품,그래서 그 목적은 무엇입의 (void)?

도움이 되었습니까?

해결책

주물 식(void)기본적으로 컴파일러를 무시하는 결과 표현(후 컴퓨팅 it).

에서 당신의 예,각각의 표현(당 문의/라인)의 동적으로 할당하는 메모리를 통해 new 연산자-이루고 새로운 포인터를 반환합니다(주소)을 메모리에,일반적인 실행하는 포인터 변수에 사용할 수 있는 결국 삭제를 개체 및 할당 해제합니다.예에서,이 포인터는 폐기되,명시적으로 캐스팅(void)게 기도의 프로그래머가 취소:"나는지 정확히 알고 내가 뭘-기를 폐기하시오 반환되는 값에 의해 새로운"

에 관심이 있다면 교 칙(에서 인용하는 C++표준,절 5):

어떤 식으로 명시적으로 변환될 수 있습형 이력서 무효입니다.식 값은 무시됩니다.[참고:그러나,이 값은 일시적 변수(12.2),소멸자는 변수는 실행하지 않을 때까지 일반적인 시간,그리고 변수의 값이 유행할 목적으로 소멸자.—end 참고]
이 lvalue-to-번씩만(4.1),편안-투-포인터(4.2),및 기능-투-포인터(4.3)표준 변환이 적용되지 않습을 표현이다.

그리고 당신이 궁금해하는 경우 얼마나 그 개체를 삭제하기(는 경우 실제로 그들은 삭제),이 대답은'이'내에서 포인터 생성자의 QShortcut 있어야 한 것과 동일한 값이 반환에 의해 새로운,그리고 전달할 수 있습 ShortcutManager.참고로,'이'내 생성자와 동일하지 않는'이 포인터는 전달되고 있음을 생성자의 QShortcut.

다른 팁

C++컴파일러를 줄 것이다면 경고 당신은 버리는 반환 값의 함수를 다음과 같다.이 경우에는 코드는 다음과 같습니다 메모리 누수,그래서 당신은 경고를 얻을 수 있습니다.이 (void) 컴파일러지를 방출하는 경고:"이 기능하지만 돌아 void".

나는 생각한 참조는 반환에서 new 문되지 않습니다 포인터이다.나는 this 전달되도록 QT 해 뭔가를 하는 참조.

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