返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++11的const, const expression和constexpr有什么作用
  • 819
分享到

C++11的const, const expression和constexpr有什么作用

2023-06-19 10:06:32 819人浏览 泡泡鱼
摘要

这篇文章主要讲解了“c++11的const, const expression和constexpr有什么作用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++11的const, const

这篇文章主要讲解了“c++11的const, const expression和constexpr有什么作用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++11的const, const expression和constexpr有什么作用”吧!

const限定符

const可以用于定义变量,它的值不能被改变。

const int bufSize = 512;

如果有代码试图修改这个变量,就会发生编译错误。

指针和const

const当然也可以用于修饰指针,但是会带来一些混乱,例如:

const double pi = 3.14;

const double  *cptr = π    //指向常数的指针

*cptr = 4;            //编译错误

double var = 45;

double *const  pvar = &var;  //指向变量为常数

*pvar = 40;       //正确

不大容易区分到底谁不能变,这时可以试试下面的视角:

const double* cptr = π    //指向常数的指针

double* const  pvar = &var;  //指针变量为常数

常量表达式

const限定符只能保证初始化之后不会被修改,而变量的值是编译阶段就可以确定的还是到执行时才能确定都可以。关于这一点C++中有一个常量表达式的概念,指的是值固定并且在编译过程就能确定计算结果的表达式。例如:

const int max_files = 20;   //20是字面值

const int limit = max_files + 1;   //max_files为常量表达式,1是字面值。

const int sz = get_size();            //sz不是常量表达式。

上面的表达式同时满足两个条件:一是变量本身为const类型,二是初始值必须为字面值或者常量表达式。

如果变量类型不是const,那么无论它的初始值是不是常量表达式,它就只是一个变量;如果初始值不是常量表达式,那个变量的值就无法在编译期间得确定只能在执行时占用CPU开销来赋值。

变量的值在编译期间决定,带来的好处就是提高效率,例如例子中的limit的表达方式,在照顾可读性的同时,又不会影响执行效率。

constexpr变量

一般来说,在日益复杂的系统中确定变量的初始值到底是不是常量表达式并不是一件容易的事。为了解决这个问题C++11允许将变量声明为constexpr类型以便由编译器验证变量的值是否是一个常量表达式。

变量声明为constexpr类型,就意味着一方面变量本身是常量,也意味着它必须用常量表达式来初始化。

constexpr int mf = 20;

constexpr int limit = mf + 1;

如果初始值不是常量表达式,那么就会发生编译错误。

constexpr函数

除了能用常量表达式初始化constexpr变量以外,还可以使用constexpr函数。它是指能用于常量表达式的函数,也就是说它的计算结果可以在编译时确定。定义的方法就是在返回值类型前加constexpr关键字。但是为了保证计算结果可以在编译是确定,必须满足以下条件:

  1. 返回值和形参必须都是字面值类型。

  2. 函数中只能有一条return语句。

例如下面的计算阶乘的constexpr函数。

constexpr long long factorial(int n){

   return n <= 1? 1 : (n * factorial(n - 1));

}

constexpr long long f18 = factorial(20);


可以用它来初始化constexpr变量。所有计算都在编译时完成。比较有趣的是像溢出这样错误也会在编译是被检出。

简单地说

constexpr可以

  1. 加强初始值的检查

  2. 计算的时机从运行时提前到编译时,比宏定义效率更高。

感谢各位的阅读,以上就是“C++11的const, const expression和constexpr有什么作用”的内容了,经过本文的学习后,相信大家对C++11的const, const expression和constexpr有什么作用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: C++11的const, const expression和constexpr有什么作用

本文链接: https://lsjlt.com/news/295546.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++11的const, const expression和constexpr有什么作用
    这篇文章主要讲解了“C++11的const, const expression和constexpr有什么作用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++11的const, const...
    99+
    2023-06-19
  • 详解C++中的const和constexpr
    目录一.const常量与#define比较二.const修饰1.修饰普通变量,必须初始化2.修饰类变量和成员变量3.修饰成员函数4.修饰指针5.修饰引用三.const转换四.顶层co...
    99+
    2024-04-02
  • 怎么解析C++中的const和constexpr
    本篇文章为大家展示了怎么解析C++中的const和constexpr,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一.const常量与#define比较define只是简单的替换,没有类型,cons...
    99+
    2023-06-21
  • C++中const与constexpr的区别是什么
    这篇文章主要讲解了“C++中const与constexpr的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++中const与constexpr的区别是什么”吧!一.const常量...
    99+
    2023-06-21
  • C++11的const怎么引用
    本篇内容介绍了“C++11的const怎么引用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!const引用在C++语言中,引用是作为一种高效...
    99+
    2023-06-19
  • c++中const的作用和用法
    const 在 c++ 中表示不可变性,用于强制变量、函数参数或类成员保持常量,使其值在程序运行期间不可修改。具体用法包括:修饰变量以强制不可变性,如 const int my_age ...
    99+
    2024-05-01
    c++
  • C++11关键字const怎么使用
    本篇内容主要讲解“C++11关键字const怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++11关键字const怎么使用”吧!一、历史按理来说,要想了解一件事物提出的原因,最好的办法...
    99+
    2023-06-25
  • const在c++中的作用
    const 关键字在 c++ 中用于定义常量,即程序运行期间值不可改变的变量,包括:声明常量变量,如 const int max_size = 100;防止意外修改,确保编译时检测修改并...
    99+
    2024-04-26
    c++ 代码可读性
  • C++和C中const的区别是什么
    本篇内容介绍了“C++和C中const的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!const,这个词字面意思为:常数。这就表示...
    99+
    2023-06-21
  • C++11中 constexpr构造函数的作用是什么
    这期内容当中小编将会给大家带来有关C++11中 constexpr构造函数的作用是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。聚合类聚合类(aggregate class)允许利用者直接访问其成员,...
    99+
    2023-06-19
  • const在c语言中的作用
    const 在 c 语言中用于定义常量,防止变量值在程序执行期间被修改。具体作用包括:确保代码安全性和可靠性提高代码可读性和可维护性优化代码性能 const 在 C 语言中的作用 co...
    99+
    2024-05-10
    c语言 代码可读性
  • C++中的const限定符的使用和作用
    目录1、const 的引用2、指针和const3、顶层const4、constexpr和常量表达式const满足定义一种变量在被设置初始值后它的值不能再次被改变。 在默认状态下,co...
    99+
    2023-05-19
    C++ const限定符 C++ const C++限定符
  • C++中的const怎么用
    本文小编为大家详细介绍“C++中的const怎么用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++中的const怎么用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。const 是 constant 的缩写,...
    99+
    2023-06-27
  • C# const和static readonly区别是什么
    这篇文章主要介绍“C# const和static readonly区别是什么”,在日常操作中,相信很多人在C# const和static readonly区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答...
    99+
    2023-06-17
  • ES6中let和const命令有什么用
    这篇文章将为大家详细讲解有关ES6中let和const命令有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言在javascript中,我们都知道使用var来声明变...
    99+
    2024-04-02
  • c语言中const关键字的作用
    const关键字在c语言中用于修饰变量或函数,使其值或行为在程序执行期间保持不变。它可以修饰变量(使其成为常量),防止意外修改数据,提高程序安全性。此外,const还可以修饰函数,确保其...
    99+
    2024-05-10
    c语言 敏感数据 代码可读性
  • C语言中const和define的区别是什么
    本文小编为大家详细介绍“C语言中const和define的区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言中const和define的区别是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。def...
    99+
    2023-06-29
  • java中const关键字的作用是什么
    在Java中,const并不是一个关键字,而是一个保留字,表示常量(constant)的意思。在Java中,我们可以使用final关...
    99+
    2023-09-05
    java const
  • C++中引用和const关键字怎么用
    今天小编给大家分享一下C++中引用和const关键字怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。引用下面的写法定义了...
    99+
    2023-06-29
  • C语言中const,指针和引用的关系是什么
    这篇“C语言中const,指针和引用的关系是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言中const,指针和引用...
    99+
    2023-06-26
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作