标准化输入输出、参数传递、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);
对于使用传递的值而不作修改的函数:
- 如果数据对象很小,如内置数据类型或小型结构,则按值传递。
- 如果数据对象是数组,则使用指针,因为这是唯一的选择,并将指针声明为指向const的指针
- 如果数据对象是较大的结构,则使用const指针或const引用,以提高程序效率。这样可以节省复制结构所需的时间和空间。
- 如果数据对象是类对象,则使用const引用。类设计的语义常常要求使用引用,这是C++新增这项特殊的主要原因。因此,传递类对象参数的标准方式是按引用传递。
对于修改调用函数中的数据的函数:
- 如果数据对象是内置数据类型,则使用指针。如果看到诸如fixit(&x)这样的代码(其中x是int),很明显,该函数将修改x.
- 如果数据对象是数组,则只能使用指针。
- 如果数据对象是结构,则使用引用或指针。
- 如果数据对象是类对象,则使用引用。
有时候,如果两个函数都完全匹配,仍可完成重载解析。首先,指向非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 }

浙公网安备 33010602011771号