VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3022|回复: 18

关于const的问题?

[复制链接]

1

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-16 16:20:01 | 显示全部楼层 |阅读模式
在C++中  这条语句 extern const int &ri;是一个声明还是定义,为什么?还有引用的时候不是必须要初始化,和一个对象绑定一下?
回复

使用道具 举报

0

主题

41

帖子

28.00

积分

新手上路

Rank: 1

积分
28.00
发表于 2020-1-21 11:36:01 | 显示全部楼层
定义嘛,
如果是const必须在定义的时候赋值,否则你就没机会赋值了
回复

使用道具 举报

0

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-21 12:18:01 | 显示全部楼层
声明。
定义时必须初始化。

注意:因为在外部文件中被使用,所以定义时也要用extern使其为外部连接,默认为内部连接。
回复

使用道具 举报

0

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-21 13:54:01 | 显示全部楼层
sorry,看错了,上面的定义时可以不用extern,...const修饰的是int ...
回复

使用道具 举报

0

主题

36

帖子

13.00

积分

新手上路

Rank: 1

积分
13.00
发表于 2020-1-22 01:00:01 | 显示全部楼层
具体可以参看我的BLOG,上面有关于CONST的用法
http://blog.csdn.net/lklklk/posts/1464574.aspx


const原则:在C++中最好趋向与使用const来修饰它前面的那个类型。
如:const int a;和int const b;中,虽然两种具有相同的意义,但是最好利用后面的那种情况,后面的更加可读,因为:int const我们可以很清楚地看到const是修饰int,而前面的那种方法中,我们就不那么轻易知道到底const 的具体涵义。由后面的那种方法我们可以知道const指一个恒定的整形。Int *const b,指的是一个恒定的指针b,这个指针指向一个整型,所以这个指针的内容可以改变,但是它的指针值也就是b的值不能变,相应的int const *b,指的是一个指向恒定整型内容的指针b,也就是说这个b的内容可以变,但是开始的b所指向的地址中的内容不能在程序当中通过b来改变。
volatile对上面的原则也适用。
回复

使用道具 举报

0

主题

36

帖子

13.00

积分

新手上路

Rank: 1

积分
13.00
发表于 2020-1-22 04:27:01 | 显示全部楼层
extern const int &ri;
所以是一个常数据引用的定义,该引用引用的数值保持不变
回复

使用道具 举报

2

主题

54

帖子

34.00

积分

新手上路

Rank: 1

积分
34.00
发表于 2020-1-22 20:54:01 | 显示全部楼层
extern声明
关于const:
    1。对于指针的讨论比较多
          const int* p = &ci1;
          p = &ci2;
          这是指向一个const对象的指针,而p是个指针变量,可以指向ci1,也可以变指向的到ci2

          把const写在*之后那就是个常量指针了,p是指针常量,定义时初始化,以后再不能改变指向了
          int * const p = &i1;
          p = &i2; //err

          二者结合的情况
          const int* const p = &ci3;

    2。涉及typedef的情况
          先说一种意见
          定义常量可以 const int ci1 = 0;
                          可以 int const ci2 = 0;

          typedef char*  C;
          const C p = &ch;
          这个p是什么呢,是const char* p还是char* const p;
          是后者,
          原因:const C p中C是个类型,const是修饰p的
        
          所以基于这点,个人建议写const量定义的时候,用int const ci2 = 0;的形式,显式说明const是修饰ci2的
          所以,
          typedef char*  C;
           C const p = &ch;
回复

使用道具 举报

0

主题

24

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-1-25 14:27:02 | 显示全部楼层
应该是声明
回复

使用道具 举报

0

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-1-25 22:45:01 | 显示全部楼层
应该是声明
回复

使用道具 举报

0

主题

12

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
发表于 2020-1-25 23:45:01 | 显示全部楼层
声明
extern语句
如果是定义的话早就明确指向一个对象了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表