作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
假设您有一个模板参数 T
.
有什么区别
add_cv_t<T>
和 const volatile T
add_const_t<T>
和 const T
add_volatile_t<T>
和 volatile T
add_lvalue_reference_t<T>
和 T&
add_rvalue_reference_t<T>
和 T&&
add_pointer_t<T>
和 T*
?我为什么要使用 add_rvalue_reference_t<T>
而不是 T&&
例如。什么时候选择哪个有什么规则吗?
最佳答案
add_cv_t<T>
andconst volatile T
add_const_t<T>
andconst T
add_volatile_t<T>
andvolatile T
没有区别; add_const<T>::type
的定义|只是T const
,例如。
add_lvalue_reference_t<T>
andT&
add_rvalue_reference_t<T>
andT&&
T&
和 T&&
在 T
时是病式的是简历 void
, 但这些模板格式正确,只是返回原始类型。
add_pointer_t<T>
andT*
?
add_pointer_t<T>
相当于std::remove_reference<T>::type*
.也就是说,如果 T
是引用类型,它给出了指向引用类型的指针。另一方面,T*
将是错误格式的,因为您不能拥有指向引用的指针。
你应该使用哪个?
T
。 .当然,也就是说,如果你要减分,你就应该避开它们。T*
等替代方案在通用代码中很有用,因为它们“做正确的事”。例如,如果 T
从 T&&
类型的参数推导出来, 然后 T*
当参数是左值时做错事,因为它试图声明一个指向左值引用的指针。但是std::add_pointer_t<T>
将给出一个指向参数实际类型的指针。关于c++ - add_lvalue_reference_t<T> 和 T& 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48774319/
假设您有一个模板参数 T . 有什么区别 add_cv_t和 const volatile T add_const_t和 const T add_volatile_t和 volatile T add_
假设您有一个模板参数 T . 有什么区别 add_cv_t和 const volatile T add_const_t和 const T add_volatile_t和 volatile T add_
我是一名优秀的程序员,十分优秀!