C++的内置基本类型和初始化-创新互联

数据类型是程序的基础:它告诉我们数据的意义以及我们能在数据上执行的操作。

创新互联IDC提供业务:成都服务器托管,成都服务器租用,成都服务器托管,重庆服务器租用等四川省内主机托管与主机租用业务;数据中心含:双线机房,BGP机房,电信机房,移动机房,联通机房。

 C++的内置数据类型分为两组:基本类型和复合类型。如下所示:

C++的内置基本类型和初始化

 bool类型的字面值为true和false:

  bool test = false;

 字面值true和false都可以通过提升转换为int类型,true被转换为1,而false被转换为0:

  int ans = true;  // ans assigned 1
  int promise = false;  // promise assigned 0

整型short、int、long和long long

 C++的short、int、long和long long类型通过使用不同数目的位(bit)来存储值,最多能够表示4种不同的整数宽度。如果在所有的系统中,每种类型的宽度都相同,则使用起来将非常方便。例如,如果short总是16位,int总是32位,等等。不过生活并非那么简单,没有一种选择能够满足所有的计算机设计要求。C++提供了一种灵活的标准,它确保了最小长度(从C语言借鉴而来),如下所示:

  •  short至少16位;

  •  int至少与short一样长;

  •  long至少32位,且至少与int一样长;

  •  long long至少64位,且至少与long一样长。

 C++提供了大量的整型,应使用哪种类型呢?通常,int被设置为对目标计算机而言最为“自然”的长度。自然长度(natural size)指的是计算机处理起来效率最高的长度。如果没有非常有说服力的理由来选择其他类型,则应使用int。

初始化

 初始化将赋值与声明合并在一起。可以使用字面值常量来初始化;也可以将变量初始化为另一个变量,条件是后者已经定义过;甚至可以使用表达式来初始化变量,条件是当程序执行到该声明时,表达式中所有的值都是已知的。如下:

  int uncles = 5;  // initialize uncles to 5
  int aunts = uncles;  // initialize aunts to 5
  int chairs = aunts + uncles + 4;  // initialize chairs to 14

 如果将uncles的声明移到语句列表的最后,则另外两条初始化语句将非法,因为这样当程序试图对其他变量进行初始化时,uncles的值是未知的。

 前面的初始化语法来自C语言,C++还有另一种C语言没有的初始化语法:

  int owls = 101;  // traditional C initialization, sets owls to 101
  int wrens(432);  // alternative C++ syntax,set wrens to 432

 警告:如果不对函数内部定义的变量进行初始化,该变量的值将是不确定的。这意味着该变量的值将是它被创建之前,相应内存单元保存的值。

 如果知道变量的初始值应该是什么,则应对它进行初始化。

C++11的初始化方式

 还有一种初始化方式,这种方式用于数组和结构,但在C++98中,也可用于单值变量:

  int hamburgers = {24};  // set hamburgers to 24

 将大括号初始化器用于单值变量的情形还不多,但C++11标准使得这种情形更多了。首先,采用这种方式时,可以使用等号(=),也可以不使用:

  int emus{7};  // set emus to 7
  int rheas = {12};  // set rheas to 12

 其次,大括号内可以不包含任何东西。在这种情况下,变量将被初始化为零:

  int rocs = {};  // set rocs to 0
  int psychics{};  // set psychics to 0

 第三,这有助于更好地防范类型转换错误。关于这个主题有如下说明:

 C++将使用大括号的初始化称为列表初始化(list-initialization),因为这种初始化常用于给复杂的数据类型提供值列表。与其他初始化方式相比,列表初始化对类型的要求更严格。具体地说,列表初始化不允许缩窄(narrowing),即变量的类型可能无法表示赋给它的值。例如,不允许将浮点型转换为整型。在不同的整型之间转换或将整型转换为浮点型可能被允许,条件是编译器知道目标变量能够正确地存储赋给它的值。例如,可将long变量初始化为int值,因为long总是至少与int一样长;相反方向的转换也可能被允许,只要int变量能够存储赋给它的long常量:

  const int code = 66;
  int x = 66;
  char c1 {31325};  // narrowing, not allowed
  char c2 = {66};  // allowed because char can hold 66
  char c3 {code};  // ditto(同上)
  char c4 = {x};  // not allowed, x is not constant
  x = 31325;
  char c5 = x;  // allowed by this form of initialization

 在上述代码中,初始化c4时,您知道x的值为66,但在编译器看来,x是一个变量,其值可能很大。编译器不会跟踪下述阶段可能发生的情况:从x被初始化到它被用来初始化c4。

为什么需要更多的初始化方法?

 为何需要更多的初始化方法?有充分的理由吗?原因是让新手更容易学习C++,这可能有些奇怪。以前,C++使用不同的方式来初始化不同的类型:初始化类变量的方式不同于初始化常规结构的方式,而初始化常规结构的方式又不同于初始化简单变量的方式;通过使用C++新增的大括号初始化器,初始化常规变量的方式与初始化类变量的方式更像。C++11使得可将大括号初始化器用于任何类型(可以使用等号,也可以不使用),这是一种通用的初始化语法。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网站栏目:C++的内置基本类型和初始化-创新互联
URL标题:http://ybzwz.com/article/gidje.html