【发布时间】:2015-01-30 00:00:06
【问题描述】:
c++ 中的std::string 没有隐式转换为布尔值有什么原因吗?例如
std::string s = ""
if (s) { /* s in not empty */ }
与其他语言(例如 python)一样。我觉得用empty这个方法很繁琐。
【问题讨论】:
-
因为它没有运算符
bool(),因为标准不需要一个,因为......应该如何定义?为什么你认为空为假,非空为真? -
它只是不是(空向量也不会评估为假,等等)。也许是疏忽,但由于已经出现大量隐式转换错误,因此可能故意省略。
-
@deviantfan:这不是我的意见:它在许多语言中都很常见
-
@RuggeroTurra 但是 C++ 不像 Python、JS 和 co。如果您根据 asm 中的字符串(跳转等)创建条件,那么您得到的最佳结果每次都是正确的,因为地址不是 0。这就是 C 和 C++ 的起源,而不是动态类型等。跨度>
-
这可能是许多语言的共同特征,但在那些语言中肯定没有一个共同的约定,字符串值应该被认为是假的,哪些应该被认为是真的。
标签: c++ string casting boolean