首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >静态成员变量初始化c++

问静态成员变量初始化c++
EN

Stack Overflow用户
提问于 2012-03-16 21:25:00
回答 2查看 1.3K关注 0票数 0
  1. 为什么编译器在不将值初始化为静态成员变量时会给出一个错误?它不应该初始化为0吗?
  2. 为什么我必须在类之外初始化成员变量?(这是非法的,因为如果您这样做,并且在主函数中更改了这个静态成员变量的值,并且创建了这个clas的一个对象,它就会将静态mamber变量重新赋值给旧值),而const静态成员变量在类内初始化是合法的(这是可能的,因为您无论如何都不能更改这个静态成员变量的值)?

。

错误:对class_name::a的未定义引用

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-16 21:32:36

从发布的错误中,链接器声明变量没有定义的,而不是没有显式初始化的。

代码语言:javascript
复制
class A
{
    // declaration.
    static int x;
};

// definition (in this case without explicit initialisation).
int A::x;

链接器不应该发出错误,编译器也不应该发出警告,只要在为static变量分配初始值之前不尝试使用它。

票数 5
EN

Stack Overflow用户

发布于 2012-03-16 21:33:58

静态成员实际上并不存储在创建的任何对象中,因为它是在该类的所有对象之间共享的。

它应该只创建一次,即使您创建了该类的许多对象。或者即使您没有创建类的对象。所以你必须分开做。

编译器警告所有类型的非独立变量,而不仅仅是静态变量。拥有一个没有值的变量通常不是很有用,所以这些警告是好的。添加一个= 0并不太难,是吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9744722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档