当前位置: 首页 > news >正文

2.2 Variables 1 变量的概念理解

声明

书籍:《C++ Primer》5th

环境:visual studio 2022

内容:Chapter 2. Variables and Basic Types

说明:以上内容大部分来AI。

变量的基本概念

根据C++ Primer Plus,变量为我们提供了命名的存储空间,我们的程序可以操作这些存储空间。C++中的每个变量都有一个类型。类型决定了变量内存的大小和布局、可以存储在该内存中的值的范围,以及可以应用于该变量的操作集合。C++程序员倾向于将"变量"和"对象"这两个术语互换使用。

原文

A variable provides us with named storage that our programs can manipulate. Each variable in C++ has a type. The type determines the size and layout of the variable's memory, the range of values that can be stored within that memory, and the set of operations that can be applied to the variable. C++ programmers tend to refer to variables as "variables" or "objects" interchangeably.

变量的核心特性

1. 命名存储空间

变量本质上是一个命名的内存区域,程序可以通过变量名来访问和操作这个内存区域:

int age = 25; // age是变量名,对应一块存储整数的内存 std::string name = "Alice"; // name是变量名,对应存储字符串的内存

2. 类型系统的重要性

C++是强类型语言,每个变量都必须有明确的类型:

// 基本类型 int integerVar = 42; // 整型 double doubleVar = 3.14159; // 双精度浮点型 bool boolVar = true; // 布尔型 char charVar = 'A'; // 字符型 ​ // 复合类型 int arrayVar[5] = {1, 2, 3, 4, 5}; // 数组类型 std::string stringVar = "Hello"; // 字符串类型

类型的作用

1. 决定内存大小和布局

类型决定了变量在内存中占用的空间大小和数据的组织方式:

#include <iostream> ​ int main() { std::cout << "Size of int: " << sizeof(int) << " bytes" << std::endl; // 通常4字节 std::cout << "Size of double: " << sizeof(double) << " bytes" << std::endl; // 通常8字节 std::cout << "Size of char: " << sizeof(char) << " bytes" << std::endl; // 1字节 std::cout << "Size of bool: " << sizeof(bool) << " bytes" << std::endl; // 通常1字节 return 0; }

2. 决定值的范围

类型限制了变量可以存储的值的范围:

#include <iostream> #include <limits> ​ int main() { std::cout << "int range: " << std::numeric_limits<int>::min() << " to " << std::numeric_limits<int>::max() << std::endl; std::cout << "unsigned int range: 0 to " << std::numeric_limits<unsigned int>::max() << std::endl; return 0; }

3. 决定可用的操作

类型决定了可以对变量执行哪些操作:

int a = 10, b = 20; int sum = a + b; // 整数支持算术运算 bool result = a > b; // 整数支持比较运算 ​ std::string s1 = "Hello", s2 = "World"; std::string combined = s1 + " " + s2; // 字符串支持连接操作 ​ // 不同类型的操作不同 // int invalid = s1 + a; // 错误:字符串和整数不能直接相加

变量与对象的互换使用

为什么可以互换使用

在C++中,"变量"和"对象"这两个术语经常互换使用,原因如下:

  1. 所有变量都是对象:在C++中,变量就是具有名称的对象

  2. 对象可以有名称也可以匿名:有名称的对象就是变量

  3. 统一的语义:简化了语言的描述和使用

示例说明

// 基本类型的变量/对象 int x = 10; // x既是变量也是对象 ​ // 类类型的变量/对象 class MyClass { public: int value; }; ​ MyClass obj; // obj既是变量也是对象 obj.value = 42; ​ // 匿名对象(只有对象,没有变量名) std::string("Hello"); // 临时字符串对象,没有变量名 ​ // 动态分配的对象 int* ptr = new int(100); // ptr是变量,*ptr是对象

变量的声明和定义

变量声明

声明引入变量的名称和类型:

extern int globalVar; // 声明,不分配内存 void func(int param); // 参数声明

变量定义

定义分配内存并可选地初始化:

int globalVar = 42; // 定义并初始化 int localVar; // 定义,未初始化(值不确定)

变量的作用域和生命周期

作用域(Scope)

变量在程序中的可见范围:

int globalVar = 100; // 全局作用域 void function() { int localVar = 50; // 函数作用域 if (true) { int blockVar = 10; // 块作用域 } // blockVar 在这里不可见 }

生命周期(Lifetime)

变量在内存中存在的时间:

// 静态存储期 static int staticVar = 0; // 程序运行期间存在 void func() { // 自动存储期 int autoVar = 10; // 函数调用期间存在 // 动态存储期 int* dynamicVar = new int(20); // 直到delete }

变量的初始化

不同的初始化方式

// 默认初始化 int x; // 未初始化,值不确定 // 值初始化 int y{}; // 初始化为0 // 直接初始化 int z(42); // 使用构造函数语法 // 复制初始化 int w = 42; // 使用等号 // 列表初始化 int arr[]{1, 2, 3}; // 使用花括号

变量的使用示例

基本使用

#include <iostream> #include <string> int main() { // 声明和初始化变量 int age = 25; std::string name = "Alice"; double salary = 50000.0; // 使用变量 std::cout << "Name: " << name << std::endl; std::cout << "Age: " << age << std::endl; std::cout << "Salary: $" << salary << std::endl; // 修改变量值 age = 26; salary = salary * 1.1; // 涨薪10% std::cout << "After one year:" << std::endl; std::cout << "Age: " << age << std::endl; std::cout << "Salary: $" << salary << std::endl; return 0; }

复合类型变量

#include <iostream> #include <vector> struct Person { std::string name; int age; double height; }; int main() { // 结构体变量 Person person1; person1.name = "Bob"; person1.age = 30; person1.height = 175.5; // 数组变量 int scores[5] = {85, 92, 78, 96, 88}; // 向量变量 std::vector<std::string> names = {"Alice", "Bob", "Charlie"}; // 输出信息 std::cout << "Person: " << person1.name << ", Age: " << person1.age << ", Height: " << person1.height << "cm" << std::endl; std::cout << "Scores: "; for (int i = 0; i < 5; ++i) { std::cout << scores[i] << " "; } std::cout << std::endl; std::cout << "Names: "; for (const auto& name : names) { std::cout << name << " "; } std::cout << std::endl; return 0; }

变量命名的最佳实践

有意义的名称

// 好的变量名 int studentAge = 20; double accountBalance = 1000.50; std::string fileName = "data.txt"; // 不好的变量名 int a = 20; // 无意义 double x = 1000.50; // 无意义 std::string s = "data.txt"; // 无意义

命名约定

// 蛇形命名法(snake_case) int student_age = 20; double account_balance = 1000.50; // 驼峰命名法(camelCase) int studentAge = 20; double accountBalance = 1000.50; // 帕斯卡命名法(PascalCase) - 通常用于类名 class StudentInfo { // 类成员 };

总结

C++ Primer Plus中关于变量的概念强调了以下几个关键点:

  1. 变量是命名存储空间:为程序提供可操作的命名内存区域

  2. 类型的重要性:类型决定内存大小、值范围和可用操作

  3. 变量与对象的互换性:在C++中这两个术语可以互换使用

理解变量的概念是学习C++编程的基础,它涉及到:

  • 内存管理

  • 类型系统

  • 作用域和生命周期

  • 初始化方式

  • 命名约定

通过合理使用变量,我们可以编写出清晰、高效、可维护的C++代码。变量不仅是存储数据的容器,更是构建复杂程序的基础构建块。

http://www.jsqmd.com/news/550227/

相关文章:

  • 想转行做Camera Tuning?过来人聊聊MTK/高通平台调试的真实日常与必备技能
  • 高并发场景下的FUTURE POLICE服务架构设计
  • 32岁转行AI大模型:小白程序员逆袭之路,内含收藏必备学习资源!
  • 大模型转行指南:收藏级干货!程序员小白轻松入行高薪赛道,附岗位选择与避坑攻略
  • PP-DocLayoutV3行业解决方案:为OCR厂商提供高精度Layout Layer增强模块
  • 开源飞行模拟插件:打造专业级虚拟飞行体验
  • 深入解析RRC测量报告:从事件触发到切换决策
  • Qwen3.5-4B-Claude-Opus-GGUF商业应用:中小企业AI客服知识库推理引擎构建
  • 零基础实战:用Kimi+扣子打造智能公众号客服,轻松上手
  • 人像动画工具LivePortrait:全平台部署与应用指南
  • hxjxhdhdhshdd
  • AudioSeal保姆级教程:AudioSeal模型缓存路径迁移与多用户隔离存储配置
  • 卫星通信开发避坑指南:3GPP NTN标准文档TR/TS系列详解与实操建议
  • LoRA训练助手应用场景:AI绘画比赛参赛者高效构建个性化LoRA模型
  • C++的std--ranges错误信息
  • AI原生应用领域:GPT的技术发展趋势预测
  • 无人机传感器技术解析:从IMU到激光雷达的全面指南
  • RabbitMQ实战指南:从基础到高级应用
  • Linux环境下Ollama离线部署本地大模型实战指南
  • R语言实战:用sf和ggplot2绘制带比例尺和指北针的专业地图(附完整代码)
  • 2026年SCI论文AI率5%以下怎么做到?这3款降AI工具帮你稳过顶刊
  • 通达信数据接口实战指南:从入门到精通的Python量化工具应用
  • 计算机毕业设计:基于Python的音乐推荐与情感分析系统 Flask框架 LSTM 可视化 Scrapy爬虫 协同过滤算法 歌曲 歌词 数据分析(建议收藏)✅
  • Unity游戏开发进阶:深度解析Ultimate Character Controller的核心架构与实战应用
  • 避坑指南:在Ubuntu 20.04上用3090显卡复现BEVfusion,我踩过的那些环境坑
  • 不知道怎么用Claude code?
  • BEYOND REALITY Z-Image GPU算力优化:24G显存支撑1024×1024 8K输出实测
  • OpenClaw内容创作:nanobot镜像辅助生成技术文章大纲与初稿
  • 实战应用:基于快马AI构建支持多用户续播的在线课程系统
  • OpCore-Simplify终极指南:一键自动化你的Hackintosh EFI配置