【发布时间】:2015-02-17 21:03:10
【问题描述】:
我想(想)我理解auto。 decltype 也一样。但是,在 C++14 中,可以将 decltype(auto) 之类的东西作为函数的返回类型。考虑以下几点:
decltype(auto) foo()
{
int m = 1;
return m;
}
返回类型是int,一切都有意义。
然而,
decltype(auto) foo()
{
int m = 1;
return (m);
}
返回int&(即引用int)。
我完全不知道为什么会发生这种情况,为什么这些括号有任何区别!?希望有人能对此有所了解。
PS:我也标记了c++,因为检查c++ 标记的人比c++14 多得多。
【问题讨论】:
-
因为
decltype((m))也是一个左值引用。 -
我是这么认为的,所以把括号放在周围使它成为左值?即,如果我执行
return (Foo()),是否会被视为返回对Foo()的引用? -
@vsoftco 不,
decltype(e)的规则取决于e是否带括号。这并不意味着在别处添加括号会有这种效果 -
规则说裸标识符不会产生左值,但任何其他左值表达式都会产生。因此,在裸标识符周围加上括号会将其变成“其他”左值表达式。
Foo()不是一个裸标识符,所以括号没有区别。 -
@kek,谢谢,我明白现在发生了什么。