关于c ++中的关键字"const"

 stong_lxm 发布于 2023-02-14 01:35

根据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"有什么意义吗?

1 个回答
  • 你在const这里抛弃了这个问题:

    char* ch = (char*) p;
    

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

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

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

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

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

    2023-02-14 01:48 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有