字符串::at和字符串::运算符[]之间的区别是什么

What is the difference between string::at and string::operator[]?

本文关键字:字符串 是什么 之间 区别 at 运算符      更新时间:2023-10-16

我在学校教过string::at,但通过探索字符串库,我看到了string::operator[],这是我以前从未见过的。

我现在使用operator[],从那以后就没有使用过at,但有什么区别?以下是一些示例代码:

std::string foo = "my redundant string has some text";
std::cout << foo[5];
std::cout << foo.at(5);

它们在输出方面基本相同,但是否存在一些我不知道的细微差异?

是的,有一个主要区别:使用.at()对传递的索引进行范围检查,如果它超过字符串的末尾,则抛出异常,而在这种情况下,operator[]只会带来未定义的行为

at执行边界检查,类型为std::out_of_range的异常将在无效访问时抛出。

operator[]不检查边界,因此如果您试图访问超出字符串边界的内容,这可能是危险的。不过它比at快一点。

std::string::在

返回对指定位置处字符的引用。执行边界检查时,将在无效访问时引发std::out_of_range类型的异常。

string::operator[]

返回对指定位置处字符的引用。不执行边界检查。使用operator[]进行越界访问是不可定义的行为。

string::operator[]应该比std::string::at 快很多

请参阅参考