我在学校里被string::at
教了,但是通过探索字符串库,我看到了string::operator[]
,这是我以前从未见过的。
我现在正在使用operator[]
并且之前没有使用at
,但有什么区别?
以下是一些示例代码:
std::string foo = "my redundant string has some text";
std::cout << foo[5];
std::cout << foo.at(5);
它们在输出方面基本相同,但是有一些我不知道的细微差别吗?
答案 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