c – 奇怪的默认构造函数语法

c – 奇怪的默认构造函数语法,第1张

概述在一些传统代码中查看以下内容: class A { &A() { ... }} 什么“&”用于?它在VC 2008中编译,看起来像默认构造函数, bug gcc无法编译. 虽然在语法上在语法中被允许在这个位置(这是一个声明符的例子,它是序列:ptr-operator declarator,&是一个ptr运算符),在语义上它没有意义,在这里是不允许的.事实上,纯粹是从语法的角度来看,Vis 在一些传统代码中查看以下内容:
class A {    &A() { ... }}

什么“&”用于?它在VC 2008中编译,看起来像默认构造函数,
BUG gcc无法编译.

解决方法 虽然在语法上在语法中被允许在这个位置(这是一个声明符的例子,它是序列:ptr-operator declarator,&是一个ptr运算符),在语义上它没有意义,在这里是不允许的.事实上,纯粹是从语法的角度来看,Visual Studio可能会接受它.

检查可能性,这个声明看起来像一个没有返回类型的函数定义. 7 [dcl.dcl] / 6说:“只有在构造函数,析构函数和类型转换的函数声明中,可以忽略decl-specifIEr-seq.而没有〜或者 *** 作符的唯一可能性是构造函数声明.

12.1 [class.ctor] / 1描述了用于构造函数的特殊声明符语法,它只能是一个可选的函数说明符序列,后面是构造函数的类名.不和或者在构造函数的类名之前允许其他ptr-operator.

总结

以上是内存溢出为你收集整理的c – 奇怪的默认构造函数语法全部内容,希望文章能够帮你解决c – 奇怪的默认构造函数语法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1253687.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存