Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 它在构造函数声明中是什么意思_C++ - Fatal编程技术网

C++ 它在构造函数声明中是什么意思

C++ 它在构造函数声明中是什么意思,c++,C++,可能重复: 我找到了这段代码,它是Vector3f类的构造函数 Vector3f::Vector3f() : x(0) , y(0) , z(0) { } 这个定义:x0,y0,z0是什么意思?我该如何使用它?这称为类初始化器列表。必须有3个成员变量,x y z,并且它正在将它们全部设置为0 退房 类初始化列表很整洁,因为它们允许您在构造函数中的代码执行之前设置类状态的初始值。这与仅在构造函数中赋值不同,并使许多事情成为可能: 它们允许您为常量成员赋值 它们是将值传

可能重复:

我找到了这段代码,它是Vector3f类的构造函数

Vector3f::Vector3f()
    : x(0)
    , y(0)
    , z(0)
{

}

这个定义:x0,y0,z0是什么意思?我该如何使用它?

这称为类初始化器列表。必须有3个成员变量,x y z,并且它正在将它们全部设置为0

退房

类初始化列表很整洁,因为它们允许您在构造函数中的代码执行之前设置类状态的初始值。这与仅在构造函数中赋值不同,并使许多事情成为可能:

它们允许您为常量成员赋值 它们是将值传递给父类构造函数的唯一方法 它们是实例化类中基于堆栈的成员对象的唯一方法,这些对象需要向构造函数传递某种值。
这称为类初始化器列表。必须有3个成员变量,x y z,并且它正在将它们全部设置为0

退房

类初始化列表很整洁,因为它们允许您在构造函数中的代码执行之前设置类状态的初始值。这与仅在构造函数中赋值不同,并使许多事情成为可能:

它们允许您为常量成员赋值 它们是将值传递给父类构造函数的唯一方法 它们是实例化类中基于堆栈的成员对象的唯一方法,这些对象需要向构造函数传递某种值。

在C++中被称为初始化列表。 In初始化变量x、y和z

在这种情况下,假设x、y和z为int,则与:

x = 0
y = 0
z = 0
正如@Charles Bailey恰当地指出的,如果类型不是int,而是一些自定义的用户定义类,那么赋值和构造可能不是完全等价的

说明: 在初始化列表中,通过调用每个变量上的适当默认构造函数初始化类型,对于int类型的内置数据类型,这与赋值相同,但对于自定义类,构造函数操作可能不同于赋值操作。

在C++中称为初始化列表。 In初始化变量x、y和z

在这种情况下,假设x、y和z为int,则与:

x = 0
y = 0
z = 0
正如@Charles Bailey恰当地指出的,如果类型不是int,而是一些自定义的用户定义类,那么赋值和构造可能不是完全等价的

说明:
在初始值设定项列表中,通过对每个变量调用适当的默认构造函数来初始化类型,对于int这样的内置数据类型,这与赋值相同,但对于自定义类,构造函数操作可能不同于赋值操作。

对于基元类型,它与

x = 0;
y = 0;
z = 0;

虽然初始化列表和主体内部的赋值之间有细微的区别。当我们通过初始值设定项列表初始化字段时,构造函数将被调用一次。如果我们使用赋值,那么字段将首先用默认构造函数初始化,然后通过赋值运算符用实际值重新赋值。

对于基本类型,它与

x = 0;
y = 0;
z = 0;

虽然初始化列表和主体内部的赋值之间有细微的区别。当我们通过初始值设定项列表初始化字段时,构造函数将被调用一次。如果我们使用赋值,那么字段将首先用默认构造函数初始化,然后通过赋值运算符用实际值重新赋值。

如果不知道x、y和z的类型,就不能说在这种情况下是相同的。当然,如果它们是例如INT,那么它将具有相同的效果,但它们的类类型可能具有不同的构造和赋值行为,或者它们甚至可能是常量。@Charles Bailey:没错,我只是假设它们是整数,但确实应该澄清一下。我在答案中添加了细节。如果不知道x、y和z的类型,就不能说在这种情况下是相同的。当然,如果它们是例如INT,那么它将具有相同的效果,但它们的类类型可能具有不同的构造和赋值行为,或者它们甚至可能是常量。@Charles Bailey:没错,我只是假设它们是整数,但确实应该澄清一下。我添加了要回答的详细信息。如果没有常见问题解答条目,应该有。看……这里有:@Fred公平地说,它并没有真正解释为什么要使用初始值设定项列表,而有一半是花在解释::operator@Josh我明白你的意思。“有更好的参考吗?”弗雷德承认我对刚才给出的答案有些偏见,是的,这是一个非常好的参考:如果没有常见问题条目,应该有。看……有:@Fred公平地说,它并没有真正解释为什么要使用初始值设定项列表,而有一半的时间花在了解释::运算符上
r@Josh我明白你的意思。是一个更好的参考吗?@Fred承认我对刚才给出的答案有些偏见,是的,这是一个非常好的参考: