加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

关于c中的关键字“const”

发布时间:2020-12-16 09:49:08 所属栏目:百科 来源:网络整理
导读:根据c语法,const int * const p意味着p指向它并且它的值不能被重写.但是今天我发现如果我这样编码: void f(const int* const p) { char* ch = (char*) p; int* q = (int*) ch; (*q) = 3; //I can modify the integer that p points to } 在这种情况下,关键
根据c语法,const int * const p意味着p指向它并且它的值不能被重写.但是今天我发现如果我这样编码:

void f(const int* const p)  
 { 
     char* ch = (char*) p;
     int* q = (int*) ch;
     (*q) = 3;  //I can modify the integer that p points to
 }

在这种情况下,关键字“const”将失去它的效果.使用“const”有什么意义吗?

解决方法

你在这里抛弃了常量:

char* ch = (char*) p;

实际上,你说“我知道我在做什么,忘记你是常客,我接受后果.” C允许你做这样的事情,因为有时它可能是有用/必要的.但它充满了危险.

请注意,如果传递给函数的参数实际上是const,那么您的代码将导致未定义的行为(UB).你无法从函数内部知道.

另请注意,在C中,最好使您的意图清晰,

int* pi = const_cast<int*>(p);

这清楚表明你的意图是抛弃const.它也更容易搜索.关于危险和UB的相同警告适用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读