2017-01-29 492 views
-3

或者什么区别unsigned int a=2int a=2U“long int a = 2”和“int a = 2L”有什么区别?

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

此外,

sizeof(a)运营商给出了int a=2int a=2L相同的值,为什么呢?不应该增加一倍。

+4

'长char'不存在:如果你想初始化的类型是很重要的,你可以使用它。 – interjay

+1

难道你不会在'int a = 2L;'得到一个编译器警告“将long分配给int”吗? – rustyx

+0

不,我没有得到任何错误或警告(我使用的代码块) – CodeChari

回答

4

在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

类型的构思是大致“该组中的变量可以取所有值的”。它不(也不能)取决于变量的初始值 - 无论是2还是2L或其他。

所以,如果你有不同的类型,但相同的值

int a = 2L; 
long int b = 2; 

的两个变量之间的区别是什么,他们可以在代码进一步。例如:

a += 2147483647; // most likely, overflow 
b += 2147483647; // probably calculates correctly 

变量类型的将不会从它的开始定义的点改变。

又如:

int x = 2.5; 

这里的x类型为int,即使初始化有不同的类型它初始化为2,C++认为“更重要”的x申报类型。


BTW C++有 “类型推断” 支持;

auto a = 2L; // "a" has type "long int" 
auto b = 2; // "b" has type "int" 
+0

知道了, 的是,'INT A = 2L',虽然与值“2”,这是长整型的初始化,一个仍然整数类型。 一个类型的变量可以用另一个类型的值初始化 – CodeChari

+0

我试过了:'auto a = 2L;'它给出错误:**'a'没有命名类型**为什么? – CodeChari

+0

也许你正在使用一个旧的编译器。这种使用'auto'的语法比较新(C++ 11,5岁)。另请参阅[这里](http://stackoverflow.com/q/10363646/509868)和[这里](http://stackoverflow.com/q/37582094/509868)提示如何解决这个问题。 – anatolyg

3

What is difference between "long int a=2" and "int a=2L"?

前者定义了一个变量a为具有从值2初始化类型long int,后者将其定义为具有与所述值2L初始化类型int。初始化程序隐式转换为变量的类型,并不影响变量的类型。

Or what is the difference between long char c='a' and char c=L'a'

前者定义了一个变量c为具有从值'a'初始化类型long char,后者将其定义为具有与所述值L'a'初始化类型char。由于long char类型不存在,前者是错误的。 L'a'的类型被称为wchar_t,而不是long char,并且在后一种情况下又被转换为变量的类型。

or what is the difference between unsigned int a=2 and int a=2U

前者定义了一个变量a为具有从值2初始化类型unsigned int,后者将其定义为具有与所述值2U初始化类型int。再一次,初始化不影响变量的类型。

Also,

sizeof(a) operator gives the same value for int a=2 and int a=2L , why? Shouldn't the size be doubled.

,因为它们都定义为aintsizeof(a)应该给sizeof(int)两种。

+0

帮助我,这正是我困惑的地方**初始化程序隐式转换为变量的类型,并且不影响变量的类型。**如果它不起作用,那么它有什么用处。 和 由于内存是根据变量的类型分配的,那么2L(int long类型)如何容纳在只有int大小的内存块中, – CodeChari

+0

@AvinashKumarShudhanshu'int a = 2L;'做的事情和'int a = 2;'。这是正在转换的值,而不是构成该值的字节。将'2L'转换为'int'类型只会产生'2'。 – hvd

相关问题