新的auto关键字不能取得"引用"的类型啊,为什么?
我有下面一小段代码,我想用auto关键字返回一个引用,然后改变这个引用的值。我发现不成功。
这段代码的运行结果是10,30。我期待的结果是20,30
我在新版的GCC/VC上面都测试过了,一样的结果。为什么auto得不到引用的类型,而decltype可以呢?
然后还发现,即使把auto那句话改成使用了forward,也还是不能得到引用:
这是为什么呢? 是auto关键字就是这样的特性,还是我的理解有问题?
望高手解释。
class A{
int m_i;
public:
A():m_i(10){}
int& Get(){return m_i;}
};
int main(int argc, char* argv[])
{
A obj;
auto i=obj.Get();
i=20;
printf("%d\n",obj.Get());
decltype(obj.Get()) ii=obj.Get();
ii=30;
printf("%d\n",obj.Get());
return 0;
}
这段代码的运行结果是10,30。我期待的结果是20,30
我在新版的GCC/VC上面都测试过了,一样的结果。为什么auto得不到引用的类型,而decltype可以呢?
然后还发现,即使把auto那句话改成使用了forward,也还是不能得到引用:
auto i=forward<int&>(obj.Get());
这是为什么呢? 是auto关键字就是这样的特性,还是我的理解有问题?
望高手解释。

...全文
相关推荐
你必须知道的495个C语言问题.pdf
#### 关键字auto到底有什么用途?`auto`在C语言中用于声明变量,并默认其作用域为局部。
C++点滴(初学者)
**2.4 auto**`auto` 关键字用于根据初始化表达式的类型自动推导变量的类型。这在处理模板或复杂的类型时非常有用,可以使代码更加简洁。
三十分钟快速掌握C# 6.0知识点
值得注意的是,表达式体不能包含`return`关键字,而Lambda表达式则可以。4.
你必须知道的495个C语言问题
**1.5 关键字auto到底有什么用途?**`auto`关键字最初用于声明变量时指示它的存储类型为自动存储期,即当变量不再被使用时,它会被销毁。
C语言常见问题集
难道在C语言中一个结构不能包含指向自己的指针吗?**在C语言中定义自引用结构时,你需要先声明结构类型再定义它。


