c++ - 在 C++ 中,取消引用和获取索引零做同样的事情吗?

标签 c++ pointers dereference

我刚刚试过这段代码:

int i = 33;
int * pi = &i;
cout << "i: " << *pi << endl;
cout << "i: " << pi[0] << endl;

两行返回相同的东西。

本质上,如果我获得任何指针的索引零,我将在指针位置获得正确类型的值。这与取消引用不是一回事吗?

每次在 C++ 中取消引用指针时,获取索引零是否也有效?我并不是建议任何人实际上应该这样做,但我认为它会有效。不是吗?

最佳答案

忽略重载运算符,有一种情况是有区别的,那就是数组右值后- DR1213 :

using arr = int[2];
arr&& f();
int&& b = *f(); // error, *f() is an lvalue, doesn't bind to int&&
int&& c = f()[0]; // OK, subscript applied to array rvalue results in an xvalue

不过,我不知道有任何编译器实现了该解决方案。但最终应该实现。

关于c++ - 在 C++ 中,取消引用和获取索引零做同样的事情吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36559112/

相关文章:

c - char * 的大小是否与 int * 的大小相同?

c++ - 如何为一个文件指定build设置?

C++ Windows 系统 ("path") 如果某处有空间则不工作

c - 设置孪生指针的最有效算法

c - 当我将指针递增 1 时,为什么不能访问字符串中的下一个元素?

c++ - 为什么对cout << g_System-> FileSystem()-> GetFileData (“test.txt”取消引用NULL的工作;在这个例子中?

c++ - 如何在 C++ 中使用 cout 打印带 2 位小数的 float

c++ - 返回值的简单模板类成员函数特化

pointers - 在 CUDA 中的类之间传递指向设备内存的指针

c、二维字符数组和fopen