Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何判断两个变量在编译时是否具有相同的类型?_C++_C++17 - Fatal编程技术网

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