缺少字符串和STL容器的隐式转换 < C++为什么不为 STD::String 和STL容器定义隐式转换为代码> Boo.,当编写代码时,如 if (!x.empty()) { ... }

缺少字符串和STL容器的隐式转换 < C++为什么不为 STD::String 和STL容器定义隐式转换为代码> Boo.,当编写代码时,如 if (!x.empty()) { ... },c++,stl,containers,implicit-conversion,stdstring,C++,Stl,Containers,Implicit Conversion,Stdstring,而不是更短 if (x) { ... } 当x的类型为std::string或例如std::vector 我还感到困惑的是,std::string(在C++03中)在STL示例中没有隐式转换为const char*,例如 std::string s("filename"); std::ofstream(s.c_str(); < > C++中没有这样做的一个原因是,这种转换有一种倾向。 StruouSUP在C++编程语言中具体解决了关于 CyScript()/Cuff>的问题[第三版]:<

而不是更短

if (x) { ... }
x
的类型为
std::string
或例如
std::vector

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

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

< > C++中没有这样做的一个原因是,这种转换有一种倾向。

StruouSUP在C++编程语言中具体解决了关于<代码> CyScript()/Cuff>的问题[第三版]:< /P> 转换为C样式字符串可能是由

操作符const char*()
而不是
C_str()
提供的。这本可以提供隐式转换的便利,但在这种转换出乎意料的情况下会带来意外


如果你认为这伤害了C++的可用性,就远离我的代码,这看起来更像是一个咆哮而不是一个问题。(另外,我非常不同意您的假设,即这些隐式转换将使编码更容易/更好。)请随意添加它们。此外,使用
x.empty()
而不是
x.size()
empty()
始终是常数时间,而
size()
在某些容器中是线性的。在C++11中,您可以直接将
std::string
作为文件流的文件名传递。诺德洛:我怀疑反对票更多的是因为问题的措辞,而不是问题本身。