std::conditional 和 std::conditional_t c++ 之间有什么区别

问题描述 投票:0回答:1

我在c++中找不到

std::conditional< >::type
std::conditional_t< >
之间的区别。

当我编译时

 using A = typename conditional< true, int, char>::type;                     
 using B = typename conditional_t< true, int, char>::type;     

错误:预期的嵌套名称说明符消失。 我无法使用

conditional
和嵌套,而
conditional_t
似乎可以嵌套。

c++ typetraits
1个回答
0
投票

由于 C++ 模板中的设计流程,事实证明为类型函数创建辅助别名很有用。

所以

std::conditional<bool, A, B>
是一个类型函数模板。它的
::type
A
B

std::conditional_t<bool, A, B>
是一个辅助别名,其计算结果为
std::conditional<bool, A, B>::type
。在大多数情况下,在
::type
上执行
std::conditional
需要您使用
typename
前缀来消除歧义,以便编译器知道
::type
是类型而不是值 - 但
std::conditional_t
会为您执行此操作,因为它在语法上是这样的已知是没有
typename
的类型。

在 C++

std
库中,几乎所有(也许是所有)具有
::type
成员的模板现在都带有一个帮助器
_t
模板来执行此操作,这使得一堆使用起来更好。

© www.soinside.com 2019 - 2024. All rights reserved.