#include<iostream>
using namespace std;
class A
{
private:
const int a=9;
public:
void display()
{
cout<<a;
}
};
int main()
{
A a;
a.display();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么不允许初始化const int a = 9.但是,如果我写了常量静态int a = 9编译器没有显示任何错误.写const static int a = 9是什么意思?我什么时候写这样的?
〜
使用构造函数初始化列表初始化非静态常量成员.
ISO C++ 03说明了有关静态数据成员的以下内容.
[class.static.data]
9.4.2 Static data members
1静态数据成员不是类的子对象的一部分.该类的所有对象只共享一个静态数据成员的副本
2在类定义中声明静态数据成员不是定义,除了cv-qualified void之外,它可能是不完整的类型.staticdata成员的定义应出现在包含成员类定义的命名空间范围内.在命名空间作用域的定义中,静态数据成员的名称应使用::运算符通过其类名限定.`
如果静态数据成员是const integer或const枚举类型,则它在类定义中的声明可以指定一个常量初始化器,它应该是一个整型常量表达式(5.19).在这种情况下,成员可以出现在整数常量表达式中. 如果在程序中使用该成员,并且名称空间作用域定义不包含初始化程序*,则该成员仍应在名称空间作用域中定义.
class A
{
private:
const int a=9; //incorrect
static const int b = 10; //declaration (correct)
static const double c = 1.3 //incorrect (Only const-static int members can be initialized like that)
public:
A(): a(9){}
};
const int A::b; //definition of const-static int member
Run Code Online (Sandbox Code Playgroud)
class AE {
// ...
public:
static const int c6 = 7;
static const int c7 = 31;
};
const int AE::c7; // definition
int f()
{
const int* p1 = &AE::c6; // error: c6 not an lvalue
const int* p2 = &AE::c7; // ok
// ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2333 次 |
| 最近记录: |