const修饰的谁?

const的修饰规则(const便捷记忆法) 刚才转载了一篇文章《情景分析“C语言的const关键字”》,csdn上也有一篇《Const用法小结》,可能很多人看了这两篇文章之后就对const绝望了,太复杂了。其实const并不复杂,它是有规则的,不然设计语言的语法就不好弄了(大家看一下编译原理就好理解了)。下面就说一下我对const的理解:我觉得,语言里面的关键字,都有一个修饰域(即这个关键字修饰那块范围),还有一个修饰方向(即从那里开始 阅读详情

问题源于今天我于csdn上看到的一个帖子:

const引用的疑惑

例子1:
#include   <iostream >
#include   <typeinfo >
using namespace std;

typedef char* PCHAR ;
int main(int argc, char *argv[])
{
    cout < <typeid(const PCHAR).name() < <endl;
    cout < <typeid(const char*).name() < <endl;
    return 0;
} 
输出结果:
char *
char const *
应该两者都是char const *类型啊? 为什么不一样?

例子2:
#include  <iostream >
#include  <typeinfo >
using namespace std;

template <class T >
void TestFunc2(const T &pConstRef)
{
cout  < < pConstRef  < <endl;
pConstRef[0] =  'S '; cout  < < pConstRef  < < endl;
}

int main(int argc, char *argv[])
{

char pBuf[100] = "suntao";
char* pNonConst =  pBuf;
TestFunc2(pNonConst);

  system("PAUSE");
  return EXIT_SUCCESS;
}
问题: 虽然我传入的是一个非const引用,但TestFunc2的参数是一个const引用,为什么可以修改pConstRef指向的内存?

这使我想起《C++ Primer》上的一段话(p104   3.12):

“下面是一个几乎所有人刚开始时都会答错的问题,错误在于将typedef 当作宏扩展。已知下面的typedef:
typedef char *cstring;
在以下声明中cstr 的类型是什么?
extern const cstring cstr;
第一个回答差不多都是:
const char *cstr
即指向const 字符的指针。但是这是不正确的。const 修饰cstr 的类型。cstr 是一个指针,因此,这个定义声明了cstr 是一个指向字符的const 指针char *const cstr;”

所以基本上清楚了,发帖的人没搞明白typedef的含义。
const T &pConstRef 即 T const &pConstRef . 这里的const好像是多余的。引用本来就不必用const修饰。
 

const的修饰规则 const在*的左边,则指针指向的变量的值不可直接通过指针改变(可以通过其他途径改变); const在*的右边,则指针的指向不可变。简记为“左定值,右定向”。 (1)指针可以改变,指向的值不能改变     int a=10;     const int *p1=&amp;a;    //例如:允许 p1+=1 ,不允许 *p1=20     int const *p2=&amp;a;    ... 阅读详情

相关推荐

LaMAR数据集下载和使用流程

LaMAR数据集

qq_51745206的博客 971

【学习总结】C语言的const到底修饰谁

不足之处还请指正。 const修饰的谁? 要在编程中多正确的使用const来使程序变得更加健壮。 《高质量C++/C编程指南》 const是修饰谁? #include &lt;stdio.h&gt; int main(int argc, const char * argv[]) { const int num = 1; // 等价 int const num = 1; ...

ahojcn 的博客 937

事件相机(Event Camera)及相关研究简介——新一代相机?新的计算机视觉领域?

事件相机(Event Camera)及相关研究简介 事件相机是一个新型的类脑相机,是一个待开发的大领域。希望通过我的分享,能够有更多人来研究并将它更好地运用在我们的生活中~

Cyril的博客 5万+

const 修饰的是谁

const 修饰一个量,那个量会被放到一个常量表里,无论如何,值都不会被改变了 const 修饰指针: int a = 3; int *p = &a; const int *p //指针所指向的内存空间无法被改变,即a的值无法被改变 int * const p //指针的值无法被改变,即指针只能指向某一个特定的内存空间,这里只能是 p = &a const int * const

x_y_q_的博客 745

使用Anaconda和conda快速搭建YOLO开发环境

本文详细介绍了如何使用Anaconda和conda为YOLO目标检测项目快速搭建独立、纯净的开发环境。通过创建虚拟环境,有效解决了Python包版本冲突和CUDA兼容性问题,并指导安装GPU版PyTorch等核心依赖,最后通过验证脚本确保环境配置成功,为YOLO开发提供了稳定可靠的基础。

weixin_28829629的博客 161

【STM32】IEC60730 Class B软件安全实现 Part2:自检库实战指南

本文是STM32 IEC60730 Class B软件安全实现的实战指南,详细介绍了如何将X-CUBE-CLASSB自检库集成到用户项目中。内容涵盖软件包解构、内存划分、启动与运行时自检的集成步骤、关键代码示例及调试技巧,并阐述了为最终通过安全认证所需的文档与流程准备,帮助开发者高效实现MCU功能安全。

weixin_29185167的博客 89

const关键字到底修饰谁?

2006-08-07 15:32 char *p              = "hello";          // 非const指针,                                         // 非const数据const char *p        = "hello";  

sophia_sy的专栏 868

华为OD机试双机位C卷-统计差异值大于相似值二元组个数(C/C++/Py/Java/Js/Go)

华为OD机试(机考)双机位C卷 【统计差异值大于相似值二元组个数】,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试 - 统计差异值大于相似值二元组个数

qq_45776114的博客 783

const修饰指针总结

本文章为const关键字用法总结

道阻其长,未来可期。笔耕不辍,行则将至! 863

MIMIC数据库简介

一 、MIMIC简介 MIMIC(Medical Information Mart for Intensive Care),是一个大型的公开数据库。该数据库记录了2001年至2019年期间贝斯以色列女狄肯斯医疗中心重症监护病房患者的相关数据,拥有4万多名患者的医疗健康数据和记录。 MIMIC数据库记录了人口统计学信息,如病人的性别、身高、宗教等情况。记录了实验室检验信息,如血常规,肝功能,肾功能等实验室检测数据。记录了患者的用药信息,如高血压患者服用了治疗高血压类药物等。记录了护理人员以及患者的护理级别等。

越努力 越幸运 1万+

VTK:受约束的 Delaunay 2D用法实战

VTK:受约束的 Delaunay 2D用法实战程序输出程序完整源代码 程序输出 程序完整源代码 #include <vtkActor.h> #include <vtkCellArray.h> #include <vtkDelaunay2D.h> #include <vtkMath.h> #include <vtkMinimalStandardRandomSequence.h> #include <vtkNamedColors.h>

希望我的博客,能帮上你解决学习中工作中所遇到的问题 940

const修饰指针

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 const修饰指针一、const修饰指针的三种情况二、分析1.const修饰指针 --- 常量指针2.const修饰常量 --- 指针常量3. const即修饰指针,又修饰常量 一、const修饰指针的三种情况 const修饰指针 — 常量指针 const修饰常量 — 指针常量 const即修饰指针,又修饰常量 二、分析 1.const修饰指针 — 常量指针 const int * p1 = &a;

weixin_46654029的博客 1679

把 MANDT 锁进保险箱:ABAP Client Handling 与 Client Isolation(聚焦 AMDP 的 Client Safety )

本文探讨了ABAP系统中Client Handling与Client Isolation机制的演进,重点分析了AMDP环境下多租户隔离的风险与解决方案。传统ABAP SQL/CDS通过隐式Client过滤提供安全保障,而AMDP因其原生SQLScript特性容易绕过隔离机制。文章对比了旧时代依赖开发自觉的传参方式与新时代通过AMDP OPTIONS强约束的语法方案,详细介绍了CLIENT INDEPENDENT和CDS SESSION CLIENT DEPENDENT两种编译期安全机制,阐述了USING列表

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 338

const修饰指针和引用释疑_const 修饰指针和引用

中,pi的类型为int*,而&a的类型为const int* const,只要其中含有int* 就可以。//将const pi看作一体,就与(2)所述相同,只是要求pi必须为const,正如上所说,=号两边的类型不必严格匹配,但必须含有int*, &a的类型为const int* const,含有int*, 所以可以赋值。去掉ri左边的&号,则为int *const ri,因为ri是别名,故ri的类型应与赋值的数类型一致,ri类型为int *const,&i为int *const,可以这么做.

2401_88972114的博客 544

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【c++】static, const 修饰

一、static修饰类的成员 static特点: static数据存储在数据段, 生命周期最长--进程开始到结束, 数据只分配一次空间(初始化一次) 1.初始化一次 2.文件作用域 3.数据存在数据段,只分配一次空间 1.修饰成员变量 a. 静态成员数据空间不包含在对象空间里 b. 在类外初始化 //初始化静态成员变量 intData::number=0;//初始化-...

Jason的技术探索与分享 583

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

const和const修饰指针的用法详解

const的用法constconst的含义目的:定义:作用:注意:const修饰指针例题:例题1:例题2:例题3:总结: const const的含义 const是一个C语言(ANSI C)的关键字,具有着举足轻重的地位。它限定一个变量不允许被改变,产生静态作用。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一定帮助。另外CONST在其它编程语言中也有出现,例如Pascal、C++、PHP5、B#.net、HC08 C、

H48530的博客 1620

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

const 修饰符

const 修饰符前言const 变量指向 const 变量的指针const 指针 前言 const关键字是一种修饰符。所谓“修饰符”,就是在编译器进行编译的过程中,给编译器一些“要求”或“提示”,但修饰符本身,并不产生任何实际代码。就 const 修饰符而言,它用来告诉编译器,被修饰的这些东西,具有“只读”的特点。 const对于最终代码没有影响,但是尽可能使用const,将帮助我们避免很多错误,提高程序正确率。 const 变量 1 const 变量指的是,此变量的值是只读的,不应该被改变。 2 如果我

weixin_56380842的博客 1481

Const修饰函数的作用

const修饰函数 在类中将成员函数修饰为const表明在该函数体内,不能修改对象的数据成员而且不能调用非const函数。为什么不能调用非const函数?因为非const函数可能修改数据成员,const成员函数是不能修改数据成员的,所以在const成员函数内只能调用const函数。 [cpp] view plain copy #include 

Wolf的专栏 3198

Const修饰指针的理解

Const修饰指针的理解 开发工具与关键技术:Visual Studio、C++ 作者:张国军 撰写时间:2019年04月25日 在说被const修饰的指针之前呢,我们先来了解一下const。对于const,我对它的理解呢,就是一个不可改变的,修饰一个不可改变的,当我们带上const的时候我就将它理解为不可改变的,当然并不是所以得时候,还有其他特殊的地方那就得细看了。 我们先来看一下const所...

weixin_44545509的博客 1147

C语言const修饰符探秘

前言 C语言是我接触的第一门程序设计语言,当时还很傻很天真,后来迅速被各种高级语言洗脑,但是不得不说,C的地位真的无可撼动。 const修饰符在C语言中很常用,但是最近读代码的时候常常搞不清楚,搜索了一番,做个总结。 整体认知 const是常量修饰符,代码中设法阻止变量被改变,这个时候可以使用const关键字。必须在声明const变量就初始化,因此,类似与这样的声明是错误的: const

To be a Tough Man——liushuaikobe 2670

C++中 const 修饰普通类型,修饰指针变量

Test t(8);Cmf(t);return 0;// 返回一个 const 自定义类型对象// 获取 const 自定义类型对象// 可以访问成员,但不能修改// 以下代码会报错,因为 obj 是 const 对象,不能修改return 0;

down_and_out的博客 973

const修饰指针用法详解

本文介绍了C语言中const关键字修饰变量和指针的用法。const修饰变量使其不可直接修改,但可通过指针间接修改。重点讲解了四种const修饰指针的情况:无const修饰的指针可自由修改;const在左边保护指针指向的数据;const在右边保护指针本身;两边都有const则双重保护。文章给出了使用建议:保护数据用const type*,保护指针用type* const,并提供了记忆规则:const在*左边护数据,在右边护指针。最后强调在函数参数中使用const修饰能提高代码安全性和可维护性。

祯的博客 430
上一篇: M$ Unicode参考
下一篇: 关于类的大小问题
undefined_behavior
博客等级 码龄19年 1粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值