1.如图,b类公共继承a类,b的构造函数会调用a的构造函数,打箭头的地方出现形参i的重定义的错误
2.但是如果把a(i)写在b的构造函数的括号外就编译通过(箭头所示),这是为什么。形参的重定义出现的原因应该是同名形参重复的定义,但是我没有定义第二遍啊。
1.如图,b类公共继承a类,b的构造函数会调用a的构造函数,打箭头的地方出现形参i的重定义的错误
2.但是如果把a(i)写在b的构造函数的括号外就编译通过(箭头所示),这是为什么。形参的重定义出现的原因应该是同名形参重复的定义,但是我没有定义第二遍啊。
2 回答1.7k 阅读✓ 已解决
2 回答1k 阅读✓ 已解决
1 回答1.6k 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
1 回答932 阅读
1 回答1.1k 阅读
2 回答1.1k 阅读
第一种语境下,
a(i);
是一个语句(statement),此时编译器会把它解析成变量声明,由此局部变量i
与函数参数重名。根据语法,它可以被解释成函数式显式类型转换或者声明,存在二义性。标准约定将其解释成声明。
你给出的第二种语境下,
a(i)
是ctor-initializer,不存在表达式、声明二义性。