C++实际上有两种不同的常数

2023-11-25 13:18

本文主要是介绍C++实际上有两种不同的常数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

然而,它有时是有用的,以确定变量的值,不能改变。例如,考虑在地球的重力值:9.8米/秒2。这是不可能改变任何时间很快。定义这个值作为一个常量有助于确保这个值不是意外更改的。

做一个变量不变,只是把const关键字之前或之后的变量类型,像这样:

1
2
const double gravity { 9.8 }; // preferred use of const before type
int const sidesInSquare { 4 }; // okay, but not preferred

虽然C++会接受之前或之后的类型const,我们推荐使用它之前,因为它更好的遵循标准式英语惯例在修饰符来之前被修改的对象(例如一个绿球,一球未绿色)。
const变量必须初始化,当你定义它们,然后,价值无法通过改变分配。
声明一个变量为const阻止我们无意中改变它的值:

1
2
3
4
5
std::cout << "Enter your age: ";
int age;
std::cin >> age;const int usersAge (age); // usersAge can not be changed

将函数参数常量做两件事。首先,它告诉人调用函数,函数不会改变自我价值的价值。其次,它确保功能不改变自我价值的价值。
编译时间和运行时
当你在编译你的程序的过程中,这被称为编译时间。在编译时,编译器可以确保你的代码语法正确,并将你的代码转换成目标文件。
当你在运行你的应用程序的过程中,被称为运行时。在运行时,您的程序按行执行。
Constexpr
C++实际上有两种不同的常数。
运行时常量是那些初始化值只能在运行时解析的(当你的程序正在运行的时候)。变量如usersage和自我价值以上运行时常量,因为编译器在编译时不能确定自己的价值观。usersage依靠用户输入(只能在运行时)和自我价值取决于传递给函数的值(这是在运行时才知道)。
编译时间常数是那些在编译时可以在编译时解决的初始化值(当你的程序在编译时)。上面的变量重力是一个编译时常数的例子。每当使用重力时,编译器可以简单地用“双9.8”的标识符重来替换“标识符”。
在大多数情况下,一个恒定值是否运行时或编译时间都不重要。然而,有一些奇怪的情况下,C++需要编译而不是运行时常数时间(如定义一个固定大小的数组的长度,我们将稍后)。因为一个常量的值可以是运行时或编译时,编译器必须了解哪一种常数是。
有助于消除这一情况,C++ 11引入了新的关键字constexpr,使常数必须是编译时常量:

这篇关于C++实际上有两种不同的常数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/423873

相关文章

C++ move 的作用详解及陷阱最佳实践

《C++move的作用详解及陷阱最佳实践》文章详细介绍了C++中的`std::move`函数的作用,包括为什么需要它、它的本质、典型使用场景、以及一些常见陷阱和最佳实践,感兴趣的朋友跟随小编一起看... 目录C++ move 的作用详解一、一句话总结二、为什么需要 move?C++98/03 的痛点⚡C++

详解C++ 存储二进制数据容器的几种方法

《详解C++存储二进制数据容器的几种方法》本文主要介绍了详解C++存储二进制数据容器,包括std::vector、std::array、std::string、std::bitset和std::ve... 目录1.std::vector<uint8_t>(最常用)特点:适用场景:示例:2.std::arra

C++构造函数中explicit详解

《C++构造函数中explicit详解》explicit关键字用于修饰单参数构造函数或可以看作单参数的构造函数,阻止编译器进行隐式类型转换或拷贝初始化,本文就来介绍explicit的使用,感兴趣的可以... 目录1. 什么是explicit2. 隐式转换的问题3.explicit的使用示例基本用法多参数构造

C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解

《C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解》:本文主要介绍C++,C#,Rust,Go,Java,Python,JavaScript性能对比全面... 目录编程语言性能对比、核心优势与最佳使用场景性能对比表格C++C#RustGoJavapythonjav

MyBatis中的两种参数传递类型详解(示例代码)

《MyBatis中的两种参数传递类型详解(示例代码)》文章介绍了MyBatis中传递多个参数的两种方式,使用Map和使用@Param注解或封装POJO,Map方式适用于动态、不固定的参数,但可读性和安... 目录✅ android方式一:使用Map<String, Object>✅ 方式二:使用@Param

C++打印 vector的几种方法小结

《C++打印vector的几种方法小结》本文介绍了C++中遍历vector的几种方法,包括使用迭代器、auto关键字、typedef、计数器以及C++11引入的范围基础循环,具有一定的参考价值,感兴... 目录1. 使用迭代器2. 使用 auto (C++11) / typedef / type alias

python项目打包成docker容器镜像的两种方法实现

《python项目打包成docker容器镜像的两种方法实现》本文介绍两种将Python项目打包为Docker镜像的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录简单版:(一次成功,后续下载对应的软件依赖)第一步:肯定是构建dockerfile,如下:第二步

C++ scoped_ptr 和 unique_ptr对比分析

《C++scoped_ptr和unique_ptr对比分析》本文介绍了C++中的`scoped_ptr`和`unique_ptr`,详细比较了它们的特性、使用场景以及现代C++推荐的使用`uni... 目录1. scoped_ptr基本特性主要特点2. unique_ptr基本用法3. 主要区别对比4. u

C++11中的包装器实战案例

《C++11中的包装器实战案例》本文给大家介绍C++11中的包装器实战案例,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录引言1.std::function1.1.什么是std::function1.2.核心用法1.2.1.包装普通函数1.2.

C++多线程开发环境配置方法

《C++多线程开发环境配置方法》文章详细介绍了如何在Windows上安装MinGW-w64和VSCode,并配置环境变量和编译任务,使用VSCode创建一个C++多线程测试项目,并通过配置tasks.... 目录下载安装 MinGW-w64下载安装VS code创建测试项目配置编译任务创建 tasks.js