0

このコード test.cc

#include <iostream>
int main(){
    int a = 10;
    bool b {a};
    bool c (a);
    std::cout << a
              << " "
              << b 
              << " "
              << std::endl;
    return 0;
}

clang または gcc で

$clang++ -w test.cc
<source>:4:13: error: non-constant-expression cannot be narrowed from type 'int' to 'bool' in initializer list [-Wc++11-narrowing]
    bool b {a};
            ^
<source>:4:13: note: insert an explicit cast to silence this issue
    bool b {a};
            ^
            static_cast<bool>( )
1 error generated.

$g++ -w test.cc ; ./a.out
10 1

Clang は 4 行目でエラー メッセージを表示するだけですが、5 行目は見落としています。GCC では、うまくコンパイルされます。

ゴッドボルトで再現: https ://godbolt.org/z/rzxTSg

「b {a};」の使用の違いは何だろうと思っています。および「c (a);」値を初期化します。

私は何かを逃すかもしれないと思います、誰かが私を助けてくれますか? ありがとう〜

4

0 に答える 0