さて、いきなりですがここでクイズです。
以下に二つの、オーバーロードされた関数があります(C++)。
このとき、
と呼び出したとき、(1)と(2)のうちどちらの関数が呼び出されるでしょうか。
大多数の人は(2)と答えると思います。
正解は(1)なんです。
それは、何故かというと……。
実は私が一番知りたいです……。
何故なのでしょう。
調べた結果、以下が最適解だと思いました。
※何度も編集すみません…。
boolとstring
Re: boolとstring
「L"ほげ"」を関数の引数に渡すと、その型は「const wchar_t *」ですが、
(1)「const wchar_t *」→「bool」は暗黙のキャストで変換可能
(2)「const wchar_t *」→「std::wstring」は、暗黙のコンストラクタで変換可能
今回のケースでは、暗黙のキャストの(1)が優先されたのだと思います。
ちなみに、以下のように、「Hoge *」は暗黙のうちに「bool」に変換されることがあります。
if (p) ~ // pが0(NULL)でないなら
(1)「const wchar_t *」→「bool」は暗黙のキャストで変換可能
(2)「const wchar_t *」→「std::wstring」は、暗黙のコンストラクタで変換可能
今回のケースでは、暗黙のキャストの(1)が優先されたのだと思います。
ちなみに、以下のように、「Hoge *」は暗黙のうちに「bool」に変換されることがあります。
if (p) ~ // pが0(NULL)でないなら
Re: boolとstring
解説ありがとうございます。
const wchar_t *がboolへ暗黙キャストできるのは初耳でした。
しかし、なぜ「16bit整数値のポインタ」と「サイズ不明の整数値(ポインタではない)」とでどうして暗黙のキャストができるのでしょうか。
どう考えてもできるようには思いませんが……。
const wchar_t *がboolへ暗黙キャストできるのは初耳でした。
しかし、なぜ「16bit整数値のポインタ」と「サイズ不明の整数値(ポインタではない)」とでどうして暗黙のキャストができるのでしょうか。
どう考えてもできるようには思いませんが……。