wq_601840968 发表于 2018-8-9 10:28:26

类中这么写:static const int a=5;为什么不是定义,而是声明?

如题:如下代码会报错,因为对a没有定义,不能获取其地址。

void foo(int &c)
    {
       printf("%d", c);
    }

class test
{
    static const int a= 5;
public:
void print()
{
       printf("%d", a);
       foo(a);//此处报错
}
};

nanfang2000 发表于 2018-8-9 10:42:22

因为是static,是所有class test的实例都共用的,所以在没有定义的情况下是访问不了的。你应该在implement中实现其实例 比如定义 const int test::a = 5;

mcu5i51 发表于 2018-8-9 11:25:34

void foo(int &c)
??????????????????

sbusr 发表于 2018-8-9 13:35:01

引用和取地址不一样吧

DevLabs 发表于 2018-8-9 13:39:19

foo(&a)

gonboy 发表于 2018-8-10 20:42:33

static const int a= 5;//可以在这里初始化吗???????

ywlzh 发表于 2018-8-10 21:22:58

这属于没有好好看书的

静态成员属于类作用域,但不属于类对象,它的生命周期和普通的静态变量一样,程序运行时进行分配内存和初始化,程序结束时则被释放。所以不能在类的构造函数中进行初始化。

就仅从 关键字上 还有一个强大的词 那就是const

luobote55 发表于 2018-8-10 21:29:26

class test本身是申明,不占用任何空间。

实例化才是定义。
页: [1]
查看完整版本: 类中这么写:static const int a=5;为什么不是定义,而是声明?