3 回答

TA貢獻1777條經驗 獲得超3個贊
規則很簡單:這就是您聲明的方式。
int i = 5;
auto a1 = i; // value
auto & a2 = i; // reference
下一個例子證明了這一點:
#include <typeinfo>
#include <iostream>
template< typename T >
struct A
{
static void foo(){ std::cout<< "value" << std::endl; }
};
template< typename T >
struct A< T&>
{
static void foo(){ std::cout<< "reference" << std::endl; }
};
float& bar()
{
static float t=5.5;
return t;
}
int main()
{
int i = 5;
int &r = i;
auto a1 = i;
auto a2 = r;
auto a3 = bar();
A<decltype(i)>::foo(); // value
A<decltype(r)>::foo(); // reference
A<decltype(a1)>::foo(); // value
A<decltype(a2)>::foo(); // value
A<decltype(bar())>::foo(); // reference
A<decltype(a3)>::foo(); // value
}
輸出:
value
reference
value
value
reference
value

TA貢獻1803條經驗 獲得超6個贊
無論您從右側(等于“ =”)獲得什么,都永遠不會成為參考。更具體地說,表達式的結果永遠不會是引用。因此,請注意示例中結果之間的差異。
#include <typeinfo>
#include <iostream>
template< typename T >
struct A
{
static void foo(){ std::cout<< "value" << std::endl; }
};
template< typename T >
struct A< T&>
{
static void foo(){ std::cout<< "reference" << std::endl; }
};
float& bar()
{
static float t=5.5;
return t;
}
int main()
{
auto a3 = bar();
A<decltype(bar())>::foo(); // reference
A<decltype(a3)>::foo(); // value
}
- 3 回答
- 0 關注
- 560 瀏覽
添加回答
舉報