在任何场景下使用 std::is_same<T,U>::value 和 std::is_same_v<T,U> 有什么区别吗?

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

是否存在他们行为不同的情况。我将它们与 constexpr 一起使用

template<typename T>
T* getptr(){ 
    if constexpr (std::is_same<T,int>::value) { return someptr;}
}

通过搜索和编译没有发现任何差异,运行代码给出相同的结果。我很好奇在任何情况下它的行为是否有所不同,这并不是微不足道的?

c++ c++17
1个回答
0
投票

正如您在文档中看到的,

std::is_same_v
定义为:

template< class T, class U >
constexpr bool is_same_v = is_same<T, U>::value;

因此,出于所有实际目的,使用

is_same<T,U>::value
is_same_v<T,U>
的效果应该没有区别。

更多

is_same_v
作为方便的API提供,使您能够编写更简洁的代码。

唯一的区别是

is_same_v
仅适用于 C++17,因此如果您使用旧版本编译代码,则必须求助于
is_same<>::value

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