请解释我的结构定义中的冒号?

时间:2011-01-26 08:09:05

标签: c++ syntax ctor-initializer

  

可能重复:
  What does a colon following a C++ constructor name do?

我正在读一本关于CUDA& amp;我在阅读这个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)  {}

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

3 个答案:

答案 0 :(得分:6)

这是C ++语法。

cuComplex( float a, float b )

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

: r(a) , i(b)

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

其余的是一个空函数实现。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

cuComplex中的

: r(a) , i(b) 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
}