3

次のコードを検討してください。

#include <iostream>

class Bar
{
public:
    void foo(bool b = false, std::string name = "");
};

void Bar::foo(bool b, std::string name)
{
    if (!b)
    {
       std::cout << "b is false" << std::endl;
    }
    else
    {
       std::cout << "b is true" << std::endl;
    }
}

int main()
{
    Bar myBar;
    myBar.foo("bla");
    return 0;
}

C++ は壊れていないと思いますが、出力が true である理由を誰か説明してもらえますか? 私はVS 2010で作業していますが、gccを実行するideoneもチェックインしました

4

3 に答える 3

4

char const[4]コンパイラは、最初のパラメーター aを に暗黙的にキャストし、bool結果を にキャストしますtrue

と同等です

myBar.foo((bool)"bla");

これも同等です

myBar.foo((bool)"bla", "");
于 2012-08-16T07:26:59.867 に答える
1

"bla"でありchar const[4]、 に減衰しconst char*、bool にキャストされるためです。その値は ではない0ため、キャストは値を受け取りますtrue。より簡単な例:

#include <iostream>

int main()
{
  std::cout << std::boolalpha; // print bools nicely
  bool b = "Hello";
  std::cout << b << "\n";

}

生産する

真実

于 2012-08-16T07:28:16.390 に答える
0

Bool パラメーターは、"bla" を true に変換します。パラメータの順序を変更する必要があります。

于 2012-08-16T07:27:16.467 に答える