C++ *在C++;
我理解C++ *在C++;,c++,this,C++,This,我理解这个做什么,但是*这个和这个之间有什么区别 是的,我已经在我的课本上搜索并阅读了*这个,但我就是不明白它…这个是一个指针,*这个是一个未引用的指针 如果您有一个返回this的函数,它将是指向当前对象的指针,而返回*this的函数将是当前对象的“克隆”,在堆栈上分配,除非您指定了返回引用的方法的返回类型 一个简单的程序,显示对副本和引用进行操作的区别: #include <iostream> class Foo { public: Foo()
这个
做什么,但是*这个
和这个
之间有什么区别
是的,我已经在我的课本上搜索并阅读了
*这个,但我就是不明白它…这个是一个指针,*这个是一个未引用的指针
如果您有一个返回this
的函数,它将是指向当前对象的指针,而返回*this
的函数将是当前对象的“克隆”,在堆栈上分配,除非您指定了返回引用的方法的返回类型
一个简单的程序,显示对副本和引用进行操作的区别:
#include <iostream>
class Foo
{
public:
Foo()
{
this->value = 0;
}
Foo get_copy()
{
return *this;
}
Foo& get_copy_as_reference()
{
return *this;
}
Foo* get_pointer()
{
return this;
}
void increment()
{
this->value++;
}
void print_value()
{
std::cout << this->value << std::endl;
}
private:
int value;
};
int main()
{
Foo foo;
foo.increment();
foo.print_value();
foo.get_copy().increment();
foo.print_value();
foo.get_copy_as_reference().increment();
foo.print_value();
foo.get_pointer()->increment();
foo.print_value();
return 0;
}
您可以看到,当我们对本地对象的副本进行操作时,更改不会持久化(因为它是一个完全不同的对象),但对引用或指针进行操作会持久化更改。这是指向类实例的指针<代码>*此
是对相同代码的引用。它们是不同的,正如int*i_ptr
和int&i_ref
是不同的。没有真正的区别,this->foo()
与(*this)相同。foo()
我在这里验证:返回*这不返回对象的引用,而是对象的副本?你可以这样问*这实际上返回了对对象的引用。例如,如果在类中重载[]运算符,则可以在类内部使用(*this)[]而不是运算符[]。请注意,您的示例具有误导性。尝试Foo&get_copy(){return*this;}。然后您会看到,实际上*这是一个引用。@ypnos:*这是一个取消引用的指针或引用与此无关Foo&get_copy(){return*this;}
将返回一个引用,因为您告诉它(通过声明Foo&)。与任何其他类型一样,Foo get_copy(){return*this;}
将返回对象的副本。更准确地说,指针的取消引用将导致引用该对象的左值。因为它是一个左值,所以您可以将其分配给一个引用变量并获取对它的引用;或者您可以将其分配给对象类型的变量并获取副本,或者您可以对其执行&
操作以再次获取指针。啊,是的,我想我应该先将其扔到编译器中进行验证:)
1
1
2
3