带有数组的 C++ 构造函数初始化列表

Posted

技术标签:

【中文标题】带有数组的 C++ 构造函数初始化列表【英文标题】:C++ Constructor initialization list with array 【发布时间】:2016-03-02 18:29:24 【问题描述】:

我在这里做错了什么?编译器告诉我这是一个语法错误。

class Color 
private:
    float rgba[4];
public:
    Color(float red, float green, float blue, float alpha=1.0):
            this->rgba[0] (red * alpha),
            this->rgba[1] (green*alpha)
            this->rgba[2] (blue*alpha)
    

    
;

【问题讨论】:

我知道这可能只是一个家庭作业。但请检查您的图形库是否真的需要将 RGBA 预乘以 A 乘以 A 是不是一个坏主意?你能告诉我更多关于它的信息吗? “A”的原因是一次更改所有颜色,处理叠加图像等。通常图形硬件会在显示时进行乘法运算。 this->rgba[0] 是一个错误。在: 之后唯一可以出现的是成员标识符,即rgba 是这个类的唯一选项 【参考方案1】:

应该是

Color(float red, float green, float blue, float alpha=1.0):
            rgbared * alpha, green*alpha, blue*alpha, 0
    

    

【讨论】:

这假定编译器兼容 C++11。有些人仍然没有使用 C++11。 有些人还没有发现电脑,所以我们应该把这个答案打印出来并做传单投递【参考方案2】:

您可以使用 asigment 运算符代替括号:

this->rgba[0](red * alpha) // wrong
this->rgba[1] = red * alpha // ok

【讨论】:

以上是关于带有数组的 C++ 构造函数初始化列表的主要内容,如果未能解决你的问题,请参考以下文章

C ++:如何在派生类中定义基类构造函数,如果基构造函数具有带有私有成员的初始化列表[重复]

C++ 为类模板提供初始化列表构造函数

C++初始化列表构造函数VS普通构造函数

构造函数初始值设定项列表中长度未知的数组

C++ 构造函数初始化列表

函数调用或构造函数调用中的 C++ 数组初始化