标签:span 传统 内联函数 内联 获得 comm inter func rup
constexpr函数是指能用于常量表达式的函数。定义constexpr函数的方法有其他函数类似,不过要遵循几项约定:函数的返回值类型及所以形参的类型都是字面值类型,而且函数体中必须有且只有一条return语句。为了能在编译过程中随时展开,constexpr函数被隐式指定地指定为内联函数。
constexpr函数体内也可以包含其他语句,只要这些语句在运行时不执行任何操作就行。例如,constexpr函数中可以有空语句、类型别名以及using声明。
允许constexpr函数的返回值并非一个常量:
constexpr int scale(int cnt){return 5*cnt;}//如果arg是常量表达式,则scale(arg)也是常量表达式
当scale的实参是常量表达式时,它的返回值也是常量表达式;反之则不然。如果我们用一个非常量表达式调用scale函数,比如int类型的对象i,则返回值是一个非常量表达式。当把scale函数用在需要常量表达式的上下文时,由编译器负责检查函数的结果是否符合要求。如果结果恰好不是常量表达式,编译器将发出错误信息。constexpr函数不一定返回常量表达式。
把内联函数和constexpr函数放在头文件内
和其他函数不一样,内联函数和constexpr函数可以在程序中多次定义。毕竟,编译器要想展开函数仅有函数声明是不够的,还需要函数的定义。不过,对于某个给定的内联函数或者constexpr函数来说,它的多个定义必须完全一致,基于这个原因,内联函数和constexpr函数通常定义在头文件中。
https://www.cufe-ifc.org/question/153643.html
// a.h
#define FOO 3
static int Foo() { return FOO; }
// a.c
#include "a.h"
// b.c
#undef FOO
#define FOO 2
#include "a.h"
The definition of an inline function must be present in the translation unit where it is called (not necessarily before the point of call)
标签:span 传统 内联函数 内联 获得 comm inter func rup
原文地址:https://www.cnblogs.com/l2017/p/9379673.html