【C++】内联函数和cosntexpr函数

constexpr函数

  constexpr函数(constexpr function)是指能用于常量的表达式的函数。定义constexpr函数的方法和其它函数类似,不过要遵循几项约定:函数的返回类型和所有形参的类型都得是字面值类型,而且函数体中必须有且只有一条return语句:

constexpr int new_sz() {return 42;}constexpr int foo = new_sz(); //正确:foo是一个常量表达式

  我们把new_sz定义成无参数的constexpr函数。因为编译器能在程序编译时验证new_sz函数返回的是常量表达式,所以可以用new_sz函数初始化constexpr类型的变量foo。

  执行该函数初始化任务时,编译器把对constexpr函数的调用替换成其结果值。为了能在编译过程中随时展开,constexpr函数被隐式地制定为内联函数。

  constexpr函数体内也可以包含其它语句,只要这些语句在运行时不执行任何操作就行。例如,constexpr函数中可以有空语句、类型别名以及using声明。

  我们允许constexpr函数的返回值并非一个常量:

原文地址:https://www.cnblogs.com/bootblack/p/11609426.html

时间: 2024-11-14 16:43:59

【C++】内联函数和cosntexpr函数的相关文章

内联(inline)函数

内联函数避免函数调用的开销将函数指定为内联函数,(通常)就是将它在程序中每个调用点上“内联地”展开.假设我们将shorterStirng定义为内联函数,则调用:cout<<shorterSring(s1,s2)<<endl;在编译时将展开为:cout<<(s1.size() < s2.size() ? s1 : s2)       <<endl;从而消除了把shorterString写成函数的额外执行开销.在函数返回类型前加上关键字inline就可以将

讲讲c++ Session 2 内联(inline)函数

定义:内联函数是一种内联扩展,即通过在每个函数调用的地址插入功能代码,从而节省开销来函数调用,避免跳转到一个子程序. inline关键字类似于宏,编译器在它被称为每个地方放置了内联函数的新副本,内联函数的运行速度比正常的函数调用快,开销都省了,但是,有一个内存问题.如果一个内联函数被调用的10次,将有10个拷贝插入到代码的函数.因此,内联函数是最好的小功能,这些功能通常被称为.一个类的成员函数,如果在类定义中定义,在默认情况下(没有必要使用inline关键字),否则,该关键字是必要的.编译器可能

(转)内联(inline)函数与虚函数(virtual)的讨论

本文转自: http://topic.csdn.net/t/20051220/09/4469273.html 函数的inline属性是在编译时确定的, 然而,virtual的性质是在运行时确定的,这两个不能同时存在,只能有一个选择,文件中的inline关键字只是对编译器的建议,编译器是否采纳是编译器的事情. 1.内联函数是个静态行为,而虚函数是个动态行为,他们之间是有矛盾的. 2.我们之所以能看到一些象内联函数的虚函数,是因为某个函数是否是内联函数不是由我们说的算,而是由编译器决定的.我们只能向

IAR EWAR 内联汇编 调用外部函数 Error[Og005], Error[Og006]

How do I call a C function in another module from inline assembler in IAR EWARM? I have a bit of assembly in a hard fault handler. The assembly is basically meant to pass the current stack pointer as a parameter (in R0). It looks like so... __asm(" m

内联函数详解

什么是内联性和外联函数 类的成员函数可以分为内联函数和外联函数.内联函数是指那些定义在类体内的成员函数,即该函数的函数体放在类体内.而说明在类体内,定义在类体外的成员函数叫外联函数.外联函数的函数体在类的实现部分. 内联函数在调用时不是像一般的函数那样要转去执行被调用函数的函数体,执行完成后再转回调用函数中,执行其后语句,而是在调用函数处用内联函数体的代码来替换,这样将会节省调用开销,提高运行速度. 内联函数与前面讲过的带参数的宏定义进行一下比较,它们的代码效率是一样的,但是内联函数要优于宏定义

重构改善既有代码设计--重构手法02:Inline Method (内联函数)&amp; 03: Inline Temp(内联临时变量)

Inline Method (内联函数) 一个函数调用的本体与名称同样清楚易懂.在函数调用点插入函数体,然后移除该函数. int GetRating() { return MoreThanfiveLateDeliverise() ? 2 : 1; } bool MoreThanfiveLateDeliverise() { return _numberOfLateLiveries > 5; } int GetRating() { return _numberOfLateLiveries > 5

第2章 重新组织函数(2):内联函数和内联临时变量

2. 内联函数(Inline Method) 2.1 动机 (1)在函数调用点插入函数本体,然后移除该函数. (2)有时遇到某些函数,其内部代码和函数名称同样清晰易读,采用内联函数可以提供代码的执行速度(因为少掉了函数调用的开销) (3)在Replace Method withd Method Object之前,将一些组织不合理的函数内联到一个大型函数,再从中提炼组织合理的小型函数时效果很好. (4)使用太多的间接层时,特别是一部分函数只是对另一个函数的简单委托时,可同去掉一些无用的间接层. 2

重构笔记——内联函数

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/42261333         在上一篇文章中介绍了"提炼函数".本文将介绍"内联函数"这种重构手法.         下面让我们一起来学习该重构手法把. 开门见山         发现:一个函数的本体与名称同样清楚易懂. 解决:在函数调用点插入函数本体,然后移除该函数. //重构前 public int getRati

不可或缺 Windows Native (16) - C++: 函数重载, 缺省参数, 内联函数, 函数模板

[源码下载] 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 函数重载 缺省参数 内联函数 函数模板 示例1.函数重载, 缺省参数CppFunction1.h #pragma once #include <string> using namespace std; namespace NativeDll { class CppFunction1 { public: string Demo(); }; } CppFunction1.cpp /* * 函数重载,缺省参数