tem*_*def 15 c++ arrays pointers this-pointer language-lawyer
这个早期的问题询问this[0]C#中的含义.在C++中,this[0]意思是"指向的数组的第0个元素this".
是否保证不会在C++中导致未定义的行为以这种方式引用接收器对象?我并不主张使用这种语法,并且我很好奇这个规范是否能保证它始终有效.
谢谢!
AnT*_*AnT 19
对于任何有效的对象指针p,p[0]相当于*p.所以this[0]相当于*this.没有更多的东西.就像您可以取消引用任何有效指针一样[0],您可以取消引用this它.
换句话说,它只是一种"棘手"的写作方式*this.它可以用来混淆代码.它也可以在某些特定情况下用于有用的目的,因为任何独立对象都可以被认为是大小为1的数组.(来自C++ 03,Additive运算符:"出于这些运算符的目的,指针非对象对象的行为与指向长度为1的数组的第一个元素的指针的行为相同,其中对象的类型为其元素类型.")
PS正如Johannes在评论中指出的那样,通过使用C++ 11特性,可以提出一个上下文,其中this指向一个不完整类型的指针.在那种情况下,this[0]表达式变为无效,而*this表达式仍然有效.
Ker*_* SB 11
this[0]是一样的*(this + 0),所以确实这很好(尽管有点奇怪).