0

コード例:

#include <iostream>

int main()
{
    if(int a = std::cin.get() && a == 'a')
    {
        std::cout << "True" << std::endl;
    }
}

質問

このコードをコンパイルすると、VisualStudioから警告が表示されますwarning C4700: uninitialized local variable 'a' used。ですから、それは初期化されていないことを理解しaています。しかし、式がどのように評価されるかを完全に理解したかったのです。上記のifステートメントが同等であるのは事実if(int a && a == 'a') { a = std::cin.get(); }ですか?誰かが何が起こるかを正確に説明できますか?

4

3 に答える 3

5

and演算子&&は、代入演算子よりも優先され=ます。つまり、ステートメントは次のように実行されます。

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

:-)

于 2012-05-22T21:33:45.447 に答える
0

式は、それ自体のステートメントであるかのように評価されます。このような:

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

したがって、初期化されていない変数とリテラルcharを比較して、AND-edaの結果で変数を初期化するのと同じです。std::cin.get() 'a'

于 2012-05-22T21:32:40.147 に答える
0

変数を使用してそれ自体を初期化します。最初にメモリが割り当てられ、次にそのメモリにあったものがすべて「a」と比較され、その結果が変数の初期化に使用されます。

于 2012-05-22T21:35:11.657 に答える