或unsigned int a=2
和int a=2U
如果long char c='a'
引发错误,那么为什么不char c=L'a'
。
此外,
sizeof(a)
运算符为int a=2
和int a=2L
提供相同的值,为什么?不应该把规模翻倍。
答案 0 :(得分:4)
在C ++中,所有变量都是用类型声明的。 C ++强制 1 你明确指定类型,但不会强迫你初始化变量。
long int a = 2;
long int b = 2L;
long int c;
此代码生成3个相同类型long int
的变量。
int a = 2;
int b = 2L;
int c;
此代码生成3个相同类型int
的变量。
type 的概念大致是“变量可以采用的所有值的集合”。它不会(也不能)依赖变量的初始值 - 无论是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
的声明类型视为“更重要”。
1 BTW C ++支持“类型推断”;如果您希望初始值设定项的类型很重要,可以使用它:
auto a = 2L; // "a" has type "long int"
auto b = 2; // "b" has type "int"
答案 1 :(得分:3)
" long int a = 2"和" int a = 2L"?
前者将变量a
定义为从值long int
初始化类型2
,后者将其定义为从值{{1}初始化类型int
}}。初始化器隐式转换为变量的类型,不会影响变量的类型。
或
之间有什么区别?2L
和long char c='a'
前者将变量char c=L'a'
定义为从值c
初始化类型long char
,后者将其定义为从值{{1}初始化类型'a'
}}。由于类型char
不存在,前者是错误。 L'a'
的类型称为long char
,而不是L'a'
,后一种情况再次转换为变量的类型。
或
之间有什么区别wchar_t
和long char
前者将变量unsigned int a=2
定义为从值int a=2U
初始化类型a
,后者将其定义为从值{{1}初始化类型unsigned int
}}。同样,初始化器不会影响变量的类型。
此外,
2
运算符为int
和2U
提供相同的值,为什么?不应该把规模翻倍。
由于他们都将sizeof(a)
定义为int a=2
类型,因此int a=2L
应为a
提供int
。
答案 2 :(得分:0)
#include <stdio.h>
int main()
{
int a1=2; //a1=2
int a2=2L; //a2=2
int a3=2.5673; //a3=2
int a4='A'; //a4=65
return 0;
}
在这里,即使a3和a4的值分别为float和char,该值也将转换为int为a3,而a4被声明为int。同样,即使将a2的值设置为2L,a2的值也将转换为int。 变量不依赖于值,而是依赖于类型声明。不管它的值是什么,int a始终都是整数。