gpt4 book ai didi

c++ - add_lvalue_reference_t 和 T& 之间的区别

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:41:39 27 4
gpt4 key购买 nike

假设您有一个模板参数 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> and const volatile T
  • add_const_t<T> and const T
  • add_volatile_t<T> and volatile T

没有区别; add_const<T>::type的定义|只是T const ,例如。

  • add_lvalue_reference_t<T> and T&
  • add_rvalue_reference_t<T> and T&&

T&T&&T 时是病式的是简历 void , 但这些模板格式正确,只是返回原始类型。

  • add_pointer_t<T> and T*?

add_pointer_t<T>相当于std::remove_reference<T>::type* .也就是说,如果 T是引用类型,它给出了指向引用类型的指针。另一方面,T*将是错误格式的,因为您不能拥有指向引用的指针。

你应该使用哪个?

  • 通常,别名模板可用于防止扣除T。 .当然,也就是说,如果你要减分,你就应该避开它们。
  • 别名模板可以用作将类型转换作为参数的模板的模板模板参数。
  • 别名模板的行为不同于 T* 等替代方案在通用代码中很有用,因为它们“做正确的事”。例如,如果 TT&& 类型的参数推导出来, 然后 T*当参数是左值时做错事,因为它试图声明一个指向左值引用的指针。但是std::add_pointer_t<T>将给出一个指向参数实际类型的指针。

关于c++ - add_lvalue_reference_t<T> 和 T& 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48774319/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com