std::string my_string = "";
char test = my_string[0];
Run Code Online (Sandbox Code Playgroud)
我注意到这不会崩溃,每次我测试它,测试都是0.
我可以依赖它总是0吗?还是随意的?
这是不好的编程吗?
编辑:从一些评论中,我认为对此的有用性存在一些误解.
这样做的目的不是检查字符串是否为空.不需要检查字符串是否为空.
情况是有一个字符串可能是空的也可能不是.我只关心这个字符串的第一个字符(如果它不是空的).
在我看来,检查字符串是否为空是不太有效,然后,如果它不是空的,请查看第一个字符.
if (! my_string.empty())
test = my_string[0];
else
test = 0;
Run Code Online (Sandbox Code Playgroud)
相反,我只需查看第一个字符,无需检查字符串是否为空.
test = my_string[0];
Run Code Online (Sandbox Code Playgroud)
Bar*_*icz 68
没有; 你可以依靠它.
在21.4.5.2(或[string.access])中我们可以找到:
返回:
*(begin() + pos)ifpos < size().否则,返回对charT具有value 的类型对象的引用charT(),其中修改对象会导致未定义的行为.
换句话说,当pos == size()(两者都为0时为真)时,运算符将返回对默认构造的字符类型的引用,禁止您修改该字符类型.
对于空(或0大小)字符串,它不是特殊的,并且对于每个长度都是相同的.
而且大多数肯定是 C++ 98.
这取决于.
这是官方ISO/IEC 14882 的21.3.4.1:
返回:If
pos < size(),返回data()[pos].否则,如果pos == size(),const版本返回charT().否则,行为未定义.
ein*_*ica 31
@Bartek Banachewicz的答案解释了哪些情况允许你做出你的假设.我想补充一点
为什么?有几个原因:
我要继续吗?......我几乎可以肯定你几乎在所有方面都有另一种优势.我甚至冒昧地猜测你已经做了一些"糟糕"的事情来操纵自己想做这件事.
永远记住:其他不会咨询你的人,迟早会需要维护这段代码.想想他们,不仅仅是你自己,谁能想出来.另外,从现在开始的十年间,谁会说你会记住你自己的伎俩?你可能是那个困惑的维护者......
| 归档时间: |
|
| 查看次数: |
2681 次 |
| 最近记录: |