将size_t转换为unsigned int
converting from size_t to unsigned int
从size_t转换为unsigned int是否可能导致溢出?
size_t x = foo ( ) ; // foo ( ) returns a value in type size_t
unsigned int ux = (unsigned int ) x ;
ux == x // Is result of that line always 1 ?
语言:c++
平台:any
是的,这是可能的,size_t
和int
不一定有相同的大小。实际上,64位size_t
s和32位int
s是很常见的。
c++ 11草案N3290在§18.2/6中说:
另一方面,类型size_t是一个实现定义的无符号整数类型,其大到足以包含任何对象的字节大小。
unsigned int
只需要能够存储从0到UINT_MAX
的值(在<climits>
中定义并遵循C标准头<limits.h>
),仅保证至少为65535 (216-1)。
是的,在某些平台上可能会发生溢出。例如,size_t
可以定义为unsigned long
,它可以很容易地大于unsigned int
。
相关文章:
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- <Windows>为什么 std::thread::native_handle 返回类型为"long long unsigned int"的值,而不是 void*(又名 HANDLE)?
- 定义 uint= "unsigned int" 没有像我在 Visual Studio 中使用 nvcc 时预期的那样应用
- 对 '(const Y) (int&, std::mersenne_twister_engine<long unsigned int,
- 错误:'class std::unique_ptr<std::set<long unsigned int> >'没有名为 'size' 的成员
- 正确语法,用于统一初始化名称中带有空格的类型的临时,如unsigned int
- 按值对 std::unordered_map<std:::string, std::atomic<unsigned int>> 进行排序
- 编译Qt项目给出了对运算符delete(void*,unsigned int)的未定义引用
- 错误:无法将'uint8* {aka unsigned int*}'转换为"常量emxArray_uint8_T*"?
- 没有匹配函数来调用"std::basic_ofstream<char>::write(std::string*, long long unsigned int)"
- 初始化unsigned int至0
- 为什么"unsigned int" + "unsigned int"返回"unsigned int"?
- 对 'WindowProc(HWND__*, unsigned int, unsigned int, long)@16' 的未定义引用
- {app.exe!_com_error::'vector delete destructor'(unsigned int)}
- flann/util/serialization.h class std::unordered_map<unsigned int, std::vector<unsigned int>
- 从'byte* {aka unsigned char*}'到'dword {aka长unsigned int}'失去精度
- unsigned int/signed int/long-long:无法解释的输出
- 对"uint32_t"的暧昧呼唤"long unsigned int"
- 带有unsigned int参数的C++函数在使用negative调用它时会得到奇怪的结果
- 从'uint64_t'转换为'unsigned int'