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

C++ this指针:用于在成员函数指向调用该函数对象

C++中this指针是一个指向当前对象指针。在成员函数中,可以使用this指针来访问调用该函数对象成员变量和成员函数。...在成员函数内,无需显式地传入this指针,编译器会自动当前对象地址赋给this指针。...这里使用了*this来访问调用该函数对象。 三、作为函数参数this指针 this指针也可以作为函数参数传递。这种情况下,可以在函数内部访问其他对象成员变量和成员函数。...,传入name参数设置到了otherPerson对象name成员变量中。...四、总结 this指针在C++中是一个非常重要概念,可以用来访问调用该函数对象,作为返回值返回,或者作为函数参数传递。掌握this指针使用可以帮助我们更好地编写面向对象程序。

18240

《C++Primer》第十六章 模板与泛型编程

,或者是一个指向对象或者函数类型指针或(左值)引用 绑定非类型参数实参必须是一个常量表达式 绑定指针或者引用非类型参数实参必须具有静态生存期 1.2 编写类型无关代码 编写泛型代码两个重要原则...我们包含一个重载函数调用运算符,它接受一个指针并对此指针执行delete,由于我们希望删除器适用于任何类型,因此我们调用运算符定义为一个模板。 // 函数对象类....类型转换与模板类型参数 能在调用中应用于函数模板包括如下三项: 顶层const无论是在形参中还是在实参中都会被忽略 const转换:可以一个非const对象引用(或指针传递给一个const引用...一个数组形参可以转换为一个指向其首元素指针,一个函数实参可以转换为一个该函数类型实参 实参传递给待模板类型函数形参时,能够自动应用类型转换只有const转换及数组或函数指针转换。...但是C++在正常绑定规则外定义了两个例外规则,允许这种绑定: 第一个例外规则:当我们一个左值(如i)传递函数右值引用参数,且此右值引用指向模板类型参数(如T&&)时,编译器推断模板类型参数为实参左值引用类型

1.7K10
您找到你想要的搜索结果了吗?
是的
没有找到

【C++】侯捷C++面向对象高级编程(下)

同普通指针,父类指针可以指向子类对象。...,传递参数1000,找到上面的特化long return 0; } 与全特化对应是偏特化(局部特化) ---- 偏特化 个数上左边开始绑定,不能跳。...范围上偏 例如,接收任意范围T,接收指针T* ---- 模块模板参数(tempalte template parameter) 即,模板参数又是一个模板 如上图所示,传递任意容器与元素类型进行组合...析构——由外而内 同上,要注意是,上面先构造,会后析构。 ---- 虚指针与虚函数表(vptr & vtbl) 虚指针指向函数表,虚函数表中都是函数指针。...---- this pointer 类成员函数中,默认会有一个this指针传递进来。由编译器自己处理。

60520

【笔记】《C++Primer》—— 第16章:模板与泛型编程

,非类型参数表示是一个值而不是类型,因此非类型参数在编译时会被用户提供或编译器推断一个常量代替,从而允许我们初始化数组之类 非类型参数可以是整型或指向对象函数指针或左值引用,但是注意绑定非类型整型必须是常量表达式...,绑定指针或引用对象必须有静态生存期(都是为了可以在编译期完成所要求) // 类型模板参数模板函数 // 此处T是作为一个待定类型使用 template int...*inp; } 有时候我们无法直接得到所需要类型,因为我们对会传递进来参数类型实际上几乎一无所知,甚至不知道它是不是指针是不是引用是不是右值引用之类,我们需要能够动态地这些语言特性消去传入参数中提取出我们想要类型...当函数指针调用存在歧义时,我们可以显式指定指针类型来消歧义 具体来说编译器是如何模板函数调用中推断具体实参类型呢,要分为几种情况 当函数参数是普通左值时,正常推断,很多参数无法传递进去 当函数参数是左值引用如...可变参数模板函数通常是一种递归函数,一般我们编写时候都会递归地分析内容并调用直到终止,内容分解成元素称为扩展 扩展一种用法是用来扩展提取输入参数: // 递归终止函数,一般是处理参数最后一个函数

1.5K30

【笔记】《C++Primer》—— 第三部分:类设计者工具

但我们可以const左值引用绑定右值上 移动构造具体写法类似拷贝构造,但是构造参数是自己类型右值引用,为了完成移动构造,我们需要保证移动后源对象处于可以无害销毁状态,源对象指针不再指向原先资源...我们很多时候希望是我们通过基类指针指向派生类,然后可以动态调用派生类函数,这时我们可以基类对应函数写为虚(virtual)函数来实现,此时发生称为动态绑定 派生类可以继承多个基类,称为多继承...,但是注意绑定非类型整型必须是常量表达式,绑定指针或引用对象必须有静态生存期(都是为了可以在编译期完成所要求) 模板提供者必须保证模板实例化时依赖于模板参数名字都必须有定义,其他要保证对编译器可见...,我们可以用尾置返回来完成这个目标: 标准库头文件type_traits中类来进行特殊类型转换能够动态地这些语言特性消去传入参数中提取出我们想要类型 编译器是模板函数调用中推断具体实参类型要求在...,那些可变参数部分称为参数,由省略号...标记 可变参数模板函数通常是一种递归函数,一般我们编写时候都会递归地分析内容并调用直到终止,内容分解成元素称为扩展 扩展一种用法是用来扩展提取输入参数

1.7K10

C++11(下篇)

释放ptr指向空间要用 operator delete(),因为 delete会调用析构 可变参数模板 C++11新特性可变参数模板能够创建可以接受可变参数函数模板和类模板 我们把带省略号参数称为...“参数”,它里面包含了0N(N>=0)个模版参数,比如args里面有三个参数,这里需要注意,参数里面的内容不能直接取出来。...sort", 1)); v.emplace_back("sort", 1); 对比 可以看到vector,测试两种方式没有区别,但是list测试,emplace_back更高效,因为只有一次构造,参数传递参数直接构造...总结 对于内置类型来说,两种并无区别,对自定义类型来说,一些容器,比如list可以直接参数构造容器对象上面。更高效一些。...cout double{ return d / 4; }, 11.11) << endl; return 0; } useF是个函数模板,依次函数指针

62210

《逆袭进大厂》第三弹之C++提高篇79问79答

,可以忽略参数列表和返回值,但必须永远包含捕获列表和函数体; 123、字符串“hello world”开始打印到屏幕上全过程?...当在类非静态成员函数访问类非静态成员时,编译器会自动将对象地址传给作为隐含参数传递函数,这个隐含参数就是this指针。...This指针首先入栈,然后成员函数参数右向左进行入栈,最后函数返回地址入栈。 153、你知道静态绑定和动态绑定吗?讲讲? 1) 对象静态类型:对象在声明时采用类型。是在编译期确定。...166、引用作为函数参数有哪些好处? 1) 传递引用给函数传递指针效果是一样。...如果你把函数指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向函数时,我们就说这是回调函数; 4) 因为可以把调用者与被调用者分开。

2.2K30

Chapter 6:Lambda Expressions

传入参数指针时,当指针指向对象生命周期大于lambda表达式生命周期时,会出现悬空指针 捕捉范围只能是非static局部变量 隐式捕捉成员变量,虽然成员变量不是局部变量,编译也能通过,因为实际捕捉到指针...std::bind产生一个函数对象中 把这个捕捉对象引用传递给给lambda表达式 解释: 一个绑定对象包含传递给std::bind所有参数拷贝 对于每一个左值参数...默认情况下,lambda表达式产生内部成员函数operator(),是const属性,这使得闭里面的所有数据成员在lambda体内都是const属性,而bind对象里面移动过来data...1个小时开始响,而不是setAlarm函数调用时刻开始算起向后推迟1个小时,因为bind会把传入参数拷贝bind对象内部,以后调用时候再把这些参数传递给可调用对象 一种修正方法是让bind延迟解析表达式值...inline函数调用,不太可能对函数指针做这种优化,因此使用lambda代码在这种情况下要比bind快 C++11中,bind用途主要在于实现移动捕捉或把模板函数调用绑定对象上 5.

1.7K50

【C++】C++ 类中 this 指针用法 ③ ( 全局函数成员函数 相互转化 | 有参构造函数设置默认参数值 | 返回匿名对象与返回引用 )

, 这个增加参数对象本身指针 ; 在 Student 类中 , 定义了如下函数 : // 成员函数 转为 全局函数 , 多了一个参数 Student* pThis 作为第一个参数 void...Student 引用类型参数 , 引用相当于一级指针 ; // 全局函数中 , 两个 Student 对象相加 // 引用 等同于 一级指针 , Student 引用用法与 Student 对象用法相同...返回是一个匿名对象 , 该匿名对象 是在 成员函数 中新创建对象 ; // 成员函数中, 两个 Student 对象相加 // 全局函数 转为 成员函数 , 少了一个参数 // 返回一个新..., 就是返回自身对象变量 // this 是指针 , *this 是指针指向 自身对象 return *this; } 返回 引用 , 就是返回自身对象 ; this 是指针 , *this...是指针指向 自身对象 return *this; } // 成员函数 转为 全局函数 , 多了一个参数 Student* pThis 作为第一个参数 void print() {

16720

【Example】C++ 回调函数及 std::function 与 std::bind

回调函数是做为参数传递一种函数,在早期C样式编程当中,回调函数必须依赖函数指针来实现。...一,回调函数 回调函数创建步骤大概为: 1,声明一个函数指针类型。 2,拟写使用回调函数函数函数指针类型及变量名声明作为参数传递。...3,拟写符合函数指针类型实现函数实现函数指针作为参数传递给使用它函数。...当用作类成员函数绑定时,第一个参数仍然是作为类成员可调用对象引用,第二个参数则是对象指针,而第三个参数开始对应可调用对象参数表。...: 1,调用指向非静态成员函数指针指向非静态数据成员指针时,首参数必须是引用或指针(可以包含智能指针,如 std::shared_ptr 与 std::unique_ptr),指向访问其成员对象

4.2K30

ReactNative4 Android源码分析二:《JNI智能指针之实现篇》

set和get函数可以看出,storage_内存空间分配是delay设值时候,并将storage_内存空间指针通过reinterpret_cast类型转换为Repr类型。...为什么智能指针模板参数能够接受多种类型? 在上章例子中,local_ref\与local_ref\传递了不同模板参数语法上看区别很大,但在内部实现时,都会进行类型萃取。...通过这样机制,两个类型彼此打通,故无论传递何种模板参数,智能指针都能正确存储对应类型wrapper class。 模板参数起到作用是什么?...从上可以了解,智能指针模板参数用来获取存储wrapper class类型。...智能指针通过类型萃取负责jobject存储至正确wrapper实例,以对外提供镜像方法,结合构造与析构函数,自动进行jobject生命周期管理。

1.3K20

C++11新特性学习笔记

(2, 1.0); // OK:args含有两个实参int和double 省略号“…”作用有两个: \1) 声明一个参数,这个参数中可以包含0到任意个模板参数 \2) 在模板定义右边,可以参数展开成一个一个独立参数...unique_ptr指针本身生命周期:unique_ptr指针创建时开始,直到离开作用域。 离开作用域时,若其指向对象,则将其所指对象销毁(默认使用delete操作符,用户可指定其他操作)。...成员lock,则可返回其指向内存一个share_ptr对象,且在所指对象内存已经无效时,返回指针空值nullptr。...函数对象参数传递给编译器自动生成函数对象构造函数函数对象参数只能使用那些定义lambda为止时lambda所在作用范围内可见局部变量(包括lambda所在类this)。...函数体内可以使用lambda所在类中成员变量。 n a。a按值进行传递。按值进行传递时,函数体内不能修改传递进来a拷贝,因为默认情况下函数是const

2K20

C++11新特性学习笔记

(2, 1.0); // OK:args含有两个实参int和double 省略号“…”作用有两个: \1) 声明一个参数,这个参数中可以包含0到任意个模板参数 \2) 在模板定义右边,可以参数展开成一个一个独立参数...unique_ptr指针本身生命周期:unique_ptr指针创建时开始,直到离开作用域。 离开作用域时,若其指向对象,则将其所指对象销毁(默认使用delete操作符,用户可指定其他操作)。...成员lock,则可返回其指向内存一个share_ptr对象,且在所指对象内存已经无效时,返回指针空值nullptr。...函数对象参数传递给编译器自动生成函数对象构造函数函数对象参数只能使用那些定义lambda为止时lambda所在作用范围内可见局部变量(包括lambda所在类this)。...函数体内可以使用lambda所在类中成员变量。 n a。a按值进行传递。按值进行传递时,函数体内不能修改传递进来a拷贝,因为默认情况下函数是const

2.2K20

C语言与C++面试知识总结

greeting; // 自身是常量指针指向字符数组常量 } // 函数 void function1(const int Var); // 传递过来参数函数内不可变...它指向调用该成员函数那个对象。 当对一个对象调用成员函数时,编译程序先将对象地址赋给 this 指针,然后调用成员函数,每次成员函数存取数据成员时,都隐式使用 this 指针。...当一个成员函数被调用时,自动向它传递一个隐含参数,该参数是一个指向这个成员函数所在对象指针。... inline 函数体复制 inline 函数调用点处; 为所用 inline 函数局部变量分配内存空间; inline 函数输入参数和返回值映射到调用方法局部变量空间中; 如果 inline...修饰构造函数对象不可以 int B 隐式转换 if (b1); // OK:被 explicit 修饰转换函数 B::operator bool() 对象可以 B bool 按语境转换

4.9K41

什么?CC++面试过不了?因为你还没看过这个!

greeting; // 自身是常量指针指向字符数组常量 } // 函数 void function1(const int Var); // 传递过来参数函数内不可变...它指向调用该成员函数那个对象。 当对一个对象调用成员函数时,编译程序先将对象地址赋给 this 指针,然后调用成员函数,每次成员函数存取数据成员时,都隐式使用 this 指针。...当一个成员函数被调用时,自动向它传递一个隐含参数,该参数是一个指向这个成员函数所在对象指针。... inline 函数体复制 inline 函数调用点处; 为所用 inline 函数局部变量分配内存空间; inline 函数输入参数和返回值映射到调用方法局部变量空间中; 如果 inline...修饰构造函数对象不可以 int B 隐式转换 if (b1); // OK:被 explicit 修饰转换函数 B::operator bool() 对象可以 B bool 按语境转换

3.6K50

C++面向对象程序设计_Part1

函数重载 构造函数位置 参数传递 返回值传递 友元 操作符重载(一),this, cout 操作符重载(二)非成员函数,无this,临时对象 Big Three ---string class begin...(引用本质上就是指针,主要用在参数传递和返回值传递) 友元 ? 友元函数是类朋友,被设定为友元函数可以访问朋友私有成员,这个函数(do assignment plus)用来做复数加法具体实现。...上面介绍__doapl函数将在操作符重载中进行调用,可以看到第一个参数是this,对于成员函数来说,都有一个隐藏参数,那就是this,this是一个指针指向调用这个函数对象,而操作符重载一定是作用在左边对象...但string类不一样,上面的图是很好例子,因为使用是动态分配内存,对象a和对象b都指向外面的一块内存,如果直接使用默认拷贝构造或者拷贝赋值(例如b = a),则是b指针指向a所指区域,也就是...可以使用new命令动态分配内存,主要有以下三步,首先分配要构建对象内存,返回是一个空指针,然后对空指针进行转型,转成要生成对象类型初始化给指针,然后指针调用构造函数初始化对象。 ? ?

91420

【C++】C++11 新特性

参数”,它里面包含了0N(N>=0)个模版参数参数参数个数 在可变参数函数模板中我们可以使用 sizeof…(args) 来求得参数参数个数: 2、取出参数每个参数 既然可以使用...,然后这个对象深拷贝或者移动拷贝容器中,而 std::emplace() 则通过使用可变参数模板、万能模板等技术,直接在容器中构造对象,避免了对象拷贝和移动; 对于不需要进行深拷贝自定义类型来说...function 是一个可调用对象包装器,可它以函数指针、仿函数以及 lambda 表达式、成员函数等可调用对象进行包装,使他们具有相同类型,包装器也可以像普通函数一样进行调用,包装器本质还是仿函数...: 静态成员函数没有 this 指针,所以 function 类实例化时不需要添加一个成员函数所属类类型参数,在调用时也不需要传递一个成员函数所属类对象; 但非静态成员函数有隐藏 this 指针...,并且也不需要我们在 function 参数中显式声明;这样我们就可以通过绑定让我们普通成员函数和类静态成员函数以及 lambda 表达式、函数指针一样定义为统一类型了;如下: 需要说明

1.3K10

后台开发:核心技术与应用实践 -- C++

使用引用传递函数参数时,在内存中并没有产生实参副本,而是对实参直接操作。...当使用一般变盘传递函数参数时,当函数发生调用,需要给形参分配存储单元,形参变量是实参变量副本;如果传递对象,还将调用拷贝构造函数。...因此,当参数传递数据较大时,用引用比用 一般变量传递参数效率更高,所占空间更少。...而对于有虚函数类来说,每个对象都会保存一个指向函数指针,该指针在64位机器上占8Byte。...在每一个成员函数中都包含一个特殊指针,这个指针名字是固定,称为 this指针,它是指向本类对象指针,它值是当前被调用成员函数所在对象起始地址。

1.3K10
领券