constexpr函数------c++ primer】的更多相关文章

constexpr函数是指能用于常量表达式的函数.定义constexpr函数的方法有其他函数类似,不过要遵循几项约定:函数的返回值类型及所以形参的类型都是字面值类型,而且函数体中必须有且只有一条return语句.为了能在编译过程中随时展开,constexpr函数被隐式指定地指定为内联函数. constexpr函数体内也可以包含其他语句,只要这些语句在运行时不执行任何操作就行.例如,constexpr函数中可以有空语句.类型别名以及using声明. 允许constexpr函数的返回值并非一个常量:…
默认实参: 某些函数有这样一种形参,在函数的很多次调用中它们都被赋予一个相同的值,此时,我们把这个反复出现的值称为函数的默认实参.调用含有默认实参的函数时,可以包含该实参,也可以省略该实参. 需要特别注意的是: 1. 一旦某个形参被赋予了默认值,它后面的所有形参都必须有默认值. 2. 只能省略尾部的实参. 3. 实参会从形参列表的第一个形参开始匹配,若它们的类型能相互转换也能匹配成功. 4. 局部变量不能作为默认实参.除此之外,只要表达式的类型能转换成形参所需要的类型,该表达式就能作为默认实参.…
inline 函数 规模小,流程直接且频繁调用 cout<<shortString(s1,s2)<<endl; = cout<<(s1.size()<s2.size()?s1:s2)<<endl; constexpr函数是指能用于常量表达式的函数.函数的返类型及所有形参的类型都得是字面值类型,而且函数体中必须有一条return语句:…
正如第一章所说:C++的函数是一个能够完成一个功能的模块或者说是一段命名了的代码块. 如下图所示,函数可以重载,是一段实现某些功能命名了的代码. 一个完整的函数的构成有四部分: 1.返回类型 2.函数名 3.形参 4.函数体 对于返回类型来说,return语句返回的类型必须和返回类型一致,或者可以转换. 对于函数名来说,允许多个函数使用相同的名字,当参数不同时,形成重载.对函数名使用调用运算符,则执行函数. 对于形参来说,可以是传值的,也可以是传引用的. 对于函数体来说,必须是在一对花括号包围的…
编译器能以任意顺序对形参进行求值 函数的返回类型不能是数组类型和函数类型. 函数开始时为形参分配内存,一旦函数结束,形参也就被销毁了. 如果弄成静态局部变量,那么回到程序终止结束时才被销毁. void fo() { static int a ; //只在第一次初始化 a++; //保存了前次被调用后留下的值 return ; } //所有的全局变量都是静态变量,而局部变量只有定义时加上类型修饰符static,才为局部静态变量 形参类型决定了形参与实参的交互方式 f(int a,int b) 被调…
1.函数内的局部静态对象在程序的执行路径第一次经过对象定义语句的时候初始化,并且直到程序终止才被销毁,在此期间即使对象所在的函数结束执行也不会对它有影响. size_t get_count() { ; return ++count; } 2.当实参初始化形参的时候会忽略顶层const,换句话说,当形参有顶层const时,传给它常量或者非常量都是可以的. ; // ci的值不能被改变,const是顶层的 int i = ci; // 当拷贝ci时, 忽略了它的顶层const void fun(co…
contexpr函数 const用于运行期常量,constexpr用于编译期常量 • [test1.cpp] #include <iostream> using namespace std; constexpr int screen(int x) // constexpr { return x; } int main() { ; // const,是常量表达式,因为值不会发生改变 constexpr int z = screen(x); // constexpr cout << z…
参数传递 const形参和实参: 顶层const作用于对象本身, 和其他初始化过程一样, 当用实参初始化形参时会忽略掉顶层const, 换句话说, 形参顶层const被忽略掉了, 当形参有顶层const时, 传递给它常量对象或非常量对象都是可以的. void fcn(const int i) //fcn可以读取i, 但是不能向i写值 void fcn(int i) //错误, 重复定义了fcn(int) 由于顶层const被忽略了, 所以上述两个函数的参数是完全一样的. 指针或引用形参与cons…
编译器将在编译过程中把用到const变量的地方都替换成对应的值,为了执行这种替换,编译器必须知道变量的初始值.如果程序包含多个文件,则那个用了const对象的文件都必须能访问到它的初始值才行.要做到这一点,就必须在每一个用到变量的文件中都有对它的定义.为了支持这一用法,同时避免对同一变量的重复定义,默认情况下,const对象被设定为仅在文件内有效.当多个文件中出现了同名的const变量时,其实等同于在不同文件中分别定义了独立的变量. 某些时候有这样一种const变量,它的初始值不是一个常量表达式…
术语表 第 6 章 函数 二义性调用(ambiguous call): 是一种编译时发生的错误,造成二义性调用的原因时在函数匹配时两个或多个函数提供的匹配一样好,编译器找不到唯一的最佳匹配.    实参(argument): 函数调用时提供的值,用于初始化函数的形参.    Assert: 是一个预处理宏,作用于一条表示条件的表达式.当未定义预处理遍历NDEBUG时,assert对条件求值.如果条件为假,输出一条错误信息并终止当前程序的执行.    自动对象(automatic object):…