因为使用了文本替换宏而不是typedef,所以
const int& x
.
const int&
不是一个
const
类型,所以
remove_const
什么都不做。
改变是不可能的
康斯特
-引用的正确性,因为C++没有任何引用的变异操作。
如果你想移除最里面的
康斯特
(何处)
const T
如果是这样的话:
template <typename T>
struct remove_deepest_const_impl { typedef T type; };
template <typename T>
struct remove_deepest_const_impl<const T> { typedef T type; };
template <typename T>
struct remove_deepest_const_impl<T*>
{ typedef typename remove_deepest_const_impl<T>::type* type; };
template <typename T>
struct remove_deepest_const_impl<T* const>
{ typedef typename remove_deepest_const_impl<T>::type* const type; };
template <typename T>
struct remove_deepest_const_impl<T&>
{ typedef typename remove_deepest_const_impl<T>::type& type; };
template <typename T>
struct remove_deepest_const_impl<T&&>
{ typedef typename remove_deepest_const_impl<T>::type&& type; };
template <typename T> using remove_deepest_const
= typename remove_deepest_const_impl<T>::type;
演示:
https://rextester.com/OUTIN28468