gpt4 book ai didi

c++ - "(void) new"在 C++ 中是什么意思?

转载 作者:可可西里 更新时间:2023-11-01 15:37:16 25 4
gpt4 key购买 nike

我一直在看 Qt tutorial它使用了我以前从未见过的结构:

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

在您的示例中,每个表达式(每个语句/行)都通过 new 运算符动态分配内存 - 由于 new 返回指向内存的指针(地址),通常的做法是将该指针存储在变量中您可以使用它来最终删除对象并释放内存。在您的示例中,由于指针被丢弃,显式转换为 (void) 使程序员的意图明确:“我确切地知道我在做什么 - 请丢弃 new 返回的值”

如果您对技术细节感兴趣(引用自 C++ 标准,第 5 条):

Any expression can be explicitly converted to type cv void. The expression value is discarded. [ Note: however, if the value is in a temporary variable (12.2), the destructor for that variable is not executed until the usual time, and the value of the variable is preserved for the purpose of executing the destructor. —end note ]
The lvalue-to-rvalue (4.1), array-to-pointer (4.2), and function-to-pointer (4.3) standard conversions are not applied to the expression.

如果您想知道这些对象是如何被删除的(如果它们确实被删除了),答案是 QShortcut 构造函数中的“this”指针应该与 new 返回的值相同,并且可以传递给 ShortcutManager。请注意,构造函数中的“this”与传递给 QShortcut 构造函数的“this”指针不同。

关于c++ - "(void) new"在 C++ 中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1029743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com