请问这个形参的重定义的错误是怎么产生的

1.如图,b类公共继承a类,b的构造函数会调用a的构造函数,打箭头的地方出现形参i的重定义的错误
图片描述

2.但是如果把a(i)写在b的构造函数的括号外就编译通过(箭头所示),这是为什么。形参的重定义出现的原因应该是同名形参重复的定义,但是我没有定义第二遍啊。

图片描述

阅读 8.9k
1 个回答

第一种语境下,a(i);是一个语句(statement),此时编译器会把它解析成变量声明,由此局部变量i与函数参数重名。

根据语法,它可以被解释成函数式显式类型转换或者声明,存在二义性。标准约定将其解释成声明。

9.8.1 There is an ambiguity in the grammar involving expression-statements and declarations: An expression statement with a function-style explicit type conversion (8.2.3) as its leftmost subexpression can be indistinguishable from a declaration where the first declarator starts with a (. In those cases the statement is a declaration.

你给出的第二种语境下,a(i)是ctor-initializer,不存在表达式、声明二义性。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏