-4

次のようなコードを記述するときに、 C++ がbool定義済みの forおよび STL コンテナーへの暗黙的な変換を行わないのはなぜですか。std::string

if (!x.empty()) { ... }

もっと短くする代わりに

if (x) { ... }

いつxのタイプですかstd::string、たとえばstd::vector?

また、(C++03 では) STL の例のようなstd::string暗黙的な変換を行わないという事実にも困惑しています。const char*

std::string s("filename");
std::ofstream(s.c_str();
4

1 に答える 1

5

C++ でこれを行わない理由の 1 つは、そのような変換は微妙なバグにつながる傾向があるためです。

c_str()Stroustrupは、C++ プログラミング言語 [第 3 版]に関するあなたの質問に具体的に答えています。

C スタイルの文字列への変換は、operator const char*()ではなくによって提供された可能性がありc_str()ます。これは、そのような変換が予想外であった場合に驚きを犠牲にして、暗黙的な変換の利便性を提供していたでしょう。

于 2013-03-06T14:21:00.883 に答える