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

C++中=与{}在赋值相关操作的区别及编译错误解析

Token{ch}与Token=ch的含义差异及编译错误原因

1. Token {ch}; 的含义

这是C++11引入的直接列表初始化语法,作用是创建一个匿名的Token类临时对象:

  • 编译器会匹配Token类中对应的构造函数(此处为Token(char ch)),用传入的ch值初始化临时对象的kind成员。
  • 这个临时对象仅在当前语句的生命周期内存在,语句执行完毕后会被自动销毁,除非它被用来初始化变量或绑定到const引用。

2. Token = ch; 编译错误的原因

赋值操作符=的使用有严格要求:赋值运算符的左侧必须是一个已经初始化完成的对象实例,而不能是类类型名。

  • 你写的Token = ch;中,Token是类的类型名称,不是一个已存在的Token对象,编译器无法识别这是合法的赋值操作,因此抛出expected unqualified-id错误——它期望左侧是一个合法的对象标识符(比如你定义的Token对象变量名),而非类型名。

如果想要实现类似的赋值逻辑,你需要先创建一个Token对象,再对其赋值(同时还需要确保类支持对应的赋值操作),比如:

// 先创建一个Token对象(用列表初始化)
Token t{ch};
// 如果需要给这个对象重新赋值,需确保Token支持char类型的赋值(比如重载operator=(char),或存在从char到Token的隐式转换)
t = 'b';

注意:如果直接写Token t;会报错,因为Token类没有定义默认构造函数,必须显式调用带参数的构造函数来初始化对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 01:45:42