if 语句中运算符优先级的说明

Explanation of operator precedence in an if statement

本文关键字:说明 优先级 运算符 语句 if      更新时间:2023-10-16

示例代码:

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

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

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

:-(

表达式的计算就像它是它自己的语句一样。喜欢这个:

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

因此,它等效于使用 std::cin.get() AND-ed 的结果初始化变量a,并将未初始化的变量与文字字符'a'进行比较。

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