访问C++空字符串中的任何位置

Access any position in C++ empty string

本文关键字:任何 位置 字符串 C++ 访问      更新时间:2023-10-16

为什么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)