我已经看过一夸脱 教程 它使用一个建设,我以前没见过:

 (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)基本上告诉编译器忽略的结果,表达(后计算)。

在你如,每个表(每个发言/行)是动态分配存通过的新的运营商-并且因为新的返回指(地址的)存储,通常的做法是储存,指在一个变量可用来最终删除的对象和释放的记忆。在你的例子,因为指针被放弃,一个明确的投(void)使意图的程序明确:"我知道我在做什么-请放弃返回值通过新的"

如果你有兴趣的技术问题(引用C++标准,第5条):

任何表达可以明确地转变为类型的简历无效。表达的价值被丢弃。[注:但是,如果价值是一个临时变量(12.2),析构为那个变量是不执行,直到通常的时间和价值变量是保留的目的执行析构函数。—结束注意]
的左值到rvalue(4.1),array到指针(4.2)和功能到指针(4.3)标准的转换都不应用到的表达。

如果你想知道如何将这些对象都是越来越删除(如果他们确实被删除),答案是"这个"指在构造的QShortcut应该有同样的价值以返回通过新,并可以传递到一个ShortcutManager.注意,'这个'内的构造就是不一样的'这个'指针,是通过构造的QShortcut.

其他提示

如果你丢弃像这样的函数的返回值,一些C ++编译器会发出警告。在这种情况下,代码看起来像是泄漏内存,因此您会收到警告。 (void)告诉编译器不要发出警告:“将此函数视为返回 void ”。

我认为从 new 语句返回的引用未分配给指针。我看到这个正在传递,所以QT必须对该引用做一些事情。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top