【发布时间】:2021-10-18 18:17:41
【问题描述】:
在cppreference.com网站上有说明,类似的东西
对于每个声明器,初始化器可能是以下之一:
( 表达式列表 ) (1)
= 表达式 (2)
{ 初始化列表 } (3)
- 任意表达式的逗号分隔列表和括号中的花括号初始化列表
但在我的代码中
int main(){
int a,b=5,c(a,b);
return 0;
}
当我尝试编译时,出现以下错误
...错误:表达式列表在初始化程序 [-fpermissive] 中被视为复合表达式
我的问题是,如果在这种初始化风格中允许多个表达式列表,那么为什么编译器不接受变量c?
我错过了什么?
【问题讨论】:
-
你希望
c(a,b)做什么? -
只是测试我对该概念的了解(包括变量初始化中的逗号分隔列表),预计没问题,但正在生成编译时错误。
-
您是否希望
c的类型为int?你如何期望c(a,b)初始化一个int? -
a,b不能是表达式列表(因为 int 没有构造函数)。这是一个引起歧义的地方的逗号表达式,有效的初始化程序是c((a,b))。 -
我认为这里的答案将是“有效语法不保证可以编译的代码”
标签: c++ initialization