【发布时间】:2018-04-08 16:09:28
【问题描述】:
在下面的代码中,我使用了size_t 作为函数参数并传递了负值。我已经使用以下命令在 GCC(Linux) 上编译了程序。
g++ -Wall size.cpp -o size
GCC 编译成功,没有警告,但结果不是我期望的:
size_t : 18446744073709551615
int : -1
代码:
#include <iostream>
void func1(size_t i)
{
std::cout << "size_t : " << i << std::endl;
}
void func2(int i)
{
std::cout << "int : " << i << std::endl;
}
int main()
{
func1(-1);
func2(-1);
return 0;
}
为什么编译器不会为带有size_t 的负值生成警告?
【问题讨论】:
-
size_t是无符号类型。 -
我建议你了解一下two's complement,这是一种(也是最常见的)负整数编码方式。
-
@Some程序员老兄为什么编译器不为size_t的负值生成警告?
-
您期待什么?请编辑您的问题。
标签: c++ c++11 gcc unsigned-integer size-t