从我以前学习C++的所有材料来看,auto一直是一个奇怪的存储持续时间说明符,它没有任何用途.但就在最近,我遇到的代码将其用作类型名称.出于好奇,我尝试了它,它假设我碰巧分配给它的类型!
突然间,STL迭代器以及使用模板的任何东西都比写入容易10倍.感觉就像我正在使用像Python这样的"有趣"语言.
这个关键词一直在哪里?你会说它是视觉工作室独有的还是不可移植的?
当我使用C++ 11时auto,关于它是否会解析为值或引用的类型推导规则是什么?
例如,有时很明显:
auto i = v.begin(); // Copy, begin() returns an iterator by value
Run Code Online (Sandbox Code Playgroud)
这些不太清楚:
const std::shared_ptr<Foo>& get_foo();
auto p = get_foo(); // Copy or reference?
static std::shared_ptr<Foo> s_foo;
auto sp = s_foo; // Copy or reference?
std::vector<std::shared_ptr<Foo>> c;
for (auto foo: c) { // Copy for every loop iteration?
Run Code Online (Sandbox Code Playgroud)