C++ 常量/字面量
你好,未来的程序员们!今天,我们将踏上一段激动人心的旅程,探索 C++ 常量和字面量的世界。不要担心这些术语听起来有些令人畏惧——在本课结束时,你会像专业人士一样自如地使用它们!让我们开始吧!
什么是常量和字面量?
在我们深入了解之前,让我们先了解一下常量和字面量是什么。可以将它们视为你代码中的“不可变”元素——比如一周的天数或π的值。它们是你可靠的伙伴,无论你的程序发生什么,它们都保持不变。
整数字面量
让我们从熟悉的东西开始——数字!在 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;
就这样!只有 true
和 false
。它们就像编程世界的“是”和“否”。
字符字面量
字符字面量表示单个字符,并被单引号包围。
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