C++ if 语句中的变量赋值
Posted
技术标签:
【中文标题】C++ if 语句中的变量赋值【英文标题】:Variable assignment inside C++ if statement 【发布时间】:2020-06-27 05:24:13 【问题描述】:在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 下面的代码 must be valid 中也是如此,但它又给了我一个类似的错误
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
。我在这里错过了什么?
【问题讨论】:
@FoggyDay 是的,您可以在 if 条件中声明一个变量。试试吧。if(int i=5)
工作。
【参考方案1】:
if ((int i=5) == 5)
是一个语法错误,它与if
语句的任何支持语法都不匹配。语法是 init-statement(optional) condition ,其中 condition 可以是表达式,也可以是带有初始化程序的声明,您可以阅读有关语法 on cppreference 的更多详细信息.
if (int i=5; i == 5)
是正确的,但是您使用的是旧版本的 gcc,该版本可以追溯到 C++17 标准化之前。您需要升级编译器版本。根据C++ Standards Support in GCC,此功能已添加到 GCC 7 中。
【讨论】:
是的,我做错了if ((int i=5) == 5)
。将 g++ 升级到版本 9 解决了第二个问题。【参考方案2】:
对于初学者,我相信您的编译器拒绝是正确的
if ((int i=5) == 5)
因为这不是合法的 C++ 代码。变量声明语句不是表达式,因此您不能将 (int i = 5)
视为表达式。
对于第二个,我怀疑你只需要更新你的编译器。 g++ 5.6 在这一点上是一个相当旧的版本,我相信更多更新版本的 g++ 将毫无问题地处理该代码。
【讨论】:
以上是关于C++ if 语句中的变量赋值的主要内容,如果未能解决你的问题,请参考以下文章