C++中不属于特殊成员函数的构造函数是否仍属于成员函数?
关于C++自定义构造函数的归类问题
默认构造函数([class.default.ctor])、复制构造函数、移动构造函数([class.copy.ctor])、复制赋值运算符、移动赋值运算符([class.copy.assign])以及预期析构函数([class.dtor])属于特殊成员函数。
给定代码:
struct S { S(int, float, double); };
你对S的构造函数不属于特殊成员函数的判断是完全正确的——它既不是默认构造函数、复制构造函数,也不是移动构造函数,完全不在标准定义的特殊成员函数范围内。
这类带自定义参数的构造函数,属于普通成员函数,并非标准中定义的“特殊类型”成员函数。标准里的“特殊成员函数”是特指那六类拥有自动生成规则、具备专属语义的函数;而自定义构造函数只是用户显式声明的普通成员构造函数,没有特殊的自动生成逻辑或专属语言语义。
部分回答声称“所有构造函数都是特殊成员函数”是错误的,这混淆了“构造函数”这个大类和“特殊成员函数”这个子集的关系:构造函数是成员函数的一个类别,其中只有默认、复制、移动这三类属于特殊成员函数,其余自定义构造函数都只是普通成员函数。
内容的提问来源于stack exchange,提问作者coder2k
相关产品推荐
相关产品推荐

