C++中的字符串没有没有边界的异或/错误吗?
这段代码没有给出任何错误。这是否意味着C++中的字符串数据类型也不象数组一样有界?< p>参见,它将在错误上抛出一个STD:OutOfOfLealEngress。不检查边界C++中的字符串没有没有边界的异或/错误吗?,c++,string,c++11,C++,String,C++11,这段代码没有给出任何错误。这是否意味着C++中的字符串数据类型也不象数组一样有界?< p>参见,它将在错误上抛出一个STD:OutOfOfLealEngress。不检查边界 同样的,对于提供随机访问STD::数组,STD::vector,STD::DeQ:ST::MAP,STD::unOrdEdjMmap:通常,在C++中,你应该总是确保没有超出范围的访问发生。这使得程序具有更高的性能。但在某些特定情况下,通过try-and-catch使用异常处理可能会有所帮助,从而牺牲一些性能。请参见,如果出
同样的,对于提供随机访问STD::数组,STD::vector,STD::DeQ:ST::MAP,STD::unOrdEdjMmap:通常,在C++中,你应该总是确保没有超出范围的访问发生。这使得程序具有更高的性能。但在某些特定情况下,通过try-and-catch使用异常处理可能会有所帮助,从而牺牲一些性能。
请参见,如果出现错误,它将抛出std::out\u范围。不检查边界同样的,对于提供随机访问STD::数组,STD::vector,STD::DeQ:ST::MAP,STD::unOrdEdjMmap:通常,在C++中,你应该总是确保没有超出范围的访问发生。这使得程序具有更高的性能。但在某些特定情况下,通过try-and-catch使用异常处理可能会有所帮助,从而牺牲一些性能。
您的代码具有未定义的行为 std::string::operator[]不执行任何绑定检查 另一方面,当您访问超出范围的数据时,std::string::at执行绑定检查并抛出std::out_of_range类型的异常这是否意味着C++中的字符串数据类型也不象数组一样有界?
当然,std::string有边界。访问其内容的方式不同于是否执行绑定检查。您的代码具有未定义的行为 std::string::operator[]不执行任何绑定检查 另一方面,当您访问超出范围的数据时,std::string::at执行绑定检查并抛出std::out_of_range类型的异常这是否意味着C++中的字符串数据类型也不象数组一样有界?
当然,std::string有边界。您访问其内容的方式不同于是否执行绑定检查。同样,[]运算符不检查绑定中使用的任何内容,如STL中的向量、贴图和集合?@AshishChourasia它的行为取决于容器。对于向量,它不检查任何内容;对于贴图,如果缺少元素,它会自动插入元素;对于集合,它不起作用。此外,更准确地说,大多数编译器的标准库实现都有一种打开边界检查的方法,[]操作符也不检查边界中使用的任何内容,如STL中的向量、映射和集合?@AshishChourasia它的行为取决于容器。对于向量,它不检查任何内容;对于贴图,如果缺少元素,它会自动插入元素;对于集合,它不起作用。而且,更准确地说,大多数编译器的标准库实现都有一种打开边界检查的方法。
string p="a";
cout<<p[4];