首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++中的const混淆

C++中的const混淆是指在使用const关键字时可能出现的一些混淆和误解。下面是对这个问题的完善且全面的答案:

在C++中,const是一个关键字,用于声明常量。它可以应用于变量、函数参数、函数返回类型以及成员函数。const关键字的作用是告诉编译器,被修饰的对象是不可修改的。

const在C++中有以下几种用法:

  1. 常量变量:使用const修饰的变量表示该变量的值在初始化后不能被修改。例如:const int num = 10;
  2. 常量指针:使用const修饰指针,表示指针所指向的值不能被修改。例如:const int* ptr = #
  3. 指针常量:使用const修饰指针本身,表示指针本身的值不能被修改。例如:int* const ptr = #
  4. 常量引用:使用const修饰引用,表示引用的值不能被修改。例如:const int& ref = num;

const混淆可能出现在以下几种情况:

  1. const指针和指针常量的混淆:在声明指针时,const关键字可以放在星号前面或后面,这会导致指针的含义不同。例如:const int* ptr1; // ptr1是一个指向常量的指针 int* const ptr2; // ptr2是一个常量指针
  2. const引用和非const引用的混淆:在函数参数中,const引用和非const引用的区别在于是否允许修改传入的参数。例如:void func(const int& num); // 不允许修改num的值 void func(int& num); // 允许修改num的值
  3. const成员函数和非const成员函数的混淆:在类中,const成员函数表示该函数不会修改对象的状态,可以被const对象调用;非const成员函数可以修改对象的状态,只能被非const对象调用。例如:class MyClass { public: void func() const; // const成员函数 void func(); // 非const成员函数 };

为了避免const混淆,我们应该清楚地理解const的含义和用法,并根据需要正确地使用它。在编写代码时,建议在变量、指针、引用、成员函数等地方使用const关键字,以增加代码的可读性和安全性。

腾讯云相关产品和产品介绍链接地址:

以上是腾讯云提供的一些与云计算相关的产品,可以根据具体需求选择适合的产品来支持云计算应用的开发和部署。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

容易混淆const

例如:   #define PI 3.14159 //常量宏   const double Pi=3.14159; //此时并未将Pi放入ROM …   double i=Pi; //此时为Pi...const定义常量从汇编角度来看,只是给出了对应内存地址,而不是像#define一样给出是立即数,所以,const定义常量在程序运行过程只有一份拷贝,而#define定义常量在内存中有若干份拷贝...编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表,这使得它成为一个编译期间常量,没有了存储与读内存操作,使得它效率也很高。...补充 在c,对于const定义指针,不赋初值编译不报错, int* const px;这种定义是不允许。...int const px;这种定义是允许。 但是,在C++ int const px;和const int* const px;会报错,const int* px;不报错。

81710

C++const与Cconst使用对比

大家好晚上好,今天给大家分享是,c++const使用,在我们以前学习c语言时候,我们已经接触了const用法,那么在c++const使用,又会有什么样不同呢?...超实用const用法 二、c++const用法: 既然今天主题是C++const用法,想都不用想,c++const用法和c语言里面的const用法肯定有不一样地方,下面我们来看具体用法...3、编译过程若发现下面情况则给对应常量分配存储空间 ——对const常量使用了extern ——对const常量使用&操作符 注意:c++编译器虽然可能为const常量分配空间.../a.out start c=0 *p=6 三、c++const与宏区别: 1,const 常量由编译器处理; 2,编译器对 const 常量进行类型检查和作用域检查; 3,宏定义由预处理器处理...四、总结: 1,与 C 语言不通,C++ const 不是只读变量; 2,C++ const 是一个真正意义上常量; 3,C++ 编译器可能会为 const 常量非配空间; 4,C+

60230

C++const和非const对象分别调用const和非const成员函数

const成员函数内可以调用其他const成员函数吗?...5、const成员函数不能调用非const成员函数 6、非const成员函数可以调用非const成员函数 我们知道c++在类成员函数还会隐式传入一个指向当前对象this指针,所以在test类,...实际print函数应该是这样void print(test * this);,这代表一个指向test对象指针this被传入到了print函数 假如现在我们用test类创建一个对象, 1 test...这就会出现问题 const test obj2(122); obj2.print(); 这时obj2对象指针就会传递给test *this 指针,而obj2地址翻译成指针类型应该是这样const...* this; 是和void print() const;this指针类型是一样,所以常量对象可以调用const成员函数。

1.1K20

C++Const常量机制分析

rBAoL1-Q20mAN44lAAO6uDAqdEA653.png const常量机制分析 const为C/C++常用修饰符,表示该变量是一个常量,不可被修改等含义。...那么在实际使用中会存在如下疑问: 1,const修饰变量是否真的不可修改? 2,如果被修改,会出现什么问题? 3,C和C++实现机制一样吗?...const int var = 10; int* ptr_const = (int*) (&var); ptr_const = 20; 1) 局部const变量,对于C++程序,该变量地址值可以被修改...3,C和C++实现机制一样吗? 3.1不同点: 对于局部const变量,C++在变量具体使用地方通过常量替换实现。C语言中表示只读变量。 3.2 相同点: 都不能对只读数据段常量进行修改。...5.2在.h定义const变量 在头文件定义const变量 const int var =10; 在多个cpp文件引用该文件。并把cpp对应生成.o文件链接为可执行程序。

2.2K151

再论C++const和引用

今天给大家分享一下这段时间学习c++总结学习:c++里面的const关键字和引用。 一、const关键字总结 1、const什么时候为只读变量,什么时候又是常量呢?...(1)指针是一个常量: 值为一个内存地址,不需要初始化,可以保存不同地址 通过指针可以访问对应内存地址值 指针可以被const修饰成为常量或者只读变量 (2)引用只是一个变量新名字: 对引用操作...,操作引用就是操作对应变量 (4)从c++编译器角度来看: 为了支持新概念"引用"必须要一个有效解决方案 在编译器内部,使用指针常量来实现"引用" 因此"引用"在定义时必须初始化 (5)在工程项目开发...;error: declaration of ‘array’ as array of references;C++ 天生要支持 C 语言,C 语言中数组每个元素在内存是顺序存放,地址是递增,所以在...C++ 也要兼容这个特性,而在 C++ 唯有引用数组破快了这个特性,所以说 C++ 不支持引用数组;&array[1] - &array[0] !

38010

C++const对象和const成员

如果一个对象被定义成const对象,那么它就不能调用这个类const成员函数。 const对象调用成员函数一定都得是const!...函数 这个规则也就是强制用户不要对const成员进行错误修改 const成员 1.const数据成员 也就是变量,比如实例m_hour,m_minute是普通数据成员 在类内部使用const...2.初始化列表 初始化列表: 除了在构造函数对数据成员进行初始化,C++还提供另外一种方法来对数据成员进行初始化 初始化列表并不是在构造函数内进行初始化 构造函数初始化列表以一个冒号开始,...接着是以逗号分隔数据成员列表,每个数据成员后面跟一个放在括号初始化式。...但需要注意时,不要滥用mutabe描述符,如果在某个类只有少数一部分是被允许const常量函数修改,使用mutable是再合适不过

1.1K10

c++const和volatile知识自我总结

学习了下c++const关键字,总结如下。 1、const限制一个变量不能修改其内容,如果强行修改的话,如下面代码这样子,编译就会报错,“表达式必须是可修改左值”。...笔者看了一些资料,【应该是】因为编译器对于const类型变量都不会二次读取,只会在最开始时候从内存读取一次,之后存储在常量表,之后需要用到就从常量表取得。...const int *p1; int const *p2; 这两种都是说指针是个const int类型指针,只不过const位置比较飘忽,可以在int前面,也可以在int后面。...,都从内存重新读取,而不允许编译器对这个变量读取操作进行优化。...volatile指针和const一样,分两种,见以下代码。

57430

C++const成员变量和成员函数

在类,如果你不希望某些数据被修改,可以使用const关键字加以限定。const 可以用来修饰成员变量和成员函数。...const成员变量 const 成员变量用法和普通 const 变量用法相似,只需要在声明时加上 const 关键字。...初始化 const 成员变量只有一种方法,就是通过构造函数初始化列表,这点在前面已经讲到了,请猛击《C++初始化列表》回顾。...const成员函数(常成员函数) const 成员函数可以使用类所有成员变量,但是不能修改它们值,这种措施主要还是为了保护数据而设置const 成员函数也称为常成员函数。...最后再来区分一下 const 位置: 函数开头 const 用来修饰函数返回值,表示返回值是 const 类型,也就是不能被修改,例如const char * getname()。

19130

C++ 顶层 const

主力博客:半亩方塘 本文主要參考来源来自于:C++ Primer 中文版(第 5 版) 第 57 面至第 58 面 1...., 顶层 const 表示是 指针本身是一个常量, 底层 const 表示是 指针所指对象是一个常量,更普通情况下, 顶层 const 能够表示随意对象是一个常量,这对于算术类型、类、指针等不论什么数据类型都是成立...顶层 const 与底层 const 在运行拷贝操作时不同 对于顶层 const 与底层 const ,在运行对象拷贝时有着明显不同: (1)顶层 const 不受什么影响 int i = 0;...&ci; // 同意改变 p2 值,这是一个底层 constconst int *const p3 = p2; // 靠右 const 是顶层 const ,靠左是底层 constp2 = p3...; // 正确:p2 和 p3 指向对象类型同样,p3 顶层 const 部分不影响 (2)底层 const 限制不能忽略,  要求拷出和拷入对象有同样底层 const 资格或者能转换为同样数据类型

25310

C++const成员

前言 在之前已经已经分享过了关于 【C++】类和对象之常引用与运算符重载,这次分享有关const内容,话不多说,正文开始。...2. const成员 将const修饰“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含this指针,表明在该成员函数不能对类任何成员进行修改。...总之: 成员函数,如果是一个对成员变量只进行读访问函数,建议加const,这样const对象和非const对象都能使用。...这个才是权限放大,r改变影响i。 p2改变会影响p1,也就是i。 权限放大:指针和引用赋值才存在权限放大。 来看看下面的几个问题: const对象可以调用非const成员函数吗?...不行,权限放大了 非const成员函数内可以调用其它const成员函数吗? 可以,这里是权限缩小 3.

10310

C++const

\n"); return 0; } 编译结果 gcc test.c –> c = 5 g++ test.cpp –> c = 0 C++const C++在C基础上对const...图1解释 test.cpp c = 0原因 区别 C语言中const 变量 C语言中const 变量是只读变量,会分配存储空间 C++const 常量 可能分配存储空间 ...当const 常量为全局,并且需要在其它文件中使用 当使用&操作符对const常量取地址 C++const 常量类似于宏定义 const int c = 5; ≈ #define c 5 C...++ const 常量在与宏定义不同 const 常量是由编译器处理 编译器对const常量进行类型检查和作用域检查 宏定义由预处理器处理,单纯文本替换 小结 与C语言不同,C++const...不是只读变量 C++const是一个真正意义上常量 C++编译器可能会为const常量分配空间 C++完全兼容C语言中const常量语法特性

87760

c++ const放置位置

标准int const a 与 const int a 是完全等价。正因为如此,会有很多各种不同风格,同样还有“*是跟类型还是变量?”,比如char* p与 char *p,它们是等价。...T addValue(T const& x) {      // } 如果是string类型,它是这样写string const& str 这种写法也我觉得很怪异,特别是我见到大多数C++不是这样定义...C习惯 int *ptr,说明*ptr是一个int类型,ptr是指定int一个指针 int const *ptr 说明*ptr是一个常量,一个int型常量 int * const ptr  ptr...在c++为了避免疑惑,虽然const int* p与int const* p等价,但为了防止与int * const p太过相似,我觉得还是采用const int* p这种比较适合(语义上int const...在 p之前,说明它是一个(常量)指针,其值是不能变化 最近在看《C++编程思想》里面单独有一章写const,刚看一点就联想起之前看C++ Template中文》后有些困惑。

1.8K10

【面试宝典】C++const关键字用法

对于刚毕业应届生来说面试中经常被问到const关键字用法,小编在这里为大家总结如下: 修饰常量 用const修饰变量某种意义上就是常量,编译器会对它进行必要操作比宏定义多了类型修饰符。...需要注意是在声明时候要进行初始化,特别是在类类型,需要在初始化列表初始化。...修饰指针 (1)const int *p; p指针const int指针,不能用赋值语句对*p赋值,但是可以对p赋值。 (2)int* const p=&j; p是指向intconst指针。...p是const数据,所以其本身不可改变,而*p可以被赋值。 (3)const int * const p=&i; p是一个const指针,其指向const数据i。p、*p都不能再被赋值。...,只是读取等操作非更易型操作 修饰类对象 当类对象被声明为const类型后,它只能调用用const修改成员函数。

73250

关于C++ const 全面总结

大家好,又见面了,我是全栈君 C++const关键字使用方法很灵活,而使用const将大大改善程序健壮性,本人依据各方面查到资料进行总结例如以下,期望对朋友们有所帮助。...ConstC++中经常使用类型修饰符,常类型是指使用类型修饰符const说明类型,常类型变量或对象值是不能被更新。 一、Const作用 例如以下表所看到: No....A公有(保护)数据成员和const成员函数,而且不同意对其进行赋值操作,这在普通情况下非常少用到。...} (2)const修饰成员函数 const修饰类成员函数,则该成员函数不能改动类不论什么非const成员函数。...i; }; 另一种方式就是在外部初始化, · 假设在非const成员函数,this指针仅仅是一个类类型;假设在const成员函数, this指针是一个const类类型;假设在volatile成员函数

49930

c++constexpr_define和const定义常量区别

大家好,又见面了,我是你们朋友全栈君。 常量表达式是指值不会改变且在编译过程中就能够得到计算结果表达式,能在编译时求值表达式。...const int a2 = a1 + 20; // a2是常量表达式 int a3 = 5; // a3不是常量表达式 const int a4 =...a3; // a4不是常量表达式,因为a3程序执行到达其所在声明处时才初始化,所以变量a4值程序运行时才知道。...说明了const声明不一定就是常量表达式! C++11新标准规定,允许将变量声明为constexpr 类型以便由编译器来验证变量值是否是常量表达式。...const int a2 = a1 + 20; // a2是常量表达式 int a3 = 5; // a3不是常量表达式 const int a4 = a3

96040

C++const究竟有什么好处呢?(必须干货)

秋名山一路下来,我感觉我悟了,顿悟,话不多说,开正题,C++——const 首先:const限定一个变量不允许被改变,产生静态作用, 我们看限定,这个词语,相应可以想到它好处就必然有提高程序安全性和可靠性...所以说: const int Max=100; Max++; //会产生错误 记住:const常量 如果大家看c++primer,可能还会看到: 尽可能使用const: 使用const可以避免无意中修改数据编译错误...使用const可以使函数既能处理const参数也能处理非const参数 还有就是const与指针在一起用法: const和指针一起使用是C++语言中一个很常见困惑之处,在实际开发,特别是在看别人代码时候...,常常会因为这样而不好判断作者意图,下面讲一下我判断原则: const只修饰其后变量,至于const放在类型前还是类型后并没有区别。...注意不是一种类型,如果pType之前是某类型,那么pType是指向该类型指针 一个简单判断方法:指针运算符*,是从右到左,那么如:char const * pContent,可以理解为char const

20610
领券