【发布时间】:2015-11-02 07:02:54
【问题描述】:
我有以下代码:
string s = "haha";
cout << s << endl; //haha
cout << s.length() << endl; //4
cout << (s[25] == 'h' ? "is h" : "is not h") << endl; //is not h
cout << s[0] << endl; // h
cout << s[25] << endl; // nothing...blank
似乎指向任何索引,即使它超出范围也不会引发任何错误......这是什么原因?
【问题讨论】:
-
C++ 不对自身进行任何边界检查。您需要知道自己在做什么。
-
@PMF:确实如此,但前提是您告诉它这样做。通过
[]访问无效索引是未定义的行为。这意味着该行为未定义为提供错误消息、引发异常或使程序崩溃。它可以,但不是必须的,因此实现不必进行额外的边界检查——加快速度。通过at()访问被定义为如果索引无效则抛出异常。 -
回答你的“原因是什么”stackoverflow.com/questions/1239938/…