C++中MyStruct(some)写法为何可编译?是否符合C++标准?
关于
MyStruct(some)写法的C++标准合规性及原理解析 这种写法完全符合C++标准,本质是C++变量声明的一种语法形式,和MyStruct some;等价。
具体原因:
- C++标准允许在声明变量时用括号包裹变量名,这种写法会被编译器解析为变量定义+默认初始化。你的结构体
MyStruct因为成员i有默认初始化值int i=1,编译器会自动生成默认构造函数,因此MyStruct(some);就等价于声明并初始化一个MyStruct类型的变量some。 - 要注意区分"最令人头疼的解析"场景(比如
MyStruct some();会被解析为函数声明),但MyStruct(some);的写法不会触发这个问题——编译器会优先将其解析为变量声明,而非函数声明,因为括号里的some没有函数参数的语法特征(比如类型标注)。
验证说明:
代码运行时输出1,正好对应MyStruct成员i的默认初始化值,说明some确实被正确初始化为MyStruct类型的实例。
内容的提问来源于stack exchange,提问作者shan
相关产品推荐
相关产品推荐

