[英]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 && 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';
因此,這等同於初始化變量a
與從結果std::cin.get()
以AND未初始化的變量和字面炭之間的比較'a'
。
您正在使用變量進行初始化。 首先分配內存,然后將內存中的所有內容與“ a”進行比較,並將結果用於初始化變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.