为什么即使尚未初始化,获取字符串[0]也是有效的?
Why is it valid to get string[0] even when it has not been initialized?
请考虑此代码
string str;
cout << str[0] << str.size();
我得到的不是运行时错误,而是" 0"
,一个空格后面的0
。为什么会这样?
str
不是未初始化的,它默认为空std::string
;即它的size()
是0
。从 C++11 开始,该标准要求 std::basic_string::operator[] 返回对这种情况的空字符的引用。
如果
pos == size()
,则返回对值为CharT()
的字符(空字符)的引用。
值得注意的是,在 C++11 之前,对于operator[]
的非 const 版本,这是未定义的行为,对于 const 版本,将返回对 null 字符的引用;并且由于 C++11 对于非 const 版本,对返回的引用上的其他字符的任何修改都是未定义的行为。
顺便说一句:未定义的行为意味着一切皆有可能;它不一定是运行时错误。
相关文章:
- 有哪些有效的方法可以消除一组 100 万个字符串>重复数据?
- 当映射包含字符串向量作为值时,从值中获取键的有效方法
- 如何正确解析子字符串,以便它们对我的新手计算器有效?
- C++程序在将 int 与 cin 一起使用时有效,但不能使用字符串
- 如何检查字符串格式在读取C++文本文件时是否有效?
- 创建字符串数组的有效方法
- 访问包含P的有效索引时返回空格的C++字符串
- 如何有效地将一个大std::字符串的一部分转换为float
- C++Int有效地字符串
- 是否有更有效的方法来生成日期的REGEX字符串
- 是什么使这个以'+'开头的字符串添加成为有效的语句?
- 为C++字符串中的特殊符号 (") 赋予文字含义的有效C++方法
- 拆分字符串输入并查找字符是否有效
- 设计返回有效字符串的方法或函数
- 使用 pair<int、int> 或字符串作为 map<> 键,哪个更有效?
- 字符串只包含有效的字符?
- 如何更有效地计算n个字符串之间的不匹配分数?
- 当字符串中只有一个"GOOD"字符串可用时,从没有空格的字符串中提取第一个单词的最佳和有效方法?
- 使用UTF8Proc的C 字符串到UTF8有效字符串
- 保证有效字符串作为函数参数