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
C++ 如何区分无符号int和uint32\t_C++_C++11 - Fatal编程技术网

C++ 如何区分无符号int和uint32\t

C++ 如何区分无符号int和uint32\t,c++,c++11,C++,C++11,我需要找到除uint32\u t以外的所有用作size的代码。 我已经用uint32\u t内部创建了自定义的sizesub类型。并开始代码替换。为了避免在我已有uint32\t的代码上出现错误警报,我添加了下一个操作符: template <typename T> SizeStub& operator += (const T& in) { static_assert(std::is_same<T, decltype(_value)>::value

我需要找到除
uint32\u t
以外的所有用作
size
的代码。 我已经用
uint32\u t
内部创建了自定义的
sizesub
类型。并开始代码替换。为了避免在我已有
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;
}
模板
SizeSub和运算符+=(常量T和in)
{
静态断言(std::is_same::value,“NOT same”);
此->\u值+=in;
归还*这个;
}
还有二进制运算符等

一切都很好。除了
uin32\u t
和<代码>无符号整数。 所以如何区分非固定大小的
无符号int

gcc版本4.8.2

另外,当我将所有编译时警报修复到
uint32\u t
uint32\u t
uint32\u t
上时,计划替换所有的
sizesub
用法(afaik始终)是编译平台上可用的无符号32位整数类型的typedef

在您的情况下,
uint32\u t
是通过
typedef unsigned int uint32\u t定义的

因此,
uint32\u t
unsigned int
的类型相同,只是使用了另一个名称

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

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

  • 您可以切换到
    uint32\u t
    unsigned int
    类型不同的平台。这可能有效,但你需要小心。例如,如果使用MSVC作为编译器,则无论编译为32位还是64位,unsigned int
  • 始终是32位无符号整数类型
  • 您可以尝试将
    uint32\u t
    重新定义为可以处理(赋值、强制转换等)类型为
    无符号int
    的值的不同类型。这会让你知道不合格的案例。。。然而,在代码中找到正确的位置来重新定义
    uint32\u t
    可能会很复杂,因此编译器在您希望它失败的所有情况下都会失败
  • 除了2:您可以临时(!)更改原始的typedef。也许你想建立一个独立的构建环境来实现这一点,这样你的“真实”构建环境就不会受到它的影响

  • 也许有人能想出一个更好的解决方案。

    如果
    unsigned int
    是32位,那么它和
    uint32\u t
    是相同的类型。你无法区分一种类型


    由于
    uint32\u t
    只是一个类型别名,这与
    typedef x y
    相当,在您的平台上无法区分
    x
    y

    ,uint32\u t是一个无符号整数。它是同一类型。我知道@richardhogesi建议暂时切换到64位平台。通常所有隐式类型转换都会在这些情况下中断。使用clang中的libtool可能会有所帮助,但需要编写代码以在AST
    unsigned int
    中搜索。如果您的唯一目标是清理当前代码以消除对
    unsigned int
    的所有使用,为什么不简单地对其执行全局搜索呢?