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

【C++】C++ 类中的 this 指针用法 ② ( 常量成员函数 | const 修饰成员函数分析 )

一、常量成员函数 1、const 修饰成员函数分析 在 C++ 类中 , 普通的非静态成员函数 , 可以使用 const 进行修饰 , 在 下面的 Student 类中 , 定义了 void fun(int...fun 函数的 第一个参数 Student* pThis 指针指向的内存空间 ; C++ 编译器会将 void fun(int age, int height) 函数转为对应的 C 语言函数 Student_fun...fun 函数的 第一个参数 Student* pThis 指针指向的内存空间 和 指针本身 // // C++ 编译器会将该函数转为 Student_fun(Student* pThis, int...fun 函数的 第一个参数 Student* pThis 指针指向的内存空间 和 指针本身 // // C++ 编译器会将该函数转为 Student_fun(Student* pThis, int...fun 函数的 第一个参数 Student* pThis 指针指向的内存空间 和 指针本身 // // C++ 编译器会将该函数转为 Student_fun(Student* pThis, int

23020

C++中四种类型转换以及const_cast是否能改变常量的问题

+中四种类型转换总结如下: const_cast(expr) 用来移除对象的常量性(cast away the constness) const_cast一般用于指针或者引用 使用...可以将void*指针转换为某一类型的指针 可以将基类指针强制转换为派生类指针,但是不安全。...// 如果将pc当作字符指针进行操作,可能会造成运行时错误 // 如int len = strlen(pc); 多重继承时reinterpret_cast不安全。...如果你遇到不能将整型转变为函数指针的问题,你可以这样解决: reinterpret_cast(nAddress); 注意LPFUN这里有个“&”符号,表示引用,C++的引用其实就是用指针实现的...二、也许大家都有过这样的疑惑:const_cast可以去除一个常量的const属性,去除const属性后应该可以对“常量”进行修改,通过调试器发现内存中的值是被改变的,可是再传递这个“常量”的时候,值却一直保持原状

1.4K100
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    《挑战30天C++入门极限》新手入门:CC++中数组和指针类型的关系

    新手入门:C/C++中数组和指针类型的关系   对于数组和多维数组的内容这里就不再讨论了,前面的教程有过说明,这里主要讲述的数组和指针类型的关系,通过对他们之间关系的了解可以更加深入的掌握数组和指针特性的知识...一个整数类型数组如下进行定义: int a[]={1,2,3,4};   如果简单写成: a;//数组的标识符名称   这将代表的是数组第一个元素的内存地址,a;就相当于&a[0],它的类型是...数组名称和指针的关系其实很简单,其实数组名称代表的是数组的第一个元素的内存地址,这和指针的道理是相似的!   下面我们来看一个完整的例子,利用指针来实现对数组元素的循环遍历访问!...iostream> using namespace std; void main(void) { int a[2]={1,2}; int *pb=a; //定义指针...*pb的地址为数组a的开始地址 int *pe=a+2; //定义指针*pb的地址为数组a的结束地址 cout << a << "|" << a[0] << "|"

    48610

    【C++】类型转换 ⑤ ( 常量和非常量之间的类型转换 - 常量类型转换 const_cast | const 左数右指原则 | 代码示例 )

    | 指针类型数据转换 ) 分析了 指针数据类型的转换 , 在 C 语言环境下 , 可以使用显示强制类型转换 , 在 C++ 环境中只能使用 重新解释类型转换 reinterpret_cast ; 在博客...动态类型转换 dynamic_cast ; 本博客中 , 介绍 常量和非常量 之间的类型转换 , C++ 中推荐使用 常量类型转换 const_cast ; 一、const 关键字简介 1、const...指针变量 指向的内存空间 , 如 const char *c , const 修饰的是 char , char 数据不能被修改 , 这是 常量指针 , 指向常量的指针 ; const 关键字在 指针符号...使用 常量类型转换 const_cast 时 , 开发者必须确保 指针指向 的空间是可以修改的 , 如果不能修改 , 强行修改 , 会带来未知灾难性的后果 ; 如 : 定义了 字符串常量 , 字符串常量...博客 , 在该博客中详细介绍了 C 语言常量 和 C++ 常量的原理 , C++ 中的常量都是存储在符号表中 , 符号表中的值肯定是不能被修改的 ; 使用 常量类型转换 const_cast , 强行将

    47210

    C++11基础学习系列一

    ---- 概述 C++11标准越来越趋于稳定和成熟,国外c++11如火如荼而国内却依然处于观望期。每当提到C++很多程序员都很抵触,特别是学术界的呼声更高一些。...该图取自《C++ Primer》 类型说明 wchar_t、char16_t和char32_t,wchar_t用于存放机器最大扩展字符集中的任意一个字符。...初始化与赋值 在C++中初始化是创建变量并赋予初始值因此叫初始化,赋值操作是更新对象值即将右值更新到操作符左侧对象中。...Complex Type C++ 中的复合类型(Complex Type)有引用、指针、类等。 引用与指针 引用即别名,引用必须被初始化,引用不是对象。,引用主要是通过bind技术来实现,并不是拷贝。...类型不属于字面值类型,所以不能被定义为constexpr,而算术类型、引用和指针都属于字面值类型所以可以定义为constexpr,但是constexpr指针必须是nullptr或者固定地址中的对象,并且

    93040

    二、从C语言到C++(二)

    虽然C++也允许强制类型转换,但它提供了更安全的替代方案,如static_cast、dynamic_cast、const_cast和reinterpret_cast。...起别名 在C++中,起别名(aliasing)通常指的是为一个类型或对象创建另一个名称,这样你就可以通过不同的名称来引用相同的类型或对象。...> int_vector; 注意 别名并不创建新的类型,它只是为现有类型提供了一个新的名称。...C语言的 void* 万能指针能和其他任意类型的指针相互转换 C++ 的 void* 万能指针能和其他任意类型的指针相互转换,任意类型能转为 void*,但是 void* 不能转为任意其他类型的指针 const...常量表达式可以用于数组大小、模板参数等需要常量值的地方。C语言没有直接支持常量表达式的概念。 类的常量成员: 在C++中,你可以使用const来声明类的常量成员。

    7310

    【C++】C++ 引用详解 ① ( 变量的本质 - 引入 “ 引用 “ 概念 | 引用语法简介 | 引用做函数参数 | 复杂类型引用做函数参数 )

    指针类型 , 与指针名称使用空格隔开 , 如 : int* p = NULL; ) 引用 定义后 , 可以当做变量使用 ; 通过引用 , 可以操作变量 , 访问 , 修改 引用 , 变量也会进行相应修改...* 的右边 , 指针 是常量 , 指针的指向不能更改 int* const b = &a; // 通过 指针常量 修改 指针指向的内存空间的值 // 指针指向不能修改 , 指向的内存中的内容可以修改...*b = 100; 在上述代码中 , 首先 , 获取 变量 a 的地址 , 赋值给 指针常量 b ; 指针常量 是 常量 - 指针本身不能修改 ; 常量指针 是 指针 - 指向常量的指针 ;...左数右指 , const 在 指针 * 的右边 , 指针 是常量 , 指针的指向不能更改 ; 然后 , 通过 指针常量 修改 指针指向的内存空间的值 ; 指针指向的地址不能修改 ; 指针指向的内存中的内容可以修改...; // 定义一个结构体 // C++ 中结构体就是类 struct Student { char name[64]; int age; }; 在栈内存中先创建该结构体对象 , 为该对象赋值 ;

    1.1K21

    【C++】异常处理 ⑤ ( 异常类型 | 传统 C 语言中的异常处理 | C++ 异常处理 - 抛出 int 类型异常 | 捕获异常类型 异常变量 | C++ 异常处理 - 抛出指针类型异常 )

    二、C++ 异常处理 - 抛出 int 类型异常 1、C++ 异常处理 在 C++ 中的 错误处理 可以不占用 返回值 位置 , 使用 异常处理 机制 , 在函数中 抛出 指定类型 的异常 进行处理 ;...2、C++ 异常接收方式 抛出异常后 , 捕获异常 , 接收异常有很多种方式 ; 可以按照 普通类型 接收异常 , 可以按照 引用类型 接收异常 , 可以按照 指针类型 接收异常 ; 3、捕获异常类型.../ 异常变量 在 catch 分支中 , 捕获异常时 , 可以写 异常变量 , 也可以不写 ; 不写异常变量 : 只捕获异常类型 , 如 : catch(int) 表示捕获 int 类型的异常 , 但是如果这么写了...三、C++ 异常处理 - 抛出指针类型异常 抛出 / 捕获异常 , 有很多种方式 ; 可以按照 普通类型 抛出 / 捕获异常 , 可以按照 引用类型 抛出 / 捕获异常 , 可以按照 指针类型 抛出 /...操作 , 与 抛出 普通变量类型的异常 操作相同 ; 字符串常量 存储在 符号表 中 , 因此可以在所有的函数之间传递 ; 抛出 / 捕获 异常 关键代码如下 : 异常接口声明 : 注意 字符串常量

    21010

    cc++常见面试题

    C与C++各自是如何定义常量的?有什么不同? C中是使用宏#define定义, C++使用更好的const来定义。...区别: 1)const是有数据类型的常量,而宏常量没有,编译器可以对前者进行静态类型安全检查,对后者仅是字符替换,没有类型安全检查,而且在字符替换时可能会产生意料不到的错误(边际效应)。...C++中引用和指针的区别?...内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在,如全局变量,static变量。 2)在栈上创建。...浅拷贝是创建了一个对象用一个现成的对象初始化它的时候只是复制了成员(简单赋值)而没有拷贝分配给成员的资源(如给其指针变量成员分配了动态内存); 深拷贝是当一个对象创建时,如果分配了资源,就需要定义自己的拷贝构造函数

    62030

    《C++模板元编程:编程世界的魔法艺术》

    在 C++的广阔编程领域中,模板元编程犹如一种神秘而强大的魔法艺术,为开发者打开了一扇通往极致性能与高度灵活性的大门。那么,究竟什么是模板元编程?又该如何在 C++中进行模板元编程呢?...通过这种方式,可以在编译期完成一些复杂的任务,如类型计算、常量表达式计算、代码生成等,从而提高程序的性能和灵活性。 那么,为什么要使用模板元编程呢?一方面,模板元编程可以实现高度的代码复用。...此外,模板元编程还可以实现一些高级的编程技巧,如类型安全的容器、静态断言等,提高程序的可靠性和安全性。 接下来,让我们看看如何在 C++中进行模板元编程。首先,需要掌握 C++模板的基本语法。...模板可以分为函数模板和类模板,它们分别用于定义通用的函数和类。在模板中,可以使用模板参数来表示不同的类型或值,从而实现通用的代码。...总之,模板元编程是 C++中一种强大而神秘的技术,它可以为开发者带来极致的性能和高度的灵活性。通过掌握模板元编程的基本语法和高级技巧,可以在 C++中实现一些令人惊叹的编程效果。

    15610

    【编程基础】C++比C牛逼的七个点

    2. struct类型加强 C语言的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型 C++中的struct是一个新类型的定义声明 下面的代码在c编译器下是通不过的,不过在c++编译器下确可以通过...int f(void);//才表示返回值为int的无参函数 在C++中, int f()和intf(void)具有相同的意义,都表示返回值为int的无参函数 C++更加强调类型,任意的程序元素都必须显示指明类型...1 : b ) = 30; 这句话即使在c++中也会报错。 5. bool类型 c++添加了新的类型,bool类型。...,c++中却可以 */ 结论:C++中由const修饰的,是一个真正的常量,而不是C中变量(只读)。...C++中的const和#define的区别 总体来说,const int c = 5; ≈ #define c 5 C++中的const常量在与宏定义不同: const常量是由编译器处理的,提供类型检查和作用域检查

    1.3K50

    C++之newdeletemallocfree详解

    size) 动态配置内存,大小有size决定,返回值成功时为任意类型指针,失败时为NULL。  ...C++中的运算符new和delete new和delete是C++中的运算符,不是库函数,不需要库的支持,同时,他们是封装好的重载运算符,并且可以再次进行重载。... *p = new 类的类型; delete p; //注意,指针p存于栈中,p所指向的内存空间却是在堆中。                             ...b)          除了带有构造函数和析构函数的类等数据类型以外,对于一般数据类型,如int、char等等,两组动态申请的方式可以通用,作用效果一样,只是形式不一样。...C++中为了兼用C语法,所以保留malloc和free的使用,但建议尽量使用new和delete。 c)          在C++中, new是类型安全的,而malloc不是。

    1.5K50

    c++面试选择题_C语言经典笔试题

    从基类继承来的纯虚函数,在派生类中仍是虚函数。 抽象类中不仅包括纯虚函数,也可包括虚函数。抽象类必须用作派生其他类的基类,而不能用于直接创建对象实例。但仍可使用指向抽象类的指针支持运行时多态性。...,而在C++中,这些临时对象都是const类型的。...const作用:定义常量、修饰函数参数、修饰函数返回值三个作用。被Const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。 1) const 常量有数据类型,而宏常量没有数据类型。...2) 有些集成化的调试工具可以对const 常量进行调试,但是不能对宏常量进行调试。 20.简述数组与指针的区别? 数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。...指针可以随时指向任意类型的内存块。

    1.1K10

    【C++】初识C++(下)

    C++的引⽤跟其他语⾔的引⽤(如Java)是有很⼤的区别的,除了⽤法,最⼤的点,C++引⽤定义后不能改变指向, Java的引⽤可以改变指向。...• 所谓临时对象就是编译器需要⼀个空间暂存表达式的求值结果时临时创建的⼀个未命名的对象, C++中把这个未命名对象叫做 临时对象 。...1.函数返回值 2.加减乘除 3.类型转换 当有以上情况时,会产生临时变量,此刻的值若想引用,必须是const引用,因为C++规定临时变量具有常性 1.3指针和引用的关系 C++中指针和引...# define NULL ((void *)0) # endif # endif • C++中NULL可能被定义为字⾯常量0,或者C中被定义为⽆类型指针(void*)的常量...• C++11中引⼊nullptr,nullptr是⼀个特殊的关键字,nullptr是⼀种特殊类型的字⾯量,它可以转换 成任意其他类型的指针类型。

    6610

    【C++】动态内存管理 ② ( new 运算符 为 基础数据类型 基础数据数组类型 分配堆内存 )

    指针类型变量 = new 类型 ( 常量 ) // 创建 类 / 普通类型 变量 指针类型变量 = new 类型 // 创建 类 / 普通类型 变量 , 省略 常量 指针类型变量 = new 类型...[ 数字 ] // 创建数组 , 中括号中是 数组元素个数 小括号 中的 常量值 是可以省略的 ; 中括号 表示的是为 数组类型 分配内存空间 , 中括号内是 数组元素个数 ; 2、语法简单示例 new...运算符 使用示例 : 创建 普通类型 变量 : 堆内存 中 创建 int 类型 存储空间 , 返回 指向该内存空间 的 指针 ( 空间地址 ) ; int* ptr = new int; 创建 普通类型...); 创建 普通数组类型 变量 : 堆内存 中 创建 int 数组类型 存储空间 , 返回 指向该内存空间 的 指针 ( 空间地址 ) , 中括号中是 数组元素个数 ; int* ptr = new int...[8]; 创建 普通二维数组类型 变量 : 堆内存 中 创建 int 二维数组类型 存储空间 , 返回 指向该内存空间 的 指针 ( 空间地址 ) , 中括号中是 数组元素个数 ; int* ptr =

    25610

    Objective-C 中 9 种避免使用 Xcode 预处理器宏的方法

    C++ 程序员们已经深有体会:" "。不幸的是,还有很多的 Objective-C 程序员尚未领悟到这一点。 本文是Objective-C 中的代码气味系列文章中的一篇。...除非您的自定义宏依赖于 Xcode 预处理器宏(如__LINE__),否则请将其重写为一个独立函数。(即便依赖于 Xcode 预处理宏,也要让您的宏调用另一个函数,并尽可能多地转移到该函数中)。...,在一个实现文件中创建一个定义。...只不过,这次我们定义的是一个常量字符串,它实际上是一个对象,在 Objective-C 中表示为指针。因此,我们要定义一个常量指针。...常量字符串通常在多个文件中共享,因此这里介绍如何在 .h 文件中声明常量: extern NSString *const JMRResponseSuccess; 因此,.m 文件中的定义是 NSString

    14610

    【C++】C++ 引用详解 ② ( 引用的意义 | 引用本质分析 | 引用的常量特征 | 引用所占内存空间与指针相同 | 引用在 C++ 编译器实现 | 引用编译时会自动翻译为常量指针 )

    ---- 1、C++ 引用是常量指针 综合上述引用的特征 : 引用具有常量的特征 , 是一个常量 ; 引用和变量都是相同的内存空间的别名 , 其地址都指向内存空间 ; 引用本身也占用内存空间 , 占用大小与指针相同...; 综合上面的三种特点 , C++ 语言编译器 中 , 引用的本质是 : 类型* const 指针名称; 指针 ; 引用在 C++ 语言内部是 常量指针 , 下面 C++ 语言的 " 引用 " 引用类型...& 引用名称 等同于 下面的 C 语言的 " 常量指针 " 指针类型* const 指针名称 C++ 语言中的 引用 , 其在 编译器中的实现 就是 " 常量指针 " , 因此 引用 占用的内存空间与...; 4、函数间接赋值 与 引用本质分析 使用函数进行间接赋值 , 需要满足如下三个条件 : 函数中定义 指针类型 的 形参 , 调用函数时 修改函数外的 实参 ; 将 实参 取地址 , 传递给 函数 ;...在函数中 , 通过指针修改 实参的值 , 以达到修改外部变量的效果 ; 如果将 函数 的形参类型 设置为 引用 类型 , 也能达到 间接赋值 的效果 ; 引用 实际上是 把 间接赋值 的三个条件的后两个条件进行了合并

    38520

    【C++入门(下)】—— 我与C++的不解之缘(二)

    C++的引用跟其他语言的引用(如java)是有很大区别的,除了用法,最大的差别(C++引用定义不能改变指向,而java的引用可以改变指向)。...在一些主要用C语言代码实现版本的数据结构教材中,使用C++引用代替指针传参,目的是简化程序,避开复杂的指针。...这里所说的临时变量就是编译器需要一个空间暂存表达式的求值结果时临时创建的一个未命名的对象(C++中把这个未命名的对象叫做临时对象)。...C++中NULL可能被定义为字面常量 0,或者C语言中被定义为无类型的指针(void*)的常量。...这样在使用时,都会有一些不可避免的麻烦, C++ 11 引入了nullptr,nullptr是一个特殊的关键字,nullptr是一种特殊类型的字面量,它可以转换成任意类型的指针类型,使用nullptr定义空指针可以避免类型转换的问题

    9510
    领券