我想(想)我明白auto
。同樣約decltype
。然而,在C++ 14中,可以有一些像decltype(auto)
這樣的暗含的東西作爲函數的返回類型。考慮以下幾點:爲什麼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))'也是一個左值參考。 – 0x499602D2 2014-12-18 23:18:46
我這麼認爲,所以把括號括起來使它成爲左值?也就是說,如果我做'return(Foo())',它是否被認爲是返回對'Foo()'的引用? – vsoftco 2014-12-18 23:20:14
@vsoftco否,「decltype(e)」的規則取決於「e」是否被括號括起來。這並不意味着在別處添加括號會產生這種影響 – 2014-12-18 23:22:34