2

可能重复:
C++ 构造函数名称后面的冒号有什么作用?

我正在阅读一本关于 CUDA 的书,并且在阅读此 C++ 语法时遇到了麻烦。我不确定要搜索什么,所以这就是我在这里发帖的原因。

struct cuComplex {
    float   r;
    float   i;
    cuComplex( float a, float b ) : r(a) , i(b)  {}
}

声明的作用是什么cuComplex?具体来说:

cuComplex( float a, float b ) : r(a) , i(b)  {}

这叫什么,所以我可以了解它?

4

3 回答 3

6

这是 C++ 语法。

cuComplex( float a, float b )

是为此结构定义的构造函数。

: r(a) , i(b)

称为成员初始化。这里本地成员 r 和 i 被设置为传递给构造函数的参数 a 和 b。

剩下的是一个空函数实现。

于 2011-01-26T08:11:38.633 回答
1

: r(a) , i(b) 在 cuComplex ctor 中,在分配时用括号之间的值构造内存。

struct cuComplex {
    const float   r;
    const float   i;
    cuComplex( float a, float b ) : r(a) , i(b)  {} // ok 
}

struct cuComplex {
    const float   r;
    const float   i;
    cuComplex( float a, float b ) {
        r = a;
        i = b;
    } // fail because once allocated, const memory can't be modified
}
于 2011-01-26T10:05:11.870 回答
1

那是 C++,而不是 C,因为 C 结构不能以这种方式包含函数(它们可以包含函数指针,但这与问题无关)。这是一个“cuComplex”类型的构造函数,它需要两个浮点数。它使用传入的值初始化两个成员变量“r”和“r”。

编辑每条评论: r(a) 和 i(b) 部分正在使用构造函数的参数值初始化成员变量。

于 2011-01-26T08:10:24.503 回答