Возможный дубликат:
Почему переменные, определенные в условном выражении, не могут быть построены с аргументами?
Рассмотрим этот простой пример:
/*1*/ int main() {
/*2*/ for (int i(7); i;){break;}
/*3*/ if (int i(7)) {}
/*4*/ }
Почему строка-2 компилируется просто отлично, в то время как строка-3 дает ошибку? Это немного странно для меня, почему if-statement в этом аспекте обрабатывается хуже, чем for-loop?
Если это конкретный компилятор - я тестировал с gcc-4.5.1:
prog.cpp: В функции 'int main()': prog.cpp: 3: 7: ошибка: ожидаемое первичное выражение перед 'int' prog.cpp: 3: 7: error: expected ')' before 'int'
Я был вдохновлен этим question
[ОБНОВЛЕНИЕ]
Я знаю, что это компилируется просто отлично:
/*1*/ int main() {
/*2*/ for (int i = 7; i;){break;}
/*3*/ if (int i = 7) {}
/*4*/ }
[UPDATE2]
Кажется, это чисто академический вопрос, но это может быть чрезвычайно важно для таких типов, как std::unique_ptr<>
, которые нельзя скопировать:
#include <memory>
int main() {
if (std::unique_ptr<int> i = new (std::nothrow) int(7)) {
}
if (std::unique_ptr<int> i(new (std::nothrow) int(7))) {
}
}
Ни один из этих двух видов не разрешен. Не уверен в синтаксисе С++ 11 {}
?