免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2501 | 回复: 10
打印 上一主题 下一主题

在类定义中写下 static const int size = 100;对不对呀? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-24 23:18 |只看该作者 |倒序浏览
在类定义中写下 static const int size = 100;对不对呀?
《thinking in c++》这本书188页说可以,但在vc上编译怎么过不去呢?
请各位高手指点一下。

[ 本帖最后由 wcx1982 于 2005-11-25 00:18 编辑 ]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2005-11-24 23:34 |只看该作者
可以的,
这样的一个常量
是这个类的所有对象共享的,
也就是只有这一个常量。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2005-11-24 23:35 |只看该作者
对了,vc对c++标准支持的不好,
建议用gcc。

论坛徽章:
0
4 [报告]
发表于 2005-11-24 23:49 |只看该作者
可以在头文件中类体内初始化有序型的const静态常量,但是还是需要在文本文件中定义一下这个类,但是不能再初始化了:


  1. //c.h
  2. class test
  3. {
  4.      static const int a = 1; //在类体内初始化
  5. };

  6. // c.cpp
  7. const int test::a; // 必须的成员定义
复制代码

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
5 [报告]
发表于 2005-11-25 09:04 |只看该作者
原帖由 converse 于 2005-11-24 23:49 发表
可以在头文件中类体内初始化有序型的const静态常量,但是还是需要在文本文件中定义一下这个类,但是不能再初始化了:


  1. //c.h
  2. class test
  3. {
  4.      static const int a = 1; //在类体内初始化
  5. };

  6. // c ...
  7. const int test::a; // 必须的成员定义
复制代码


不知道到底是不是必需的,如:
  1. #include <iostream>
  2. using namespace std;

  3. class T{
  4.     public:
  5.         static const int count = 100;
  6. };

  7. int main()
  8. {
  9.     cout << T::count << endl;
  10. }
复制代码
[test:/home/test/src/temp]g++ test.cpp
[test:/home/test/src/temp]./a.out
100
  1. cout << T::count << endl;//改成
  2. cout << static<void *>(&T::count) << endl;
复制代码
/home/test/src/temp/test.cpp:12: undefined reference to `T::count'
所以好像只在需要它真实存储的时候才需要它的具体的定义.不过书上都说要定义的.包括TCPL吧.

[ 本帖最后由 THEBEST 于 2005-11-25 09:06 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2005-11-25 09:13 |只看该作者
我把cout改成printf("%d", T::count),看汇编:
        subl        $8, %esp
        pushl        $100
        pushl        $LC0
        call        _printf
可以看出,在THEBEST给出的第一种情况下,T::count已经被完全优化掉了。

论坛徽章:
0
7 [报告]
发表于 2005-11-25 09:21 |只看该作者

别误导人家

类静态成员初始化在类体外进行。有意见请看清华出版社出版的姓吕的编的《C++语言基础编程》

论坛徽章:
0
8 [报告]
发表于 2005-11-25 14:33 |只看该作者
当它本身又是一个个近整型的常量,即采用static const int、static const char, static const bool时,在声明的同时进行初始化就可以了。其他的情况,例如是static const float的话,就需要在类的实现部分定义。

论坛徽章:
0
9 [报告]
发表于 2005-11-25 14:36 |只看该作者
原帖由 renstone921 于 2005-11-25 14:33 发表
当它本身又是一个个近整型的常量,即采用static const int、static const char, static const bool时,在声明的同时进行初始化就可以了。其他的情况,例如是static const float的话,就需要在类的实现部分定义。


primer里面写的是"有序型",我没有去查过它的英文写法是什么~~这里说的近整型的英文是什么?

论坛徽章:
0
10 [报告]
发表于 2005-11-25 14:46 |只看该作者
不好意思,只是突然想不起来中文术语了,就是你说的那个"有序型"。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP