为什么静态成员不能在类内初始化

转载:http://www.cnblogs.com/graphics/archive/2010/07/07/1772733.html

为什么静态成员不能在类内初始化

在C++中,类的静态成员(static member)必须在类内声明,在类外初始化,像下面这样。

class A
{
private:
    static int count ; // 类内声明
};

int A::count = 0 ; // 类外初始化,不必再加static关键字

 为什么?因为静态成员属于整个类,而不属于某个对象,如果在类内初始化,会导致每个对象都包含该静态成员,这是矛盾的。

什么东西能在类内初始化

  能在类中初始化的成员只有一种,那就是静态常量成员。

这样不行

class A
{
private:
    static int count = 0; // 静态成员不能在类内初始化
};

  这样也不行

class A
{
private:
    const int count = 0; // 常量成员也不能在类内初始化
};

  但是这样可以

class A
{
private:
    static const int count = 0; // 静态常量成员可以在类内初始化
};

  

时间: 2024-08-25 08:50:23

为什么静态成员不能在类内初始化的相关文章

静态成员不能在类内初始化

为什么静态成员不能在类内初始化 在C++中,类的静态成员(static member)必须在类内声明,在类外初始化,像下面这样. class A { private: static int count ; // 类内声明 }; int A::count = 0 ; // 类外初始化,不必再加static关键字 为什么?因为静态成员属于整个类,而不属于某个对象,如果在类内初始化,会导致每个对象都包含该静态成员,这是矛盾的. #include <iostream> #include <cst

C++ 静态成员的类内初始化

一般来说,关于C++类静态成员的初始化,并不会让人感到难以理解,但是提到C++ 静态成员的"类内初始化"那就容易迷糊了. 我们来看如下代码: 1 //example.h 2 #include<iostream> 3 #include<vector> 4 using namespace std; 5 6 class Example{ 7 public: 8 static double rate = 6.5; 9 static const int vecSize =

错误: ISO C++ 不允许在类内初始化非常量静态成员

错误: ISO C++ 不允许在类内初始化非常量静态成员 今天开始学C++ primer,在牵扯到Sales_item.h头文件时,出现了一些问题(和C++11新特性相关),当前的编译器版本是gcc/g++ 4.6.3,所以需要升级.可以利用PPA升级到4.8.1,如下: sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update; sudo apt-get install gcc-4.8 g++-4.8 sud

C++中静态成员变量的可以在类内初始化吗?

C++中的static成员变量主要用来为多个对象共享数据 例: #include <iostream> using namespace std; class Student{ public: Student(char *name, int age, float score); void show(); private: static int m_total; //静态成员变量 private: char *m_name; int m_age; float m_score; }; //初始化静态

为什么static成员必须在类外初始化,而不能在类的头文件中初始化

为什么static成员必须在类外初始化 为什么静态成员不能在类内初始化 在C++中,类的静态成员(static member)必须在类内声明,在类外初始化,像下面这样. class A { private: static int count ; // 类内声明 }; int A::count = 0 ; // 类外初始化,不必再加static关键字 为什么?因为静态成员属于整个类,而不属于某个对象,如果在类内初始化,会导致每个对象都包含该静态成员,这是矛盾的. 什么东西能在类内初始化 能在类中初

c++ 11 类成员初始化

以前不能在类定义中初始化成员? c++11允许这样做了,其语法类似于下面: class Session { int mem1 = 10; double mem2 {1966.54}; short mem3; public: Session(); //#1 Session(short s) : mem3(s) {} //#2 Session(int n, double d, short s) : mem1(n), mem2(d),mem3(s) {} //#3 }; 可以使用等号或大括号版本的初始

类内const static(static const)成员变量初始化问题

在查找const相关资料的过程中,又遇到了另外一个问题,就是C++类中const static(或者static const)成员变量应当如何初始化的问题. 查阅了许多资料,发现VC环境下,只允许const static成员变量在类外初始化,这个应该是编译器遗留下的bug(你也可以说是要求严格). 在其他编译器下,整型以及枚举类型的const static成员变量是允许在声明的同时进行初始的,其中整型包括int.short.long.char等,非整型是指浮点型 包括float.double等.

C++builder XE10 终于支持类内变量初始化了

Win32终于支持类内变量初始化了,C++11 class TPerson { public: String Name = "tt"; String Sex = "man"; int age = 88; };

Java类的初始化

Java提供了两种不同的初始化类型,分别是类的初始化和对象的初始化.类成员都是静态的,默认会设置一个值.对象的初始化会在构造函数里面进行.但如果想要赋给静态变量非默认值,或者是初始化一类共有的对象属性(不论调用哪个构造函数),那么就需要一些特殊的方法.提供了静态初始化块和非静态初始化块来处理这两种情况. 静态初始化块 静态初始化块是通过static{}来定义的.一个简单的代码示例如下: public class CorderStatic { staticint idx; static{ Syst