首页
学习
活动
专区
工具
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

22020

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] << "|"

    48310

    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 , 强行将

    42610

    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或者固定地址对象,并且

    92640

    二、从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来声明类常量成员。

    7110

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

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

    97421

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

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

    15910

    cc++常见面试题

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

    61230

    【编程基础】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是⼀种特殊类型字⾯量,它可以转换 成任意其他类型指针类型

    6210

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

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

    12510

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

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

    24310

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

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

    33020

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

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

    9310

    CC++关键字详解-----`const`使用

    const在C和C++之间区别 在 C 和 C++ ,const 关键字基本作用是相似的,都是用于创建常量并限制变量修改。...然而,在具体使用和行为上,C 和 C++ const 有一些区别: 字符串常量: 在 C 语言中,字符串常量 "hello")被视为字符数组常量,而不是指向常量指针。...在 C++ ,推荐使用 const 关键字来声明全局常量,因为 const 具有类型安全性,而 #define 宏定义则可能导致类型不匹配和错误使用问题。...总的来说,虽然 C 和 C++ const 关键字都用于创建常量和限制变量修改,但在一些具体用法和语义上存在一些差异。...在 C++ ,const 使用更为严格,并且常常被用于提高代码类型安全性和可维护性。

    18710
    领券