新的auto关键字不能取得"引用"的类型啊,为什么?

zeliai zeliai 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我有下面一小段代码,我想用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关键字就是这样的特性,还是我的理解有问题?
望高手解释。
...全文
评论 7
收藏 已收藏
分享
返回顶部
zeliai
C++ 语言 65,214 成员 250,514 内容