我們看到std::is_const<const int&>::value
總是false。所以這條指令#1永遠不會執行。如何編寫is_reference_const函數,make is_reference_const <const int&> :: value`是ture
template <typename T> void g(T&& val)
{
if(is_const<T>::value)
{
#1 if(is_lvalue_reference<T>::value)cout<<"const l reference"<<endl;
else if(is_rvalue_reference<T>::value)cout<<"const r reference"<<endl;
else cout<<"const int"<<endl;
}else
{
if(is_lvalue_reference<T>::value)cout<<"l reference"<<endl;
else if(is_rvalue_reference<T>::value)cout<<" r reference"<<endl;
else cout<<" int"<<endl;
}
}
爲什麼STL沒有提供is_reference_const此問題的功能?我們可以寫這個功能呢? 最後,這個函數如is_reference_const<const int&>::value
是真的。
隨意撰寫提案。儘管如此,製作你自己的應該是微不足道的。根據你的描述,你應該能夠將'std :: remove_reference'和'std :: is_const'結合起來。 – chris 2014-11-21 03:06:05
謝謝。但如果(is_reference :: value) { cout <<「is reference」<< endl; if(is_const > :: value){cout <<「const reference」<< endl;} }不起作用。 –
2014-11-21 03:13:20
我對這兩者的組合沒有任何問題。 – chris 2014-11-21 03:17:49