C ++`int * class :: * member = NULL`编译,为什么?

时间:2015-11-16 04:46:55

标签: c++

我无法弄清楚这是如何编译的。它似乎不应该,如果我在构造函数中使用NULL以外的值,它将不会。

#include <stdio.h>


class MyClass{
    private:
        int *first;
    public:
        MyClass();
};

MyClass::MyClass(){

    int whatever = 42;
    //int* MyClass::*first = &whatever;//This does not compile
    int* MyClass::*first = NULL;//This compiles
}

int main(){

    MyClass doSomething;
    return 1;
}

通常type Class::member = value语法通常用于静态变量,而这不是。

此外,会员名称前面有一个星号,这会使事情更加混乱。

如果我将行切换到注释掉的那一行,编译器会按预期抱怨。

error: cannot convert ‘int*’ to ‘int* MyClass::*’ in initialization

虽然我确实发现了错误,但我不知道类型int* MyClass::*是什么。或者如何使用它。

1 个答案:

答案 0 :(得分:0)

这是指向数据成员的指针。您无法使用普通指针初始化它,这就是注释掉的表达式无法编译的原因。