簡體   English   中英

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 && 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM