标准化输入输出、参数传递、decltype、auto

1 Int golf[MAX];
2 While(!(cin>>golf[i]))
3 {
4     cin.clear();
5 while(cin.get()! = ‘\n’)
6     continue;
7 cout<<”Please enter a number:”
8 }

当输入must i?,则cin表达式将为false,因此不会将任何值放到数组中,而表达式!(cin>>golf[i])将为true,因此进入内部的while循环,该循环的第一条语句使用能够clear()方法重置输入,如果省略这条语句,程序将拒绝继续读取输入。接下来,程序在while循环中使用cin.get()来读取行尾之前的所有输入,从而删除这一行中的错误输入。另一种方法是读取到下一个空白字符,这样将每次删除一个单词。而不是一次删除整行。最后,程序告诉用户,应输入一个数字。

方法setf()让你设置各种格式化状态,例如将对象置于使用定点表示法的模式setf(ios_base::fixed);将对象置于显示小数点的模式setf(ios_base::showpoint)

方法precision()指定显示多少为小数(假定对象处于定点模式下)

方法width()设置下一次输出操作使用的字段宽度,这种设置只在显示下一个值时有效,然后恢复到默认设置。

1 Ostream os;
2 Ios_base::fmtflags initial;
3 Initial = os.setf(ios_base::fixed);
4 5 os.setf(initial);

对于使用传递的值而不作修改的函数:

  1. 如果数据对象很小,如内置数据类型或小型结构,则按值传递。
  2. 如果数据对象是数组,则使用指针,因为这是唯一的选择,并将指针声明为指向const的指针
  3. 如果数据对象是较大的结构,则使用const指针或const引用,以提高程序效率。这样可以节省复制结构所需的时间和空间。
  4. 如果数据对象是类对象,则使用const引用。类设计的语义常常要求使用引用,这是C++新增这项特殊的主要原因。因此,传递类对象参数的标准方式是按引用传递。

对于修改调用函数中的数据的函数:

  1. 如果数据对象是内置数据类型,则使用指针。如果看到诸如fixit(&x)这样的代码(其中x是int),很明显,该函数将修改x.
  2. 如果数据对象是数组,则只能使用指针。
  3. 如果数据对象是结构,则使用引用或指针。
  4. 如果数据对象是类对象,则使用引用。

有时候,如果两个函数都完全匹配,仍可完成重载解析。首先,指向非const数据的指针和引用优先与const指针和引用参数匹配.

1 template<class T1,class T2>
2 void ft(T1 x, T2 y)
3 {
4     ?type? xpy = x + y;
5 }

关键字decltype

Int x;

Decltype(x), y;

给decltype提供的参数可以是表达式,因此在前面的模板函数f()中,可使用下面的代码:

decltype(x+y) xpy;

xpy = x+ y;

auto 是一个占位符,表示后置返回类型提供的类型。auto是C++11新增的角色.

1 auto h(int x, float y) ->decltype(x+y)
2 {
3     return x + y;
4 }

 

posted @ 2012-09-06 21:03  Asan825  阅读(311)  评论(0)    收藏  举报