次のコードでは、関数の引数としてsize_t
を使用し、負の値を渡しました。以下のコマンドを使ってGCC(Linux)上でプログラムをコンパイルしました。コンパイラがsize_tで負の値の警告を生成しないのはなぜですか?
g++ -Wall size.cpp -o size
GCCは警告なし成功したコンパイルが、結果は私が期待されていないものを:
size_t : 18446744073709551615
int : -1
コード:コンパイラがsize_t
と負の値についての警告を生成しないのはなぜ
#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'は符号なしタイプです。 – tkausl
負の整数をエンコードする(そして最も一般的な)方法である[* 2の補数*](https://en.wikipedia.org/wiki/Two's_complement)について少し学ぶことをお勧めします。 –
@ Some programmer dudeコンパイラがsize_tで負の値の警告を生成しないのはなぜですか? – rsp