构造函数中冒号后的变量[重复]

问题描述 投票:20回答:3

这个问题在这里已有答案:

我还在学习C ++并试图理解它。我正在查看一些代码并看到:

point3(float X, float Y, float Z) :
x(X), y(Y), z(Z)  // <----- what is this used for
{
}

位于构造函数参数旁边的“x(X),y(Y),z(Z)”是什么意思?

c++ constructor ctor-initializer
3个回答
19
投票

这是一种调用point3类成员构造函数的方法。如果x,y和z是浮点数,那么这只是一种更有效的写入方式

point3( float X, float Y, float Z):
{
   x = X;
   y = Y;
   z = Z;
}

但是如果x,y和z是类,那么这是将参数传递给它们的构造函数的唯一方法


4
投票

在你的例子中,point3是具有相同名称的类constructorpoint3),并且在开放括号:之前的结肠{右边的东西是initialization list,它反过来构造(即初始化)point3的成员变量(和也可用于将参数传递给基类[es]中的构造函数(如果有的话)。)


0
投票

其他人指出的成员初始化。但了解以下内容更为重要:

当参数属于float类型或其他内置类型时,除了使用成员初始化而不是赋值(在构造函数的主体中)在C ++中更惯用之外,没有明显的优点。

明显的优点是,如果参数是用户定义的类,则此成员初始化将导致调用复制构造函数而不是默认构造函数(如果使用赋值完成)(在构造函数的主体中)。

© www.soinside.com 2019 - 2024. All rights reserved.