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

C++ 字符串::at和字符串::运算符[]之间的区别是什么?,c++,string,C++,String,我在学校里学的是string::at,但通过探索字符串库,我看到了string::operator[],这是我以前从未见过的 我现在使用的是操作符[],从那以后就没有在使用过,但是有什么区别呢? 以下是一些示例代码: std::string foo = "my redundant string has some text"; std::cout << foo[5]; std::cout << foo.at(5); std::string foo=“我的冗余字符串有一些文

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

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

std::string foo = "my redundant string has some text";
std::cout << foo[5];
std::cout << foo.at(5);
std::string foo=“我的冗余字符串有一些文本”;

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

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


不检查边界,因此,如果您试图访问超出字符串边界的内容,可能会很危险。它比at的速度稍快。

std::string::at

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

字符串::运算符[]

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

string::operator[]
应该比
std::string::at


请参见

您是否尝试为每一项提供参考?有一个区别,在比较参考文献时应该很容易发现。等等,在查看书籍或在线参考文献之前,您决定从
.at()
切换到
操作符[]
?嗯,我读到操作符[]更快,但不知道为什么。。。