类中这么写: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);//此处报错
}
}; 因为是static,是所有class test的实例都共用的,所以在没有定义的情况下是访问不了的。你应该在implement中实现其实例 比如定义 const int test::a = 5; void foo(int &c)
?????????????????? 引用和取地址不一样吧 foo(&a) static const int a= 5;//可以在这里初始化吗??????? 这属于没有好好看书的
静态成员属于类作用域,但不属于类对象,它的生命周期和普通的静态变量一样,程序运行时进行分配内存和初始化,程序结束时则被释放。所以不能在类的构造函数中进行初始化。
就仅从 关键字上 还有一个强大的词 那就是const
class test本身是申明,不占用任何空间。
实例化才是定义。
页:
[1]