大佬教程收集整理的这篇文章主要介绍了c – 为什么“Foo f(Bar());”可以是一个函数的声明,它接受类型Bar并返回类型Foo?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
问题:以下是定义还是声明?
Foo f(Bar());
答案:它可能是一个函数的声明,它接受类型Bar并返回类型Foo,或者它是一个F类型的定义,它具有一个构造函数,它带有类型Bar.问题是两者的语法是相同的,所以为了解决这个问题,C标准规定编译器必须优先使用函数声明来对象定义,因为它不能区分.
class Foo { }; class Bar { }; Foo f(Bar()); int main() { Bar b; f(b); return 0; }
但是这个代码编译:
class Foo { }; class Bar { }; Foo f(Bar()); Bar g(); int main() { f(g); return 0; }
正如您在问题中所说的那样,它可以具有的第二个含义是,您正在创建一个名为f的新Foo对象,您正在使用Bar()(Bar的新实例)调用构造函数.这将类似于:
Foo f = Foo(Bar());
在这种情况下,Foo(Bar());但是,编译器会选择第一个解释.
有点混乱,如果你添加另一组括号,如同
Foo f((Bar()));
编译器选择第二个解释.
以上是大佬教程为你收集整理的c – 为什么“Foo f(Bar());”可以是一个函数的声明,它接受类型Bar并返回类型Foo?全部内容,希望文章能够帮你解决c – 为什么“Foo f(Bar());”可以是一个函数的声明,它接受类型Bar并返回类型Foo?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。