This earlier question询问 this[0]
在 C# 中的含义。在 C++ 中,this[0]
表示“this
指向的数组的第零个元素。”
是否保证不会导致 C++ 中的未定义行为以这种方式引用接收者对象?我不提倡使用这种语法,我很好奇规范是否保证这将永远有效。
谢谢!
最佳答案
对于任何有效的对象指针p
,p[0]
等价于*p
。所以 this[0]
等价于 *this
。没有什么了。就像您可以使用 [0]
取消引用任何有效指针一样,您也可以使用它取消引用 this
。
换句话说,编写*this
只是一种“棘手”的方式。它可以用来混淆代码。它可能也可以在某些特定情况下用于有用的目的,因为任何独立对象都可以被认为是大小为 1 的数组。(来自 C++03,加法运算符:“对于这些运算符,指针指向非数组对象的行为与指向长度为 1 的数组的第一个元素的指针相同,该数组的类型作为其元素类型。")
附:正如 Johannes 在评论中指出的那样,通过使用 C++11 功能,可以提出一个上下文,其中 this
是指向不完整类型的指针。在这种情况下,this[0]
表达式无效,而 *this
表达式仍然有效。
关于c++ - this[0] 在 C++ 中安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16655325/