我需要找到除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
用法。
答案 0 :(得分:2)
uint32_t
(afaik always)是您编译的平台上可用的无符号32位整数类型的typedef。
您的情况typedef unsigned int uint32_t;
是通过uint32_t
所以unsigned int
与uint32_t
的类型相同,只是使用其他名称。
编辑:在我完成之前意外提交...
您可能有一些实现目标的可能性:
unsigned int
与unsigned int
的类型不同的平台。这可能有用,但你需要小心。例如,如果您使用MSVC,则编译器uint32_t
始终是32位无符号整数类型 - 无论是针对32位还是64位进行编译。unsigned int
重新定义为可以处理(赋值,强制转换,...)类型为uint32_t
的值的不同类型。这会让你意识到不确定的情况......然而,在代码中找到正确的位置以重新定义{{1}}可能很复杂,因此你的编译器会在你希望它失败的所有情况下失败。也许有人可以提出更好的解决方案。
答案 1 :(得分:1)
如果unsigned int
是32位,那么它和uint32_t
是相同的类型。您无法区分一种类型。
由于uint32_t
只是一种类型别名,因此与typedef x y
相当,您无法区分x
和y
。