访问C++空字符串中的任何位置
Access any position in C++ empty string
为什么C++空字符串可以在任何位置访问而不会出错?
例如,
string str("");
str[1]
、str[2]
将仅返回空。
为什么下面的语句不抛出错误?
str[2] = 'a'
但是,打印出str
仍然显示空字符串。
我在这里很困惑,可能错过了什么。
访问超出范围的下标是未定义的。对于空的std::string
,使用任何下标都是非法的。
但是,库不需要检查下标的值。确保下标合法的工作留给程序员,也就是你。
字符串(有点)是一个可以插入内容的字符数组。当您将其设置为"时,它保证的长度至少有0个字符可用。当你把某个东西分配给角色[2]时,行为是不明确的,它有权爆炸,但它很有可能足够大,可以在没有注意到的情况下吸收你的错误。。。
std::string
元素可以使用[]
运算符和at()
函数访问。运算符需要执行无边界检查,就像C++中的常规数组访问一样,而函数为无效索引抛出out_of_range
。
除了Yu和Andy的答案当然是正确的之外,我想向您介绍string::at
,它与string::operator[]
不同,会进行边界检查,如果您尝试越界访问,则会通过异常:
#include <string>
int main()
{
std::string s("");
return s.at(1);
}
输出:
terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::at
Aborted (core dumped)
相关文章:
- 是否有任何优雅的方式来遍历元素位置可以更改的列表?
- boost::p rogram_options 在指定意外的位置参数时不报告任何错误
- 我们可以在声明中的任何位置放置"typedef"说明符吗?
- 编译时检查以确保结构中的任何位置都没有填充
- pimpl 在 C++ 应用程序/库中的什么位置使用?任何例子
- 在构造函数以外的任何其他位置访问相机时,我的相机指针返回 null
- 使用Back_inserter从任何位置的输入字符中使用Back_inserter进行过滤数组字符串
- 如何在不删除任何字符的情况下将字符从字符串中的某个位置移动到其最前面
- 如何在任何位置阅读和替换C++单词
- 在DOS窗口中的任何位置写入
- std::list c++是连续的,那么在序列中的任何位置插入和擦除操作都需要恒定的时间
- 给定有向图和商店位置,放置商店,使从任何城市到最近商店的最大距离最小化
- 使用c++在opencv中检测图像中任何文本的位置
- 如何将顶点位置传递给顶点着色器.我写了一个着色器,它不会在屏幕上绘制任何内容
- Win32本机(api或任何东西)读取当前机器的地理位置
- 从任何位置开始迭代整个数组,仅使用一个变量
- 从STL列表的任何位置访问头
- 在调用函数的任何位置获取文件名和函数名
- 在标准C++库中的任何位置都使用了thread::id
- 访问C++空字符串中的任何位置