0

示例代码:

#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(); }?有人可以准确解释会发生什么吗?

4

3 回答 3

5

and 运算符&&的优先级高于赋值运算符=。所以换句话说,你的语句是这样执行的:

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')

:-)

于 2012-05-22T21:33:45.447 回答
0

表达式被评估,就好像它是它自己的语句一样。像这样:

int a = std::cin.get() && a == 'a';

因此,它等效于使用ANDa的结果初始化一个变量,并比较未初始化的变量和文字 char 。std::cin.get() 'a'

于 2012-05-22T21:32:40.147 回答
0

您正在使用该变量来初始化自身。首先分配内存,然后将该内存中的任何内容与“a”进行比较,并将结果用于初始化变量。

于 2012-05-22T21:35:11.657 回答