【发布时间】:2013-03-06 14:17:44
【问题描述】:
在编写类似代码时,为什么 C++ 没有为 std::string 和 STL 容器定义到 bool 的隐式转换
if (!x.empty()) { ... }
而不是更短
if (x) { ... }
当x 的类型为std::string 或例如std::vector?
我也对 std::string(在 C++03 中)没有在 STL 示例中隐式转换为 const char* 的事实感到困惑,例如
std::string s("filename");
std::ofstream(s.c_str();
【问题讨论】:
-
如果你认为这会损害 C++ 的可用性,请远离我的代码。
-
这似乎更像是一个咆哮而不是一个问题。 (另外,我非常不同意你的假设,即那些隐式转换会使编码更容易/更好。)
-
欢迎添加。此外,使用
x.empty()而不是x.size(),empty()始终是常数时间,而size()在某些容器中是线性的。 -
在 C++11 中,您可以将
std::string直接作为文件流的文件名传递。那里不需要转换。 -
@Nordlöw:我怀疑反对票更多地与问题的措辞方式有关,而不是问题本身。
标签: c++ stl containers implicit-conversion stdstring