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 года ОСАГО. Это не компилируется в g ++ 4.8.0 или лязг 3.2, который дает error: declaration does not declare anything [-fpermissive]
а также fatal error: 'iostream' file not found
соответственно.
Код является недействительным по всем стандартам C ++ (C ++ 98, C ++ 03, C ++ 11) и не должен компилироваться.
Тип не является утверждением.
И действительно, ни Visual C ++, ни g ++ не компилируют его:
К сожалению, в то время как g ++ правильно диагностирует программу, CTP-версия Visual C ++ от ноября 2012 года:
[D: \ DEV \ тест] > (кл 2> 1) | найти / я "C ++" Оптимизирующий компилятор Microsoft (R) C / C ++ версии 17.00.51025 для x86 [D: \ DEV \ тест] > cl / nologo / EHsc / GR / W4 foo.cpp foo.cpp [D: \ DEV \ тест] > g ++ -std = c ++ 0x -pedantic -Wall foo.cpp foo.cpp: в функции 'int main ()': foo.cpp: 17: 5: ошибка: объявление ничего не объявляет [-fpermissive] [D: \ DEV \ тест] > _
Так что это ошибка компилятора, и вы можете попытаться сообщить об этом на Microsoft Connect.
Я попробовал ваш код в gcc версии 4.5.3, при компиляции он выдал следующее сообщение об ошибке:
«ошибка: объявление ничего не объявляет»,
какой компилятор вы используете? Вполне возможно, что ваш компилятор делает что-то под капотом.
и то и другое g++
а также clang
дай ошибку 17:5: error: declaration does not declare anything
Какой бы компилятор вы не использовали, он может полностью оптимизировать строку, но это всего лишь предположение. Что вы компилируете?
Это не законно. как int;
не является юридическим заявлением.