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()
切换到操作符[]
?嗯,我读到操作符[]更快,但不知道为什么。。。