c++的准备知识15

1.强制类型的转换:C++允许通过强制类型转换机制显式地进行类型转换。强制类型转换有两种例如,将存储变
  量thorn中的int值转换为long类型,可以使用下述表达式中的一种:
  (long)thorn
   long (thorn)
  强制类型转换不会修改thorn变量本身,而是创建一个新的,指定类型的值,可以在表达式中使用这个值。
  cout <<int("Q");
  强制转换的通用格式为:
  (typeName)value
   typeName (value)
  第一种格式来自C语言,第二种格式是纯粹的C++。新格式的想法是,要让强制类型转换就像是函数调用。这样
  对内置类型的强制类型转换就像是用户定义的类型设计的类型转换。


2.C++还映入了4个强制类型转换运算符,对他们的使用要求更为严格。在这四个运算符中,static_cast<>可用
  于将值从一种数值类型转换为另一种数值类型。例如,可以像将thorn转换为long类型,
  static_cast<long>(thorn)
  继而,可以这样;
  Static_cast<typeName>(value)
  Stroustrup认为,C语言的强制类型转换由于过多的可能性而极其危险,运算符static_cast<>比传统强制类型
  转换更加严格。


3.C++11中的auto声明:C++新增了一个工具,让编译器能够根据初始值的类型推断变量的类型。为此,他宠幸定义
  了auto的含义。auto是一个C++语言关键字,但很少使用。在初始化生命中,如果使用关键字auto,而不指定变
  量的类型,编译器将把变量的类型设置成与初始值相同:
  auto n = 100;
  auto x = 1.5;
  auto y = 1.3e12L;
  然而,自动推断类型并非为这种简单情况而设计的:事实上,如果将其用于这种简单情形,甚至可能会误入歧途
  假如,你要将x,y,z都指定为double类型,并编写了代码
  auto x = 0.0;
  double y = 0;
  auto z = 0;
  显式的生命类型时,变量将初始化为0不会导致任何问题,但采用自动类型推断时,这回导致为题。
  处理复杂类型,如标准模块库中的类型时,自动类型推断的有时才能显示出来。例如,对于C++98代码
  std::vector<double> scores;
  std::vector<double>::iterator pv =scores.begin();

 

posted @ 2016-08-18 17:09  都是木头  阅读(151)  评论(0编辑  收藏  举报