繁体   English   中英

如何区分unsigned int和uint32_t

[英]How to distinguish unsigned int from uint32_t

我需要找到所有使用uint32_t以外的size代码。 我用自己的uint32_t制作了自定义的SizeStub类型。 并开始代码替换。 为了避免我已经拥有uint32_t代码的错误警报,我添加了下一个运算符:

template <typename T>
SizeStub& operator += (const T& in)
{
    static_assert(std::is_same<T, decltype(_value)>::value, "NOT SAME");
    this->_value += in;
    return *this;
}

二进制运算符等

一切都很棒。 我有除了uin32_t和... unsigned int之外的所有类型的编译时警报。 所以。 如何区分unsigned int哪个不是固定大小?

gcc版本4.8.2

PS当我将所有编译时警报修复到uint32_t时,计划是替换所有SizeStub使用。

uint32_t是(afaik always)您编译的平台上可用的无符号32位整数类型的typedef。

在你的情况下, uint32_t是通过typedef unsigned int uint32_t;定义的typedef unsigned int uint32_t;

因此uint32_tunsigned int类型相同,只是使用其他名称。

编辑:在我完成之前意外提交...

您可能有一些实现目标的可能性:

  1. 您可以切换到uint32_tunsigned int类型不同的平台。 这可能有用,但你需要小心。 例如,如果您使用MSVC作为编译器, unsigned int始终是32位无符号整数类型 - 无论是针对32位还是64位进行编译。
  2. 您可以尝试将uint32_t重新定义为可以处理(赋值,强制转换,...​​) unsigned int类型的值的不同类型。 这会让你意识到不可靠的情况......然而,在代码中找到正确的位置以重新定义uint32_t可能很复杂,因此编译器将在你希望它失败的所有情况下失败。
  3. 除了2:你可以临时(!)改变原来的typedef。 也许您想要建立一个单独的构建环境来执行此操作,因此您的“真实”构建环境不会受其影响。

也许有人可以提出更好的解决方案。

如果unsigned int是32位,那么它和uint32_t相同的类型 你不能区分一种类型。

由于uint32_t只是一个类型别名,因此与typedef xy ,你无法区分xy

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM