您的位置:首页 > 其它

默认实参,constexpr函数

2015-12-03 21:43 148 查看
我们使用string对象表示窗口内容时,希望窗口的高,宽等都有一个默认值。但同时允许这些参数自由指定与默认不同的值,此时可以定义成如下形式:
    typedef  string :: size_type  sz;
    string  screen (sz  ht = 24, sz  wid = 80, char  backgrnd = '  ' );

引用时,如果想使用默认值,则直接将screen函数置空,改变哪个值将哪个参数赋值。
例:  screen();  等价于screen(24, 80, '  ');
        screen(66);   等价于screen(66, 80, '  ');

但是因为函数调用时是按照位置解析,所以应该合理设置形参的顺序,尽量让不怎么使用默认值的形参在前面。

sz wd = 80;
char  def = '  ';
sz  ht();
string  screen (sz = ht(), sz = wd, char = def);

若此时调用函数改变一些实参:
例:void  f2()

      {
          def = ' * ';                 //改变了默认实参的值
          sz wd = 100;   //未改变默认实参值,因为此处相当于重新定义的,跟外层的wd没关系
         string window = screen ();  调用screen(ht(),  80,  ' * ');

        }

内联函数,在编译中展开,在函数返回类型前加上 inline 既可。

constexpr函数
指能用于常量表达式的函数,函数返回类型及所有形参类型都必须是字面值类型,且函数体有且只有一个return语句
允许constexpr函数的返回值并非一个常量:
constexpr  size_t  scale (size_t  cnt)

{
    return  new_sz() * cnt;

}
调用时:
int  arr[scale(2)];   //正确,scale(2)是常量表达式
int  i = 2;
int  arr[scale(i)];   //错误,不是常量表达式
常量表达式是指值不会改变并在编译过程就能得到计算结果的表达式。
int   i = 3; 中,虽然i本身是一个常量,但其值直到运行时才能获得,但改为 const int i = 3;就是常量表达式了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: