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

时间:2017-01-29 20:55:34

标签: c++

unsigned int a=2int a=2U

之间有什么区别?

如果long char c='a'引发错误,那么为什么不char c=L'a'

此外,

sizeof(a)运算符为int a=2int a=2L提供相同的值,为什么?不应该把规模翻倍。

3 个答案:

答案 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 }}。初始化器隐式转换为变量的类型,不会影响变量的类型。

  

2Llong char c='a'

之间有什么区别?

前者将变量char c=L'a'定义为从值c初始化类型long char,后者将其定义为从值{{1}初始化类型'a' }}。由于类型char不存在,前者是错误。 L'a'的类型称为long char,而不是L'a',后一种情况再次转换为变量的类型。

  

wchar_tlong char

之间有什么区别

前者将变量unsigned int a=2定义为从值int a=2U初始化类型a,后者将其定义为从值{{1}初始化类型unsigned int }}。同样,初始化器不会影响变量的类型。

  

此外,

     

2运算符为int2U提供相同的值,为什么?不应该把规模翻倍。

由于他们都将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始终都是整数。