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 CTP. Он не компилируется в g++ 4.8.0 или clang 3.2, что дает error: declaration does not declare anything [-fpermissive]
и fatal error: 'iostream' file not found
, соответственно.
Я скомпилировал его в VC11 w/Nov. 2012 CTP. Я отредактировал свой OP, чтобы включить эту информацию. – CodeBricks