C++ “之间的区别是什么?”;长整数a=2“;及;int a=2L";?

C++ “之间的区别是什么?”;长整数a=2“;及;int a=2L";?,c++,C++,或者无符号整数a=2和整数a=2U 或者如果longchar='a'抛出错误,那么为什么不charc=L'a' 而且 sizeof(a)运算符为int a=2和int a=2L提供相同的值,为什么?大小不应该加倍吗 “长整数a=2”和“整数a=2L”之间有什么区别 前者将变量a定义为从值2初始化类型long int,后者将其定义为从值2L初始化类型int。初始化器隐式转换为变量的类型,并且不影响变量的类型 或者长字符c='a'和字符c=L'a' 前者将变量c定义为从值a'初始化类型long ch

或者
无符号整数a=2
整数a=2U

或者如果
longchar='a'
抛出错误,那么为什么不
charc=L'a'

而且

sizeof(a)
运算符为
int a=2
int a=2L
提供相同的值,为什么?大小不应该加倍吗

“长整数a=2”和“整数a=2L”之间有什么区别

前者将变量
a
定义为从值
2
初始化类型
long int
,后者将其定义为从值
2L
初始化类型
int
。初始化器隐式转换为变量的类型,并且不影响变量的类型

或者
长字符c='a'
字符c=L'a'


前者将变量
c
定义为从值
a'
初始化类型
long char
,后者将其定义为从值
L'a'
初始化类型
char
。由于类型
long char
不存在,因此前者是一个错误。
L'a'
的类型称为
wchar\u t
,而不是
long char
,在后一种情况下再次转换为变量的类型

或者
无符号整数a=2
整数a=2U

前者将变量
a
定义为从值
2
初始化类型
无符号int
,后者将其定义为从值
2U
初始化类型
int
。同样,初始化器不会影响变量的类型

而且

sizeof(a)
运算符为
int a=2
int a=2L
提供相同的值,为什么?大小不应该加倍吗


因为它们都定义了<代码> <代码>类型<代码> int <代码>,<代码> siZeOf(a)< /C++ >应给出 siZeOf(int)< />代码> .< /p> C++中,所有变量都用类型声明。C++指定显式的类型,但不强制初始化变量。

long int a = 2;
long int b = 2L;
long int c;
此代码生成3个相同类型的变量
long int

int a = 2;
int b = 2L;
int c;
此代码生成3个相同类型的变量
int

int a = 2;
int b = 2L;
int c;
类型的概念大致上是“变量可以接受的所有值的集合”。它不(也不能)依赖于变量的初始值—无论是
2
还是
2L
或其他任何变量

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

int a = 2L;
long int b = 2;
它们之间的区别在于它们可以在代码中进一步做什么。例如:

a += 2147483647; // most likely, overflow
b += 2147483647; // probably calculates correctly
int x = 2.5;
变量的类型从定义时起不会改变

另一个例子:

a += 2147483647; // most likely, overflow
b += 2147483647; // probably calculates correctly
int x = 2.5;
这里,
x
的类型是
int
,它被初始化为2。尽管初始化器有不同的类型,但是C++对声明类型的代码< >代码> x>代码>更重要。

1 BTW C++支持“类型推理”;如果希望初始值设定项的类型很重要,可以使用它:

auto a = 2L; // "a" has type "long int"
auto b = 2; // "b" has type "int"
#包括
int main()
{
int a1=2;//a1=2
int a2=2L;//a2=2
int a3=2.5673;//a3=2
int a4='A';/a4=65
返回0;
}
这里,即使
a3
a4
的值分别是
float
char
,该值也将转换为int作为
a3
a4
声明为
int
。同样地,
a2
的值将被转换为
int
,即使该值被设置为2L。
变量不依赖于值,而是依赖于类型声明
int
a将始终是一个整数,无论它的值是什么。

long char
不存在。在
int a=2L处,您不会收到编译器警告“将long赋值给int”?不,我没有收到任何错误或警告(我正在使用代码块)@AvinashKumarShudhanshu他没有询问错误。他询问了有关警告的问题。变量的大小是由其类型设置的,而不是由存储在其中的值设置的。帮帮我,正是在这一点上我感到困惑的是,初始化器隐式转换为变量的类型,并且不影响变量的类型。如果它不起作用,那么它有什么用呢。由于内存是根据变量的类型分配的,那么2L(int-long-type)如何适应只具有int大小的内存块,@AvinashKumarShudhanshu
int a=2L的作用与
inta=2完全相同。转换的是值,而不是组成该值的字节。将
2L
转换为type
int
只会产生
2
。明白了,事情是,
int a=2L
,虽然a用长int类型的值“2”初始化,但a仍然是int类型。一种类型的变量可以用另一种类型的值初始化,我尝试过:
auto a=2L它给出错误:“a”没有命名类型为什么?可能您使用的是旧编译器。这种使用
auto
的语法相对较新(C++11,现在已经5年了)。有关如何修复此问题的提示,请参见和。