【发布时间】:2016-09-02 11:08:28
【问题描述】:
下面的代码(-std=c++11)根据“幼稚”的观点应该可以工作。 相反,它没有(应该知道并理解为什么它没有)。 修改代码(重载&)以使其按照“天真”视图运行的最短方法是什么? 在创建 stl 对象期间不应该将其作为一个选项(不要写太多)吗?
#include <iostream>
#include <vector>
int main(int argc, char **argv)
{ std::vector<int> A{10,20,30};
auto i=A.begin();
auto j=&*i;
std::cout<<"i==j gives "<<(i==j)<<std::endl;
return 0;
}
【问题讨论】:
-
对我来说这看起来像一个XY problem。你的实际目标是什么?您希望该行为在什么时候有效?
-
是的。 为什么你想打破“转换为实际地址”运算符(&*)。
-
解释一下你所说的“工作”是什么意思
-
@MartinBonner 我的意思是我想让 &*i 等价于 i
-
是的,但这意味着 &* 的结果不会是原始指针——我认为这是“破坏”“原始地址运算符”。 (现在有一个标准函数可以返回原始地址运算符,即使存在
operator &- 但我认为停止 &* 工作是非常糟糕的。
标签: c++ reference iterator dereference