在函数的返回类型之前使用' typename '关键字的目的是什么? 在std::remove_reference<T>::type中,::type依赖于模板类型T。编译器(直到C++20)不知道这一点,需要告诉它,以便编译器理解它是一个类型。这就是为什么typename关键字是。 阅读更多:When is the "typename" keyword necessary? 第二个std::remove_reference_t<T>是template type alias,看起来像:
template< class T >
using remove_reference_t = typename remove_reference<T>::type; (since C++14)
2条答案
按热度按时间uqzxnwby1#
在函数的返回类型之前使用'
typename
'关键字的目的是什么?在
std::remove_reference<T>::type
中,::type
依赖于模板类型T
。编译器(直到C++20)不知道这一点,需要告诉它,以便编译器理解它是一个类型。这就是为什么typename
关键字是。阅读更多:When is the "typename" keyword necessary?
第二个
std::remove_reference_t<T>
是template type alias,看起来像:字符串
并允许你保存一些打字(aka。为了方便)。
如果我们根本不使用它,有什么不同?
Since C++20, you can simply write with or without
typename
keyword,在此之前,编译器可能不会将其解释为类型。阅读更多:Why don't I need to specify "typename" before a dependent type in C++20?
wj8zmpe12#
https://en.cppreference.com/w/cpp/keyword/typename
(2nd链接中的点)
当你使用
foo_type::bar
时,编译器不能确定bar
是什么,可能是一个成员变量或类型或其他任何东西。因此,你必须在typename
之前提示编译器它是一个类型名。