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

18020

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.3K100
您找到你想要的搜索结果了吗?
是的
没有找到

《挑战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] << "|"

47210

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

26510

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

90040

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

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

65921

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

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

11110

cc++常见面试题

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

58530

【编程基础】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++】动态内存管理 ② ( new 运算符 为 基础数据类型 基础数据数组类型 分配堆内存 )

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

18310

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

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

8110

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

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

25320

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

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

12910

C++第二章 变量与基本类型

基本内置类型 c++类型检查发生在编译阶段,因此编译器必须知道程序每一个变量所对应类型创建变量或者常量时,指定对应数据类型,以便分配内存。...另外各个环境下%运算符含义不同,比如c/c++,java 为取余,而python则为取模。  ...int a = 2; int *p = &a;//p存放a地址, p是指向变量a指针 //解引用就会获取指向对象 *p = 3; //即a值变成3 解引用仅适用于那些确实指向了某个对象有效指针...指针本身是一个常量称为顶层(top-lever const)....顶层const可以表示任意对象是常量,适用于任意数据类型.算数类型,类,指针 指针所指向对象是一个常量称为底层(low-lever const) 底层const与指针和引用等复合类型基本类型有关

89930

面试总结-C++

常量指针指针常量常量指针是一个指针,读成常量指针,指向一个只读变量。int const *p或const int *p。 指针常量是一个常量指针值可以改变。int *const p。...- 指针free或delete之后没有及时置空 => 释放操作后立即置空。 ##### 指针和数组区别 数组要么在静态存储区被创建全局数组),要么在栈上被创建。...指针可以随时指向任意类型内存块。 1. 修改内容上差别:指针可能指向一块内存,但是指向常量却无法通过下标计算。...对于C++来说,有些操作也不是类型安全,比如不同类型指针之间可以强制转换(reinterpret cast) 注:C#、Java是类型安全 C++使用得当,可以远比C更有类型安全性。...(1)操作符new返回指针类型严格与对象匹配,而不是void; (2)C很多以void为参数函数可以改写为C++模板函数,而模板是支持类型检查; (3)引入const关键字代替#define constants

2.1K11

【编程基础】如何赢得C++面试

对于非内部数据类型对象而言,光用maloc/free无法满足动态对象要求。对象在创建同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。...C++)。...1)const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到错误。...2)有些集成化调试工具可以对const常量进行调试,但是不能对宏常量进行调试。 10.简述数组与指针区别? 数组要么在静态存储区被创建全局数组),要么在栈上被创建。...指针可以随时指向任意类型内存块。 11.类成员函数重载、覆盖和隐藏区别?

1.3K70

C++指针使用

大家好,又见面了,我是全栈君 C++指针使用好坏直接反映了编程人员水平高低,下面从指针和数组区别、指针参数是如何传递内存、野指针、malloc/free、new/delete和内存耗尽怎么办方面进行总结...一 指针和数组对比   C++/C程序指针和数组在不少地方可以相互替换着用,让人产生一种错觉,以为两者是等价。数组要么在静态存储区被创建全局数组),要么在栈上被创建。...数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组内容可以改变。指针可以随时指向任意类型内存块,它特征是“可变”,所以我们常用指针来操作动态内存。...任何指针变量刚被创建时不会自动成为NULL指针,它缺省值是随机,它会乱指一气。   (2)指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法指针。   ...对于非内部数据类型对象而言,光用maloc/free无法满足动态对象要求。对象在创建同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。

62510
领券