如何在C++中为指针'this'赋值
How can you assign a value to the pointer 'this' in C++
在函数中,如何为this
赋值?
您可以在以下位置为对象分配this
点:
*this = XY;
但是您不能分配 this
的直接值:
this = &XY; // Error: Expression is not assignable
你不能
。
9.3.2 这个指针 [class.this]
1 在非静态 (9.3) 成员函数的主体中,关键字
this
是一个 prvalue 表达式,其值 是为其调用函数的对象的地址。[...](强调和链接我的)
您可以修改this
指向的对象,即*this
。例如:
struct X
{
int x;
void foo()
{
this->x =3;
}
};
该方法修改对象本身,但类似this = new X
的东西是非法的。
很久以前,在第一个C++标准发布之前,一些编译器实现允许您在构造函数中编写以下代码:
this = malloc(sizeof(MyClass)); // <<== No longer allowed
该技术是控制对象类分配的唯一方法。这种做法已被标准所禁止,因为operator new
的过载解决了过去通过分配给this
来解决的问题。
你不能。如果你觉得有必要这样做,也许你应该编写一个静态方法,将类指针作为它的第一个参数。
不能为指针赋值this
。如果您尝试将值分配给this
类似于this = &a
将导致非法表达式
你不能。"this"是类的每个成员函数的隐藏参数,其对类 X 对象的类型是 X* const。这显然意味着您不能将新的 vale 分配给 "this",因为它被定义为常量。但是,您可以修改此指向的值。有关更多详细信息,请参阅 http://www.geeksforgeeks.org/this-pointer-in-c/。
相关文章:
- 为"adjacent"变量赋值时出现问题
- C++中的赋值发生,尽管右侧出现异常
- 用C++中的sscanf赋值
- 为std::string的某个索引赋值
- 重载Singly Linked List中的赋值运算符
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- gtest_使用setargpointee在函数中赋值
- 非常量变量只读位置的赋值
- 使用赋值运算符重载从类中返回jobject
- C++数据文件、数组和计算赋值
- 为什么在使用转换构造函数赋值后调用C++类的析构函数?
- 全局作用域中函数指针的赋值
- 错误:在为指针赋值时,void值没有被忽略
- 从自身内部替换 std::函数(通过将移动赋值到 *this?)
- "return *this"赋值运算符重载
- 为什么我们在重载赋值中使用return*this
- 如何在C++中为指针'this'赋值
- 在构造函数中赋值给*this
- 在类赋值操作符函数中,为什么必须返回*this ?
- 如何在c++中赋值指针给this