题
我已经看过一夸脱 教程 它使用一个建设,我以前没见过:
(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必须对该引用做一些事情。
不隶属于 StackOverflow