this 指针 ">this 指针

= "非 loc" dir = "ltr" lang = "en-us" >此 指针是一个指针,只能在 class 、或类型的非静态成员函数内访问 structunion 。 它指向为其调用成员函数的对象。 静态成员函数不会将 = "no loc" dir = "ltr" lang = "en-us" >此 指针。

语法

 = "lang-cpp" >> 成员标识符

注解

对象的 = "非 loc" dir = "ltr" lang = "en-us" >此 指针不是对象自身的一部分。 它不会在对象的语句结果中反映出来 sizeof 。 当为某个对象调用非静态成员函数时,编译器会将该对象的地址作为隐藏参数传递给该函数。 例如,以下函数调用:

 = "lang-cpp" >setMonth ( 3 ) ; 

可以解释为:

 = "lang-cpp" >setMonth ( & myDate,3 ) ; 

该对象的地址在成员函数内提供,作为 = "no loc" dir = "ltr" lang = "en-us" >此 指针。 大多数 = "非 loc" dir = "ltr" lang = "en-us" >此 指针使用是隐式的。 但 在引用的成员时,如果不必要,可以使用显式的 = "非 loc" dir = "ltr" lang = "en-us" >这种情况 class 。 例如:

 = "lang-cpp" >Void Date:: setMonth ( int mn ) {month = mn;//这三个语句 = "" dir = " 本月 > = mn;//等价 ( * ) 。 month = mn;} 

Expression = "非 loc" dir = "ltr" lang = "en-us" >这 通常用于从成员函数返回当前对象:

 = "lang-cpp" >返回 *  ; 

= "非 loc" dir = "ltr" lang = "en-us" >此 指针还用于防止自引用:

 = "lang-cpp" >如果 (& 对象! = ) {//在自引用情况下不执行 

注意

由于 = "非 loc" dir = "ltr" lang = "en-us" >此 指针不可更改,因此,对 < span=""> = "非 loc" dir = "ltr" lang = "en-us" 的赋值 >

不允许使用此指针。 C + + 的早期实现允许赋值 = "en-us" lang = "en-us" >这种情况

有时, = "不使用" dir = "ltr" lang = "en-us" >此 指针直接用于 — 处理自引用数据 struct ures,其中需要当前对象的地址。

示例

 = "lang-cpp" >//  _pointer .cpp//使用:/ehsc #include < iostream > #include <> 使用命名空间 std 的字符串; class Buf {public: Buf ( char * szBuffer,size_t sizeOfBuffer ) ;Buf & operator = ( const Buf & ) ; void 显示 () {cout << buffer << endl;} private: Char * buffer; size_t sizeOfBuffer;};Buf:: Buf ( char * szBuffer,size_t sizeOfBuffer ) {sizeOfBuffer + +;//用于空终止符缓冲区的帐户 = new char [sizeOfBuffer]; 如果 (缓冲区) {strcpy_s ( buffer,sizeOfBuffer,szBuffer ) ; sizeOfBuffer = sizeOfBuffer;}}Buf & Buf:: operator = ( const Buf & otherbuf ) {if ( & otherbuf! =  ) {if (缓冲区) delete [] buffer; = strlen ( otherbuf ) + 1; buffer = new char [sizeOfBuffer]; strcpy_s ( 缓冲区、sizeOfBuffer、otherbuf ) ;} 返回 * ;} int main () {Buf myBuf ( "my buffer",10 ) ;Buf yourBuf ( "buffer",12 ) ;显示 "我的缓冲区" myBuf () ;赋值运算符 myBuf = yourBuf;显示 "缓冲区" myBuf () ;} 
 = "lang-输出" >缓冲区的缓冲区 

this 指针 ">类型 =" 的 = " this 指针

= "非 loc" dir = "ltr" lang = "en-us" > 可通过和关键字在函数声明中修改此指针的类型 constvolatile 。 若要声明一个具有这些属性的函数,请在函数参数列表的后面添加关键字 (s) 。

请看一个示例:

 = "lang-cpp" >//type_of_  _pointer1 .cpp class 点 {无符号 X () const ;}; int main () {} 

前面的代码声明了一个成员函数, X 其中 X 指针被视为 const 指向对象的指针 const 。 可以使用cv-现代型列表选项的组合,但它们始终会修改由 = "非 loc" dir = "ltr" lang = "en-us" >的对象 ,而不是指针本身。 下面的声明声明 function X ,其中 X 指针是 const 指向对象的指针 const

 = "lang-cpp" >//type_of_  _pointer2 .cpp class 点 {无符号 X () const ;}; int main () {} 

以下语法描述了类型 = "非 loc" dir = "ltr" lang = "en-us" > 在成员函数中。 Cv 限定符列表是从成员函数的声明符中确定的。 它可以是 constvolatile () 。 -type是的名称 class :

[cv 限定符列表] -type

换句话说, = "非 loc" dir = "ltr" lang = "en-us" >此 指针始终是一个 const 指针。 不能重新分配它。 constvolatile 成员函数声明中使用的或限定符适用于 class 实例 constvolatile :在该函数的作用域中,= "非 loc" dir = "ltr" lang = "en-us" >此指针指向的位置。

下表介绍了有关这些修饰符的工作方式的更多信息。

此 修饰符 ">语义 =" 语义 = "en-us" 的语义 = 修饰符

修饰符 含义
const 无法更改成员数据;无法调用不是的成员函数 const
volatile 每次访问成员数据时,都将从内存中加载该成员数据;禁用某些优化。

将对象传递给不是的 const 成员函数是错误的 const

同样,将对象传递给不是的成员函数也是错误的 volatilevolatile

声明为的成员函数 const 不能更改 — 此类函数中的成员数据, const— = "非 loc" dir = "ltr" lang = "en-us" >此 指针是指向对象的指针 const

注意

Con struct or 和 de struct or 不能声明为 constvolatile 。 但是,它们可以在 const 或对象上调用 volatile

另请参阅

关键字