如何区分unsigned int和uint32_t

时间:2015-11-04 09:37:17

标签: c++ c++11

我需要找到除size以外的uint32_t使用的所有代码。 我已在内置SizeStub自定义uint32_t类型。并开始代码替换。为了避免我已经拥有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

P.S。当我将所有编译时警报修复到SizeStub时,该计划将替换所有uint32_t用法。

2 个答案:

答案 0 :(得分:2)

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

您的情况typedef unsigned int uint32_t;是通过uint32_t

定义的

所以unsigned intuint32_t的类型相同,只是使用其他名称。

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

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

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

答案 1 :(得分:1)

如果unsigned int是32位,那么它和uint32_t相同的类型。您无法区分一种类型。

由于uint32_t只是一种类型别名,因此与typedef x y相当,您无法区分xy