C++中两个不同名称的声明如何构成对应关系?
C++标准中声明对应关系的问题解答
不同类构造函数的对应关系判断
你关于类A和B的构造函数A()、B()构成对应关系的理解是错误的——来自不同类的构造函数不构成对应关系。
标准中提到的“都声明构造函数即构成对应关系”,仅针对同一个类的构造函数场景:比如类内声明构造函数、类外定义该构造函数的两个声明,或是同一类在不同翻译单元中的构造函数声明。跨类的构造函数分属不同类,不属于该条款的适用范围,自然不构成对应关系。
不同名称的声明构成对应关系的示例
最典型的例子是利用类别名声明同一类的构造/析构函数:
class A {}; typedef A MyA; // 以下两个声明属于同一构造函数的不同写法,构成对应关系 A::A() {} MyA::MyA() {}
这里A::A()和MyA::MyA()写法上的名称不同(A vs MyA),但MyA是A的typedef别名,本质上指向同一类的构造函数,符合标准中“都声明构造函数”的对应关系判定。
另外,同一类的析构函数的不同写法也符合要求:
class A { public: ~A(); // 类内声明 }; A::~A() {} // 类外定义,与类内声明构成对应关系
类内的~A()和类外的A::~A()写法上的名称形式不同,但属于同一析构函数的声明与定义,构成对应关系。
内容的提问来源于stack exchange,提问作者Roman
相关产品推荐
相关产品推荐

