C++ 中的字符串是否没有越界例外/错误?

问题描述

string p="a";
cout<<p[4];

这段代码没有给出任何错误。这是否意味着 C++ 中的字符串数据类型也不像数组一样有界?

解决方法

您的代码有未定义的行为

std::string::operator[] 不执行任何边界检查。

std::string::at() 另一方面,当您访问超出边界的数据时,它会执行边界检查并抛出类型为 std::out_of_range 的异常。

这是否意味着 C++ 中的字符串“数据类型”也不受数组限制?

当然 std::string 是有界限的。您访问其内容的方式是不同之处在于是否执行绑定检查。

,

参见 std::string::at(),它会在出错时抛出 std::out_of_rangeoperator [] 不检查边界。

标准 containers 也是如此,它提供随机访问(std::arraystd::vectorstd::dequestd::mapstd::unordered_map) : 通常,在 C++ 中,您应该始终确保不会发生超出范围的访问。这样可以提高程序的性能。但在某些特定情况下,使用异常处理(通过 trycatch)可能会有所帮助,但会牺牲一些性能。