字符串::at和字符串::运算符[]之间的区别是什么
What is the difference between string::at and string::operator[]?
我在学校教过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
快很多
请参阅参考
相关文章:
- 初始化或分配空字符串文字到指向 C 中的 char 的指针或指向 C++ 中 const char 的指针的原因是什么
- 在C++17中,引用const字符串的语义应该是什么
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 字符串上的 C++ push_back() 和 pop_back() 的 Kotlin 是什么?
- 这里的字符串函数是什么意思
- 将位字符串转储到二进制文件的最佳方法是什么
- 是什么使这个以'+'开头的字符串添加成为有效的语句?
- 在c++中,减号和加号对字符串的作用是什么
- 当我们已经有 char[] 时,在 c++ 中字符串的必要性是什么?
- C++ 将字符串数据包转换为 iphdr语言 - 字符串数据包的格式应该是什么?
- 这句话是什么意思?半 += 字符串(频率[i] / 2, i + 'a');
- Xamarin Android:在 C++ 中将字符串从 C# 封送到 Unicode 字符串的正确方法是什么?
- 使用c 中的sort()函数对字符串进行排序的最坏情况是什么是什么
- 字符串文本不能有外部链接的原因是什么?
- 当我打印字符串时,我不知道它是什么输出
- 字符串中单个字符作为数组的数据类型是什么
- 检查字符串是否与可能的输入之一匹配的最有效方法是什么?
- '|' scanf 格式字符串是什么意思
- 一个字符串开始另一个字符串是什么意思?c++
- 表示文件路径的guid字符串是什么?