C++中能否在同一表达式内声明待使用变量?编译报错咨询
C++中能否在表达式内声明该表达式要使用的变量?
问题代码
#include <iostream> int main () { std::cin >> int input_value; return 0; }
编译报错信息
% g++ -Wall -o p44e1 p44e1.cc p44e1.cc:5:18: error: expected '(' for function-style cast or type construction std::cin >> int input_value; ~~~ ^ 1 error generated.
解答
C++不允许在普通表达式(比如你写的输入流操作表达式)内部直接声明变量。编译器报错的原因是,它把代码里的int input_value识别成了试图进行函数式类型转换的语法(比如int(input_value)),但这里缺少必要的括号,因此触发语法错误。
正确的写法是先声明变量,再在表达式中使用:
#include <iostream> int main () { int input_value; std::cin >> input_value; return 0; }
如果是C++11及更高版本,有一种特殊场景可以在语句的初始化部分声明变量并紧接着用在表达式里(仅限if/while/for这类语句),比如:
#include <iostream> int main () { if (int input_value; std::cin >> input_value) { // 在此作用域内可以使用input_value } return 0; }
这是C++11引入的初始化语句特性,本质是把变量声明绑定到语句的开头,并非在普通表达式内部声明变量。
内容的提问来源于stack exchange,提问作者nostromo
相关产品推荐
相关产品推荐

