C++ 为什么可以';我们不能重载一个构造函数来给它添加一个默认参数 我们考虑下面的例子:
一,C++ 为什么可以';我们不能重载一个构造函数来给它添加一个默认参数 我们考虑下面的例子:,c++,constructor,C++,Constructor,一, #包括 结构X{ X(){}; X(常数X&,整数i=6); }; X::X(constx&X,inti){std::cout可以像函数一样重载构造函数 X::X(const X& x) //The copy constructor 及 在您的情况下:xz=X; 这是因为编译器将它扩展到xz(X);,它可以是普通的构造函数或复制构造函数。关键是,一个类是平凡的,还是平凡的可复制的,等等,都应该根据类定义来决定,而不需要了解整个程序。§8.3.6[dcl.fct.default]
#包括
结构X{
X(){};
X(常数X&,整数i=6);
};
X::X(constx&X,inti){std::cout可以像函数一样重载构造函数
X::X(const X& x) //The copy constructor
及
在您的情况下:xz=X;
这是因为编译器将它扩展到xz(X);
,它可以是普通的构造函数或复制构造函数。关键是,一个类是平凡的,还是平凡的可复制的,等等,都应该根据类定义来决定,而不需要了解整个程序。§8.3.6[dcl.fct.default]/p6(引用N4140):
除了类模板的成员函数外,默认参数
在类外部出现的成员函数定义中
将定义添加到
类定义中的成员函数声明;程序是
如果默认构造函数(12.1)、复制或移动构造函数,
或复制或移动赋值运算符(12.8)如此声明
请参阅。您在哪里找到N4140?该链接已断开。@DmitryFucintv github repo。
#include <iostream>
struct X {
X(){ };
X(const X&, int i);
};
X::X(const X& x, int i = 7) { std::cout << "ctor" << std::endl; } //error:
//addition of default argument on redeclaration makes this constructor a copy constructor
X x;
X z = x;
int main()
{
}
#include <iostream>
void foo(int i);
void bar(int j = 7);
void foo(int i = 7){ }
void bar(int j){ }
int main()
{
}
X::X(const X& x) //The copy constructor
X::X(const X& x, int i = 7) //A normal constructor