string何时会导致类似于c++中的NullPointerException或ArrayOutOfBound索引的错误
When can string cause errors analogous to NullPointerException or ArrayOutOfBound index in c++?
Java识别上述错误,即NullPointerException
和ArrayOutOfBound
错误,不像c++ (g++)。C++中的std::string
如何以及何时会导致这些错误?c++如何处理这些错误(如运行时错误,如JAVA)?
c++集合为检查索引提供了at
方法,保证会抛出超出范围的索引。
普通的[]
索引不能保证抛出,只是对超出范围的索引给出未定义行为,但是通过支持索引检查的实现,可以更方便地调试和测试。
相应地,c++没有保证核心语言提供的空指针检查。除typeid
表达式外,对空指针解引用仅具有未定义行为。这是因为c++设计的一个主要原则是,你不应该为你不使用的东西付费,通常在c++中,人们希望代码在没有昂贵检查的情况下全速运行。
没有“string
function”在c++中,但是标准库提供了std::string
类型
可以用空指针作为参数初始化std::string
,从而产生未定义行为。也就是说,即使在这里也没有保证的空指针检查。与核心语言提供的检查相反,这可以说是一种设计错误,属于疏忽类型:它只是没有意义。