类内数组声明,“类外”指定大小
2015-09-04 12:38
507 查看
类内数组声明,“类外”指定大小
using namespace std;
class Age{
public:
static const int Value = 10;
static const int ages[];
};
const int Age::ages [] = {1,2,3};
int main()
{
cout << "xxx Age:" << Age::Value <<
"ages size:"<< sizeof(Age::ages)<< endl;
}
首先说明:
1,c++可以在类的声明的时候指定值:但是是有条件的:static const 修饰。保证是class级别的,并且不可修改。
2, ages的声明是在类体内的,具体化是在外面的。为什么是可以对呢,而int的Value是不可以的,又是为什么呢。
谈谈我的认识:
1, static是class 级别的,所以只有一份在程序级别的栈中,所以我们对象可以有很多份,而static的只有一份。
2, 既然是clss 级别的,值如果是设置的初始值,就不能被其他对象修改,使用了const修饰,就可以使用::域操作来访问。
如果不设置初始值,存储级别是class的, 访问级别就是对象级别的了.
3,
基本类型int不能像数组(指针)一样在类体外初始化,至于为什么,我猜测是基本类型是经过一步就完成了值和地址的确认,而复杂类型,比如说是数组(指
针),经过第一步只是确认了指针的值(所指位置)以及存储这个指针的地址,并没有初始化好分配多少内存,第二步确认分配的内。第一步在预编译完成,第二步
在编译阶段完成,有待验证。
using namespace std;
class Age{
public:
static const int Value = 10;
static const int ages[];
};
const int Age::ages [] = {1,2,3};
int main()
{
cout << "xxx Age:" << Age::Value <<
"ages size:"<< sizeof(Age::ages)<< endl;
}
首先说明:
1,c++可以在类的声明的时候指定值:但是是有条件的:static const 修饰。保证是class级别的,并且不可修改。
2, ages的声明是在类体内的,具体化是在外面的。为什么是可以对呢,而int的Value是不可以的,又是为什么呢。
谈谈我的认识:
1, static是class 级别的,所以只有一份在程序级别的栈中,所以我们对象可以有很多份,而static的只有一份。
2, 既然是clss 级别的,值如果是设置的初始值,就不能被其他对象修改,使用了const修饰,就可以使用::域操作来访问。
如果不设置初始值,存储级别是class的, 访问级别就是对象级别的了.
3,
基本类型int不能像数组(指针)一样在类体外初始化,至于为什么,我猜测是基本类型是经过一步就完成了值和地址的确认,而复杂类型,比如说是数组(指
针),经过第一步只是确认了指针的值(所指位置)以及存储这个指针的地址,并没有初始化好分配多少内存,第二步确认分配的内。第一步在预编译完成,第二步
在编译阶段完成,有待验证。
相关文章推荐
- mac默认截图、截图代码
- NSDateFormatter
- C#写的客户端连接 php的服务器端的小例子
- html name id, 与服务器交互必须有name
- 引用类中的enum
- enum可以做索引
- vlan 以及 Linux实现的IEEE 802.1Q VLAN
- gtk+blade+anjuta 的简单实例
- 文件比较,文件夹比较-- vimdiff,beyond compare, compare suite, WinMerge,Kdiff3
- linux 终端控制-- 多彩输出 格式排版
- linux 怎么使用一个c/c++库
- 创作gtk源码级vim帮助文档 tags
- NetBSD是个开源到源码的系统
- 分离整数的各个数位
- Tornado Web服务器
- 文件比较,文件夹比较-- vimdiff,beyond compare, compare suite, WinMerge,Kdiff3
- linux 终端控制-- 多彩输出 格式排版
- linux 怎么使用一个c/c++库
- 创作gtk源码级vim帮助文档 tags
- NetBSD是个开源到源码的系统