微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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)可能会有所帮助,但会牺牲一些性能。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。