我写了一个测试程序:
#include <iostream>
#include <type_traits>
using namespace std;
template<class T>
void f(T&& t)
{
cout<<is_const<T>()<<endl;
//++t;
}
int main() {
const int i=0;
f(i);
return 0;
}
它输出了“0”,显示
T
不是常量!这很奇怪。然后我修改了f
:template<class T>
void f(T&& t)
{
cout<<is_const<T>()<<endl;
++t;
}
然后出现了编译错误,表示我们正在修改只读的t
。
那么,t
是否可以被修改呢?在我的程序中有什么误解吗?
is_const
具有适当的转换运算符。 - juanchopanzacout<<is_const<T>()<<endl;
语句中,什么会将其强制转换为布尔类型? - xaxxonis_const<std::remove_reference<T>>::value
- M.Mostream& operator<<(ostream&, is_const<T>)
,所以选择的余地不大。 - juanchopanzaT
不是引用类型 - 那么可以阅读Scott Meyers所著的《Effective Modern C++》,这本书完整而易懂地讲解了类型推断以及更多相关话题。 - davidbak