string何时会导致类似于c++中的NullPointerException或ArrayOutOfBound索引的错误

When can string cause errors analogous to NullPointerException or ArrayOutOfBound index in c++?

本文关键字:ArrayOutOfBound 索引 错误 NullPointerException 中的 何时会 类似于 c++ string      更新时间:2023-10-16

Java识别上述错误,即NullPointerExceptionArrayOutOfBound错误,不像c++ (g++)。C++中的std::string如何以及何时会导致这些错误?c++如何处理这些错误(如运行时错误,如JAVA)?

c++集合为检查索引提供了at方法,保证会抛出超出范围的索引。

普通的[]索引不能保证抛出,只是对超出范围的索引给出未定义行为,但是通过支持索引检查的实现,可以更方便地调试和测试。

相应地,c++没有保证核心语言提供的空指针检查。除typeid表达式外,对空指针解引用仅具有未定义行为。这是因为c++设计的一个主要原则是,你不应该为你不使用的东西付费,通常在c++中,人们希望代码在没有昂贵检查的情况下全速运行。

没有“string function”在c++中,但是标准库提供了std::string类型

可以用空指针作为参数初始化std::string,从而产生未定义行为。也就是说,即使在这里也没有保证的空指针检查。与核心语言提供的检查相反,这可以说是一种设计错误,属于疏忽类型:它只是没有意义。