Jes*_*ood 0 c++ operator-precedence
示例代码:
#include <iostream>
int main()
{
if(int a = std::cin.get() && a == 'a')
{
std::cout << "True" << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
问题:
当我编译这段代码时,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'))
Run Code Online (Sandbox Code Playgroud)
你真的想要使用明确的括号:
int a;
if ((a = std::cin.get()) && a == 'a')
Run Code Online (Sandbox Code Playgroud)
更好的是,写清楚代码:
int a = std::cin.get();
if (a == 'a')
Run Code Online (Sandbox Code Playgroud)
:-)
| 归档时间: |
|
| 查看次数: |
610 次 |
| 最近记录: |