В c ++ следующее допустимо, и я могу запустить его без проблем
int main(){
if (int i=5)
std::cout << i << std::endl;
return 0;
}
Однако, хотя следующее также должно быть допустимым, оно выдает мне ошибку
if ((int i=5) == 5)
std::cout << i << std::endl;
ОШИБКА:
test.cpp: In function ‘int main()’:
test.cpp:4:10: error: expected primary-expression before ‘int’
if ((int i=5) == 5)
^
test.cpp:4:10: error: expected ‘)’ before ‘int’
test.cpp:5:36: error: expected ‘)’ before ‘;’ token
std::cout << i << std::endl;
^
Кроме того, в c ++ 17 ниже код тоже должен быть действительным , но это снова вызывает похожую ошибку
if (int i=5; i == 5)
std::cout << i << std::endl;
ОШИБКА:
test.cpp: In function ‘int main()’:
test.cpp:4:16: error: expected ‘)’ before ‘;’ token
if (int i=5; i == 5)
^
test.cpp:4:18: error: ‘i’ was not declared in this scope
if (int i=5; i == 5)
^
Я пытаюсь скомпилировать с g++ test.cpp -std=c++17
. g++ --version
дает мне g++ (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609
. Что мне здесь не хватает?