You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用范围for循环遍历字符数组是否属于C++未定义行为?

关于C++数组范围for循环是否属于未定义行为的解答

这段代码完全不存在未定义行为,是符合C++标准的合法写法,具体原因如下:

  • 针对数组类型,C++标准明确规定了范围for循环的处理逻辑:编译器会自动通过数组的首地址和首地址+数组长度确定迭代范围,等价于调用std::begin和std::end。
  • 对于wchar_t my_array[] = { L'h', L'e', L'l', L'l', L'o' }这个长度为5的数组,std::begin(my_array)返回数组首元素的指针,std::end(my_array)返回指向数组末元素后一位的指针——这种尾后指针是标准允许的合法指针,只要不对它进行解引用操作就没有问题。而范围for循环只会迭代到end()之前的元素,不会触发对尾后指针的解引用,因此不存在越界风险。
  • 循环中的const auto& wch只是绑定到数组的每个现有元素,没有任何非法访问或越界操作。

实际运行这段代码会正确输出hello,行为完全符合预期,不存在未定义行为的隐患。

内容的提问来源于stack exchange,提问作者Amit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 08:01:00