在C++中,执行去引用和获取索引0的操作是相同的
In C++, do dereferencing and getting index zero do the same tihng?
我刚刚尝试了这个代码:
int i = 33;
int * pi = &i;
cout << "i: " << *pi << endl;
cout << "i: " << pi[0] << endl;
两行返回的内容相同。
本质上,如果我得到任何指针的索引零,我就会在指针的位置得到正确类型的值。这不就是取消引用吗?
每次在C++中取消引用指针时,获取索引0不是也有效吗?我并不是建议任何人都应该这样做,但我认为这会起作用。不是吗?
忽略重载运算符,有一种情况是有区别的,那就是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]6.5.2.1数组下标:
E1[E2]
与(*((E1)+(E2)))
相同
[C++]5.2.1订阅:
表达式CCD_ 3与CCD_,除了在数组操作数的情况下,结果是如果该操作数为左值,则为左值;否则为x值。
请参阅@T.C关于最后一部分的精彩回答。
对于指针,它们应该给出相同的结果。
它们可能不同的唯一一次是,如果您将它们应用于以不同方式重载operator*()
和operator[](int)
的用户定义类型(或者一个而不是另一个,在这种情况下会出现编译错误)。
相关文章:
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 数组索引的值没有增加
- 芬威克树(BIT).找到具有给定累积频率的最小索引,单位为 O(logN)
- 重载操作程序时出错>>用于类中的字符串 memebr
- 查找最接近的大于当前数字的数字的索引
- 在C++中调整向量中的索引
- 对字符串进行位操作
- 重载元组索引运算符-C++
- 给定一个向量,如何找到该向量的所有子集和的原始索引
- 我可以在 C++ 中的函数体之外进行操作吗?
- MPI突然停止了对多个核心的操作
- 为std::string的某个索引赋值
- 为什么用于阈值矩阵元素的 Matlab 逻辑索引操作在性能上优于 mex 实现?
- 如何创建辅助数据结构来跟踪 c++ 中 decrease_key 操作的堆索引
- 如何在C++中创建一个网格,这将允许我将每个索引设置为一个向量,以便以后操作该向量,然后绘制它
- 在C++中,执行去引用和获取索引0的操作是相同的
- 当用两个线程在C/C++中操作不同的数组索引时,是否需要同步
- 如何在Eigen中执行索引操作
- 提振.多索引空间操作
- 特征矩阵库索引操作