if 语句中运算符优先级的说明
Explanation of operator precedence in an if statement
示例代码:
#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"进行比较,并将结果用于初始化变量。
相关文章:
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 按对象的特定方法按升序排列的C++优先级队列
- 使用2个键的cpp-stl::优先级队列排序不正确
- 当使用通配符和null指针调用函数时,对输出的说明
- 关于C++中具有多重继承"this"指针的说明
- 为什么我需要C++中不同的排序格式来对这个USACO代码上的数组和优先级队列进行排序
- 打印优先级队列
- 带自定义比较器的最小优先级队列
- 优先级队列自定义比较器
- 16 位到 10 位转换代码说明
- 排序数组优先级队列
- 更改运行时优先级队列的排序功能
- C++ 基本 CTOR 说明 - 为什么不调用赋值/复制构造函数
- 优先级队列构造函数的工作
- 实现优先级队列
- 优先级队列功能比较
- 编译器指出结构和 int 说明的错误 2059
- 随机数生成函数说明
- 优先级队列实现说明
- if 语句中运算符优先级的说明