我有一个简单但可能很愚蠢的问题。我被要求指出两种初始化方式之间的区别。我真的无法指出其中的区别。你能帮我吗?
useQuery()
答案 0 :(得分:4)
假设 A
是 class
或 struct
,则:
A(int a);
定义一个 converting constructor,要求调用者在创建 A
的对象实例时提供输入值,例如:
A a(12345); // OK
A a; // ERROR
鉴于:
A(int a=3);
定义一个具有默认参数值的转换构造函数,允许调用者在需要时省略传入一个值,例如:
A a1(12345); // OK, will use a=12345
A a2; // OK, will use a=3
由于在此构造函数中传入输入值是可选的,因此它也可以用作 A
的 default constructor,除非也定义了一个,那么这对于哪个构造函数变得不明确在没有提供输入值时调用,例如:
A();
A(int a = 3);
A a; // ERROR, ambiguity
答案 1 :(得分:1)
在第一个中,您必须为构造函数提供一个 int
。
A(int a);
在第二个中,您可以提供 int
,但如果您不提供,a
的默认值将为 3
。
A(int a = 3);
答案 2 :(得分:0)
A(int a); A(int a=3);
我们不能在类中一起声明上面的构造函数声明。
因为编译器会说函数已经定义。
A(int a);等于 A(int a=3);
例如,如果您有一个如下所示的构造函数
A(int value=3) { a = value; cout << "\n一个参数构造函数" << " a="<
对象创建: A a1; A a2(6); 输出: 一个参数构造器 a=3
一个参数构造器 a=6