我需要找到除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

附言当我将所有编译时间警报修复到SizeStub时,该计划是替换所有uint32_t的用法。

最佳答案

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

在您的情况下,通过uint32_t定义typedef unsigned int uint32_t;
因此,uint32_tunsigned int的类型相同,只是使用另一个名称。

编辑:在我完成之前不小心提交了...

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

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

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

    关于c++ - 如何区分unsigned int和uint32_t,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33518285/

    10-11 22:54
    查看更多