当我使用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) 我正在尝试使用GCC 4.7.1编译以下-std=c++11标志:
std::map<std::string, auto> myMap;
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一个对象来包含大量各种类型的Json数据(int string,bool)以及子结构(list,map),所以我无法在编译时声明字段值的类型时间,所以我以为我会使用auto关键字.
但是,当我尝试编译它时,我得到以下内容
error: invalid use of ‘auto’
error: template argument 2 is invalid
error: template argument 4 is invalid
error: unable to deduce ‘auto’ from ‘<expression error>’
Run Code Online (Sandbox Code Playgroud)
有没有一种特殊的方法可以auto用作模板参数,还是只是不可能?