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++ >应给出
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大小的内存块,@AvinashKumarShudhanshuint a=2L代码>的作用与inta=2完全相同代码>。转换的是值,而不是组成该值的字节。将2L
转换为typeint
只会产生2
。明白了,事情是,int a=2L
,虽然a用长int类型的值“2”初始化,但a仍然是int类型。一种类型的变量可以用另一种类型的值初始化,我尝试过:auto a=2L代码>它给出错误:“a”没有命名类型为什么?可能您使用的是旧编译器。这种使用auto
的语法相对较新(C++11,现在已经5年了)。有关如何修复此问题的提示,请参见和。