gpt4 book ai didi

c++ - static_assert'ion long 和 int 是同一类型

转载 作者:太空宇宙 更新时间:2023-11-04 15:12:03 26 4
gpt4 key购买 nike

所以我从一个 API 中获取一个变量,我们将其称为 long foo 并将其传递给另一个将其作为值的 API:int bar .

我在 其中这些实际上是同一件事:https://learn.microsoft.com/en-us/cpp/cpp/data-type-ranges?view=vs-2017

但这会触发:

static_assert(is_same_v<decltype(foo), decltype(bar)>);

因为即使它们有效相同,但它们不是同一类型。除了使用数字限制库将 longint 匹配之外,是否有解决方法?

最佳答案

longint 是不同的基本类型。即使它们的大小相同,它们也不是同一类型,因此 is_same_v 永远不会是 true。如果您愿意,可以检查它们的尺寸是否相同,然后继续

static_assert(sizeof(foo) == sizeof(bar));

你甚至可以确保 foobar 是像这样的整数类型

static_assert(sizeof(foo) == sizeof(bar) && 
std::is_integral_v<decltype(foo)> &&
std::is_integral_v<decltype(bar)>);

您还可以确保它们具有相同的签名

static_assert(sizeof(foo) == sizeof(bar) && 
std::is_integral_v<decltype(foo)> &&
std::is_integral_v<decltype(bar)> &&
std::is_signed_v<decltype(foo)> == std::is_signed_v<decltype(bar)>);

关于c++ - static_assert'ion long 和 int 是同一类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54013016/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com