本文介绍: 本身和它的枚举类型若在声明初始化那么就是一个常量表达式。在函数中若有常量表达式那么必须用。函数用于常量表达式,只有在下面的情况下编译器才会接受。上下文中,函数返回值必须是常量表达式。,仅仅满足常量表达式的条件是不够的。是一个常量,可以赋值一个变量变量必须在编译时求值为常量表达式。只能用于静态成员函数,而。仍然是一个常量表达式。返回的不是常量表达式。可以用于含参和无参函数。所以,到底什么时候用。返回的是常量表达式。

在 C++ 中,const 和 constexpr 都可以用来修饰对象和函数。修饰对象时,const 表示它是常量,而 constexpr 表示它是一个常量表达式。常量表达式必须在编译时期被计算1修饰函数时,const 只能用于静态成员函数,而 constexpr 可以用于含参和无参函数constexpr 函数适用于常量表达式,只有在下面的情况下编译器才会接受 constexpr 函数

  1. 函数体必须足够简单,除了 typedef静态元素,只允许有 return 语句。如构造函数只能有初始化列表typedef静态元素(实际上在 C++14 标准中已经允许定义语句存在于 constexpr 函数体内了)。
  2. 参数返回值必须是字面值类型

常量表达式的概念如下:

所以,到底什么时候用 constexpr?像上面的 N,虽然没有constexpr 仍然是一个常量表达式。事实上,const 本身和它的枚举类型若在声明时初始化那么就是一个常量表达式。在函数中若有常量表达式那么必须用 constexpr,仅仅满足常量表达式的条件是不够的。

所以,constconstexpr 的主要区别在于:

我们来深入学习代码


int fun(int x) {

	return x;
}

constexpr int ff(int x) {

	return x;
}

int main()
{
	
	int x = 10;
	const int a = x;
	constexpr int b = x;  // 错误的 表达式 必须是常量
	constexpr int c = fun(10);   // 也是错误的
	constexpr int d = ff(10);   // 正确的
	constexpr int d = ff(x);   // 错误的
}

 

  1. const int a = x;正确的,因为 a一个常量,可以被赋值一个变量。

  2. constexpr int b = x;错误的,因为 x 不是常量表达式,而 constexpr 变量必须在编译时求值为常量表达式。

  3. constexpr int c = fun(10);错误的,因为 fun(10) 返回的不是常量表达式。在 constexpr 上下文中,函数的返回值必须是常量表达式。

  4. constexpr int d = ff(10);正确的,因为 ff(10) 返回的是常量表达式。

  5. constexpr int e = ff(x);错误的,因为 x 不是常量表达式。

原文地址:https://blog.csdn.net/wniuniu_/article/details/134701087

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_#ID#.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注