是否存在他们行为不同的情况。我将它们与 constexpr 一起使用
template<typename T>
T* getptr(){
if constexpr (std::is_same<T,int>::value) { return someptr;}
}
通过搜索和编译没有发现任何差异,运行代码给出相同的结果。我很好奇在任何情况下它的行为是否有所不同,这并不是微不足道的?
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
。