-4

为什么 C++在编写类似代码时没有隐式转换为bool定义的容器和 STL 容器std::string

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

而不是更短

if (x) { ... }

什么时候x是类型std::string或例如std::vector

我也对std::string(在 C++03 中)没有const char*在 STL 示例中隐式转换为的事实感到困惑,例如

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

1 回答 1

5

在 C++ 中不这样做的一个原因是,这种转换往往会导致细微的错误

c_str()Stroustrup在 C++ 编程语言 [第 3 版] 中专门解决了您的问题:

转换为 C 风格的字符串可以由一个operator const char*()而不是c_str(). 在这种转换出乎意料的情况下,这将提供隐式转换的便利,但会以意外为代价。

于 2013-03-06T14:21:00.883 回答