string :: at和string :: operator []有什么区别?

时间:2013-02-05 02:13:04

标签: c++ string

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

我现在正在使用operator[]并且之前没有使用at,但有什么区别? 以下是一些示例代码:

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

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

3 个答案:

答案 0 :(得分:17)

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

答案 1 :(得分:11)

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

operator[] 不检查边界,因此如果您尝试超出字符串的边界,则可能会有危险。它比at快一点。

答案 2 :(得分:5)

<强>的std :: string ::在

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

<强>串::操作符[]

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

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

快得多

请参阅reference