我对这个指针的概念有点不清楚。 我知道c ++中的this指针是隐藏指针,它用于引用当前的调用对象。但是我想知道这个指针是否有数据类型,例如。 int * p;说明p是指向整数的指针。同样这个指针指向什么? (我的意思是这个'这个'指针在哪里声明或写入,或者它存在于何处以及它是如何写在那里的。)
第二个问题是在C#的背景下 问题是 - 这是什么'这个'在C#的上下文中,如果它不是C#中的指针(当我尝试使用>这个'关键字的>箭头操作符时,我发现它不是C#中的指针)。 再一次,'这个'的数据类型是什么?在C#中(我知道上面关于c ++的问题的答案会回答它,但我想知道它在C#中有什么不同)
P.S:我是一名业余程序员,在学习阶段,对于使用像&#34这样的术语表示道歉;它是如何写在那里的?#34;在提出问题时,而不是适当的技术术语。答案 0 :(得分:8)
我想知道这个指针是否有数据类型
隐藏指针this
的类型始终是使用指针的类的类型。例如,在
struct Foo {
void bar1() {
cout << this << endl;
}
void bar2() const {
cout << this << endl;
}
};
this
内的bar1()
类型为Foo*
;在bar2() const
内,它是const Foo*
。
同样这个指针指向什么?
它是指向当前实例的指针。例如,在
下面struct Foo {
void bar() {
cout << this << endl;
}
} foo;
this
内的指针bar()
和表达式&foo
指向同一个对象。
如果它不是指针,那么在C#的上下文中
this
是什么?
C#没有指针 * ,但它的对象引用概念相当类似。在C#中,this
表示对当前对象的引用。 this
的类型是引用它的类的类型。
请注意this
指向的对象的运行时类型可能不同 - 例如,它可能是子类。但是,指针this
的静态类型与引用指针this
的类的类型相匹配。
* 除非你冒险进入不安全的环境,无论如何。
答案 1 :(得分:0)
在C ++中,this指针是一个传递给所有非静态成员函数的隐式参数(作为隐藏参数传递给它们)。请点击此处查看更多解释:http://www.tutorialspoint.com/cplusplus/cpp_this_pointer.htm和此处:http://www.geeksforgeeks.org/this-pointer-in-c/,http://msdn.microsoft.com/en-us/library/y0dddwwd.aspx。
在C#中,“this”是一个保留关键字,它是对运行该方法的对象的引用。正如您在C#中所知,您不使用指针,但您使用对象的引用。
答案 2 :(得分:0)
这里的恕我直言是一个有用的参考资料,可以很好地描述问题:MSDN
答案 3 :(得分:0)
是的,C ++中的this
指针有一个类型。
class A
{
public:
void func() {}
}
func
内部this
类型为: -
A * const //for non-const functions.
A const * const //for const functions.
答案 4 :(得分:0)
this
肯定是C ++中的指针,在类Foo
中它将属于Foo *
类型,除非你在volatile
或{ {1}}方法 - 在这种情况下,这两个修饰符将传播到const
类型。
同样在C#this
中,它只是当前对象类型的神奇参考变量。