如何解决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_range
。 operator []
不检查边界。
标准 containers 也是如此,它提供随机访问(std::array
、std::vector
、std::deque
、std::map
、std::unordered_map
) : 通常,在 C++ 中,您应该始终确保不会发生超出范围的访问。这样可以提高程序的性能。但在某些特定情况下,使用异常处理(通过 try
和 catch
)可能会有所帮助,但会牺牲一些性能。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。