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
可能会很复杂,因此编译器在您希望它失败的所有情况下都会失败也许有人能想出一个更好的解决方案。如果
unsigned int
是32位,那么它和uint32\u t
是相同的类型。你无法区分一种类型
由于
uint32\u t
只是一个类型别名,这与typedef x y
相当,在您的平台上无法区分x
和y,uint32\u t是一个无符号整数。它是同一类型。我知道@richardhogesi建议暂时切换到64位平台。通常所有隐式类型转换都会在这些情况下中断。使用clang中的libtool可能会有所帮助,但需要编写代码以在ASTunsigned int
中搜索。如果您的唯一目标是清理当前代码以消除对unsigned int
的所有使用,为什么不简单地对其执行全局搜索呢?