【发布时间】:2023-03-16 12:00:02
【问题描述】:
为什么C++空字符串可以在任意位置访问而不会出错?
例如,
string str("");
str[1], str[2] 只会返回空。
为什么下面的语句没有报错?
str[2] = 'a'
但是,打印出str 仍然显示空字符串。
我在这里很困惑,可能错过了一些东西。
【问题讨论】:
-
你用的是什么编译器?因为当我尝试分配
std::string str("")str[2] = 'a'时我的爆炸了 -
它可以返回空,但也可以格式化您的硬盘。
-
您所缺少的只是这是 Undefined Behaviour,C++ 不能保护您免受 Undefined Behaviour 的影响,而且它通常更好避免 UB 而不是试图猜测给定编译器将选择哪种特定的不可预测的故障机制。
-
非常感谢。非常有用的答案。