【发布时间】:2018-04-02 23:24:43
【问题描述】:
我正在学习使用 C++11 的东西,遇到了一个我不确定如何使用 auto 的情况。考虑:
struct MyClass { double x; }
std::vector<MyClass*> myvec;
function_that_fills_vector(myvec);
//(1) this should be valid:
for(auto* item : myvec){ std::cout<< item->x <<std::endl; }
//(2) what about this?
for(auto item : myvec){ std::cout<< item.x <<std::endl; }
//(3) or this?
for(auto item : myvec){ std::cout<< item->x <<std::endl; }
也就是说,如果我知道我的auto 确实是一个指针,我可以在构造函数中明确说明它,所以我知道解引用运算符是正确的。但是如果我将myvec 更改为保存对象,(1) 将不再编译。
在 (2) 和 (3) 中,底层指针的性质是隐含的。哪个成员访问运算符(. 或 ->)是正确的?如果两者都有效,是否有充分的理由使用其中一种?如果我将myvec 更改为vector<MyClass>,两者都会继续工作吗?
【问题讨论】:
-
#justtryitandsee
-
@LightnessRacesinOrbit 你当然是对的,但希望答案对寻找相同信息的其他人有用。
-
说其他人也最好尝试一下
标签: c++ dereference auto