求cppreference所述字符串字面量过长致数组new表达式第一维错误的示例
字符串字面量过长导致数组new表达式错误的示例
嘿,我来给你构造一个实打实的例子,一眼就能看明白问题出在哪:
#include <iostream> int main() { // 尝试用含终止符共6个元素的字符串字面量,初始化大小为5的char数组 char* ptr = new char[5]{"hello"}; return 0; }
为什么这个例子会触发错误?
- 字符串字面量
"hello"实际包含的是'h'、'e'、'l'、'l'、'o'、'\0',总共6个元素 - 我们在
new char[5]里指定的数组第一维大小是5,明显小于初始化器提供的元素数量(6) - 根据cppreference的规则,这种情况属于非法的数组初始化,编译器会直接抛出编译错误(比如GCC会提示“array bound is not enough to contain the string literal”)
补充说明
你之前想到的auto p写法本质和上面的例子一致,比如auto p = new char[5]{"hello"};,核心问题都是数组指定的维度,小于字符串字面量(含终止符)的实际元素数量。
而且这种错误是编译期就能被捕获的,不会等到运行时才暴露——编译器会直接检查初始化器的元素总数是否超过数组的指定大小。
内容的提问来源于stack exchange,提问作者ledonter
相关产品推荐
相关产品推荐

