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

关于C++中数组初始化后无法使用初始化式赋值的疑问

关于C++数组无法整体赋值的疑问解答

嘿,我来给你掰扯清楚Stroustrup在《C++程序设计语言》(TCPPPL)里说的这句话到底啥意思~

首先看你提到的数组初始化代码:

char v4[3]={'a', 'b', 0};

这是数组初始化操作——在数组创建的同时,用大括号列表给它的元素逐一赋值,这是C++完全允许的,编译器会把这些值依次填充到数组对应的内存位置中。

而书中说的“没有与初始化匹配的数组赋值方式”,核心含义就是:数组完成初始化之后,你没法再用这种大括号列表的形式对数组进行整体赋值。就像你贴的报错代码:

void f() { v4={'c','d',0}; //error: no array assignment }

这里试图把大括号里的整个值列表直接赋值给已经存在的数组v4,但C++的原生数组类型并不支持这种操作。原因是在赋值语境下,数组名会被隐式转换成指向数组第一个元素的指针,而你不能把一个初始化列表直接赋值给指针,所以编译器会抛出“no array assignment”的错误。

如果想要给已初始化的数组重新设置所有元素的值,你得换种方式:

  • 逐个元素赋值:v4[0]='c'; v4[1]='d'; v4[2]=0;
  • 用标准库函数批量复制,比如std::copy
  • 或者改用C++11引入的std::array容器,它支持这种直观的整体赋值操作,比如:
    std::array<char, 3> v4 = {'a', 'b', 0};
    v4 = {'c', 'd', 0}; // 完全合法
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:27:20