C++
此类的对象cout
在构造和销毁时的消息。我尝试使用仅声明类名的声明来构造一个临时对象,但它给出了意外的输出。
在 #1 中,我使用括号实例化了一个临时的无名对象。
在 #2 中,我使用统一初始化实例化了一个临时无名对象。
我不知道#3 是否会编译。我只认为如果要编译#3,它将意味着构建一个临时无名对象。它确实可以编译,但从 #3 下控制台输出的空白可以看出,没有构造任何对象。这里发生了什么?
#include <iostream>
class A
{
public:
A() {std::cout << "constructed\n";}
~A() {std::cout << "destroyed\n";}
};
auto main() -> int
{
std::cout << "#1:\n";
A();
std::cout << "#2:\n";
A{};
std::cout << "#3:\n";
A;
return 0;
}
控制台输出:
#1:
constructed
destroyed
#2:
constructed
destroyed
#3:
注意:这是在 VC11 中使用 2012 年 11 月 CTP 编译的。它不能在g++ 4.8.0或 clang 3.2 中编译,分别给出error: declaration does not declare anything [-fpermissive]
和fatal error: 'iostream' file not found
。