c++ - this[0] 在 C++ 中安全吗?

标签 c++ arrays pointers language-lawyer this-pointer

This earlier question询问 this[0] 在 C# 中的含义。在 C++ 中,this[0] 表示“this 指向的数组的第零个元素。”

是否保证不会导致 C++ 中的未定义行为以这种方式引用接收者对象?我不提倡使用这种语法,我很好奇规范是否保证这将永远有效。

谢谢!

最佳答案

对于任何有效的对象指针pp[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/

相关文章:

c++ - 为什么会这样?

c++ - std::deque 内存地址作为数组

c++ - 为什么在 CUDA 的 __global__ 内核中使用 max 和 min 宏没有给出正确答案?

javascript - 如何使用扩展语法删除第一个数组元素

C - 作为 void ptr 传递到 int 列表的 ptr 地址 - 使用 int 或 const int?

c++ - 在 linux 中使用 fork() 时使用指针的引用值

c++ - 同一个类内的 typedef 内的类命名空间?

c++ - QString 方法导致 undefined reference 错误

c# - 交错放置一组电子邮件地址,避免具有相同域的项目连续

c++ - std::inner_product 比手动快 4 倍,但没有使用 SIMD?