C++ 常量/字面量

你好,未来的程序员们!今天,我们将踏上一段激动人心的旅程,探索 C++ 常量和字面量的世界。不要担心这些术语听起来有些令人畏惧——在本课结束时,你会像专业人士一样自如地使用它们!让我们开始吧!

C++ Constants/Literals

什么是常量和字面量?

在我们深入了解之前,让我们先了解一下常量和字面量是什么。可以将它们视为你代码中的“不可变”元素——比如一周的天数或π的值。它们是你可靠的伙伴,无论你的程序发生什么,它们都保持不变。

整数字面量

让我们从熟悉的东西开始——数字!在 C++ 中,当我们直接在代码中写入一个整数时,我们称之为整数字面量。这就像在一张纸上写下一个数字——简单直接。

int myAge = 25;
int numberOfPlanets = 8;
int negativeNumber = -10;

在这些示例中,25、8 和 -10 都是整数字面量。它们就像坐在那里,简单地作为数字存在,没有小数点或其他花哨的东西。

但是,还有更多!C++ 允许我们用不同的数制来写整数字面量:

int decimalNumber = 42;     // 十进制(基数为10)
int octalNumber = 052;      // 八进制(基数为8)- 以0开头
int hexNumber = 0x2A;       // 十六进制(基数为16)- 以0x开头
int binaryNumber = 0b101010;// 二进制(基数为2)- 以0b开头(C++14及以后)

不要担心八进制、十六进制或二进制看起来令人困惑。现在,只需知道它们是表示同一个数字的不同方式。这就像说不同的语言——“forty-two”,“cuarenta y dos”和“quarante-deux”都意味着同样的事情!

浮点数字面量

现在,让我们在混合中加入一些小数点!浮点数字面量是带有小数点或科学记数法的数字。

float pi = 3.14159f;
double avogadroNumber = 6.022e23;
long double veryPreciseNumber = 1.23456789L;

在这里,3.14159f 是一个 float 字面量(注意末尾的 'f'),6.022e23 是一个 double 字面量(e23 表示 ×10^23),而 1.23456789L 是一个 long double 字面量(注意末尾的 'L')。

布尔字面量

布尔字面量是最简单的——只有两个!

bool isAwesome = true;
bool isBoring = false;

就这样!只有 truefalse。它们就像编程世界的“是”和“否”。

字符字面量

字符字面量表示单个字符,并被单引号包围。

char firstInitial = 'J';
char newline = '\n';
char tab = '\t';

最后两个示例显示了特殊字符:'\n' 表示新行,'\t' 表示制表符。这些被称为转义序列。

字符串字面量

字符串字面量是被双引号包围的字符序列。

std::string greeting = "Hello, World!";
std::string quote = "To be, or not to be, that is the question.";

记住,字符串使用双引号,而单个字符使用单引号!

定义常量

现在我们知道了字面量,让我们看看如何使用它们来创建常量——在程序中保持不变的值。

#define 预处理器

定义常量的一种方法是使用 #define 预处理器指令:

#define PI 3.14159
#define MAX_STUDENTS 30

// 使用
double circleArea = PI * radius * radius;
if (numberOfStudents > MAX_STUDENTS) {
std::cout << "Class is full!";
}

define 指令告诉编译器在编译代码之前将每次出现的 PI 替换为 3.14159,将 MAX_STUDENTS 替换为 30。

const 关键字

定义常量的更现代且推荐的方式是使用 const 关键字:

const double PI = 3.14159;
const int MAX_STUDENTS = 30;

// 使用方式与 #define 相同

const 关键字告诉编译器这些变量在初始化后不能被改变。

一切皆有可能

让我们用一个使用各种常量和字面量的小程序来结束:

#include <iostream>
#include <string>

#define GAME_NAME "C++ Adventure"

int main() {
const int MAX_LEVEL = 100;
const double XP_MULTIPLIER = 1.5;

int currentLevel = 1;
double currentXP = 0.0;
bool hasCompletedTutorial = false;
char playerRank = 'D';
std::string playerName = "Newbie";

std::cout << "Welcome to " << GAME_NAME << "!" << std::endl;
std::cout << "Player: " << playerName << std::endl;
std::cout << "Level: " << currentLevel << "/" << MAX_LEVEL << std::endl;
std::cout << "XP: " << currentXP << std::endl;
std::cout << "Rank: " << playerRank << std::endl;
std::cout << "Tutorial completed: " << (hasCompletedTutorial ? "Yes" : "No") << std::endl;

return 0;
}

这个程序使用了我们讨论过的所有类型的常量和字面量。它使用 #define 定义了一个游戏名,使用 const 设置了最大等级和经验倍数,并使用了各种字面量来初始化玩家的统计数据。

结论

恭喜你!你已经迈出了进入 C++ 常量和字面量世界的第一步。记住,这些是你程序的构建块——你将用来创造惊人事物的不可变值。在你继续编程之旅时,你会发现每天都会用到这些概念。继续练习,保持好奇心,快乐编程!

字面量类型 示例 描述
整数 42, -10, 0, 1000 整数
八进制 052, 077 基数为8的数字(以0开头)
十六进制 0x2A, 0xFF 基数为16的数字(以0x开头)
二进制 0b101010 基数为2的数字(以0b开头,C++14及以后)
浮点数 3.14, 2.5f, 1e10 带有小数点或科学记数法的数字
布尔 true, false 逻辑值
字符 'A', '\n', '\t' 单个字符或转义序列
字符串 "Hello", "C++" 字符序列

Credits: Image by storyset