示例代码:
#include <iostream>
int main()
{
if(int a = std::cin.get() && a == 'a')
{
std::cout << "True" << std::endl;
}
}
问题:
当我编译这段代码时,visual studio给了我一个很好的警告:warning C4700: uninitialized local variable 'a' used
。所以我理解a
未初始化。但是,我想完全理解如何评估表达式。上面的if语句是否等同于if(int a && a == 'a') { a = std::cin.get(); }
?有人能解释到底发生了什么吗?
答案 0 :(得分:5)
和运算符&&
的优先级高于赋值运算符=
。换句话说,你的陈述就是这样执行的:
if (int a = (std::cin.get() && a == 'a'))
你真的想要使用明确的括号:
int a;
if ((a = std::cin.get()) && a == 'a')
更好的是,写清楚代码:
int a = std::cin.get();
if (a == 'a')
: - )
答案 1 :(得分:0)
表达式的计算就像它自己的语句一样。像这样:
int a = std::cin.get() && a == 'a';
所以它相当于使用a
AND-ed 的结果初始化变量std::cin.get()
,并对未初始化的变量和文字字符'a'
。
答案 2 :(得分:0)
您正在使用该变量初始化自身。首先分配内存,然后将该内存中的任何内容与'a'进行比较,并将结果用于初始化变量。