C++ 如何判断两个变量在编译时是否具有相同的类型?
有没有比这更好的方法(或其他方法)来判断两个变量在编译时是否具有相同的类型:C++ 如何判断两个变量在编译时是否具有相同的类型?,c++,c++17,C++,C++17,有没有比这更好的方法(或其他方法)来判断两个变量在编译时是否具有相同的类型: auto var1 = ..; auto var2 = ..; static_assert(std::is_same<decltype(var1), decltype(var2)>::value); autovar1=。。; 自动变量2=。。; 静态断言(std::is\u same::value); 有没有更好的方法来判断两个变量在编译时是否具有相同的类型 不,这是路。当然,你可以使用@L.F.评论的
auto var1 = ..;
auto var2 = ..;
static_assert(std::is_same<decltype(var1), decltype(var2)>::value);
autovar1=。。;
自动变量2=。。;
静态断言(std::is\u same::value);
有没有更好的方法来判断两个变量在编译时是否具有相同的类型
不,这是路。当然,你可以使用@L.F.评论的std::is_same_v
,但这基本上是相同的理念
有没有其他方法来判断两个变量在编译时是否具有相同的类型
是的,如图所示
有没有更好的方法(或其他方法)来判断两个变量是否存在
编译时的类型与此类型相同:
auto var1 = ..;
auto var2 = ..;
static_assert(std::is_same<decltype(var1), decltype(var2)>::value);
那么,您可以使用helper变量模板
模板
inline constexpr bool是相同的,v=是相同的::值;
然后它就会变成
static_assert(std::is_same_v<decltype(var1), decltype(var2)>);
静态断言(std::is_same_v);
目前还不完全清楚实际问题是什么,但确保两个变量具有相同类型的最简单方法是这样编写:
int var1 = /* whatever */;
int var2 = /* whatever */; // var1 and var2 have the same type
如果您是auto
的粉丝,而不是编写实际的类型,那么您可以编写代码,只定义与第一个变量类型相同的第二个变量:
auto var1 = /* whatever */;
decltype(var1) var2 = /* whatever */; // var1 and var2 have the same type
另一种可能是编写一个模板函数,该函数接受两个相同类型的参数:
template <class Ty> void f(Ty var1, Ty var2) { /* do something */ }
f(var1_expression, var2_expression);
template void f(tyvar1,tyvar2){/*做点什么*/}
f(var1_表达式,var2_表达式);
如果
var1_expression
和var2_expression
的类型不相同,模板实例化将失败。是否要检查两个现有变量是否具有相同的类型,还是要声明第二个变量与第一个变量具有相同的类型?@gerum我认为问题的标题强烈建议第一:)怎么了?(除了从::value
更改为std::is_same_v
)如果您想要一种“更好”的方法,您应该解释这种方法的错误。另一方面,这实际上是一样的,但现在需要C++17而不是11