“long int a=2”和“int a=2L”有什么区别?

Cod*_*ari -3 c++

是有什么区别unsigned int a=2int a=2U

或者如果long char c='a'抛出错误,那么为什么不char c=L'a'

还,

sizeof(a)运算符为int a=2and提供相同的值int a=2L,为什么?尺寸不应该增加一倍。

ana*_*lyg 5

在 C++ 中,所有变量都用类型声明。C++ 强制1您明确指定类型,但根本不强制您初始化变量。

long int a = 2;
long int b = 2L;
long int c;
Run Code Online (Sandbox Code Playgroud)

此代码生成 3 个相同类型的变量long int

int a = 2;
int b = 2L;
int c;
Run Code Online (Sandbox Code Playgroud)

此代码生成 3 个相同类型的变量int

类型的概念大致是“变量可以采用的所有值的集合”。它不会(也不能)因变量的初始值-无论是22L或其他任何东西。

所以,如果你有两个不同类型但值相同的变量

int a = 2L;
long int b = 2;
Run Code Online (Sandbox Code Playgroud)

它们之间的区别在于它们可以在代码中做什么。例如:

a += 2147483647; // most likely, overflow
b += 2147483647; // probably calculates correctly
Run Code Online (Sandbox Code Playgroud)

变量的类型从它被定义的那一刻起就不会改变。

另一个例子:

int x = 2.5;
Run Code Online (Sandbox Code Playgroud)

这里的类型xint,并且被初始化为2。尽管初始化器的类型不同,但C++认为声明类型x“更重要”。


1 BTW C++ 支持“类型推断”;如果您希望初始化器的类型很重要,则可以使用它:

auto a = 2L; // "a" has type "long int"
auto b = 2; // "b" has type "int"
Run Code Online (Sandbox Code Playgroud)