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

C++ Programming Language —— 第1章:核心语法

目录

一、第一个C++程序

1.框架

2.代码

二、注释

1.作用

2.两种格式

3.提示

三、变量

1.变量的定义

2.变量的作用

3.变量的语法结构

① 基本声明语法

② 初始化方式

4.变量声明与定义

 5.变量类型

6.变量作用域

7.变量存储类别

8.常量与只读变量

 9.变量初始化

10.类型推导(C++11 起)

 11.变量的内存对齐(C++11 起)

12.右值引用与移动语义(C++11 起)

 13.原子变量(C++11 起)

14.结构化绑定(C++17 起)

 15.概念与约束(C++20 起)

16.变量模板(C++14 起)

 17.线程局部存储(C++11 起)

四、常量

1. 常量的定义

2. 常量的作用

3. 常量的语法结构

(1)使用const关键字

 (2)使用constexpr(C++11 及以后)

 (3)define 宏常量

(4)常量指针与指针常量

常量指针(指向常量的指针)

 指针常量(指针本身是常量)

 指向常量的常量指针

 (5)常量引用

 (6)类中的常量

常量成员变量

常量成员函数

 常量对象

4. 与宏定义的对比 

5. 注意事项

五、关键字

①作用

②基本使用的关键字

③常用关键字

1.int

2.float / double

 3.char

4.bool

 ④控制流关键字

1.if-else

 2.switch

 3.for

 4.while / do-while

 ⑤函数与类关键字

1.void

2.return

 3.class

 4.public / private / protected

⑥内存管理关键字

1.new / delete

2.static

⑦其他关键字

1.const

2.friend

3.this

六、标识符命名规则


一、第一个C++程序

1.框架

#include<iostream>
using namespace std;
int main() {system("pause");return 0;
}

2.代码

#include<iostream>
using namespace std;
/*这行代码声明使用标准命名空间(std)。命名空间是 C++ 中避免命名冲突的机制,标准库中的所有标识符都定义在 std 命名空间中。通过这行代码,我们可以直接使用cout和endl,而不必写成std::cout和std::endl。*/
int main() {
/*这行代码定义了程序的入口点 ——main函数。int表示该函数返回一个整数值(通常用于表示程序的退出状态)。括号()表示该函数不接受任何参数。大括号{标志着函数体的开始。*/cout << "Hello world" << endl;
/*这行代码是程序的核心功能。cout是标准输出流对象,<<是流插入运算符,用于向输出流中插入数据。这行代码将字符串字面量"Hello world"输出到控制台。endl是一个操纵符,用于插入换行符并刷新输出缓冲区。*/system("pause");
/*这行代码调用系统命令pause(在 Windows 系统中),作用是暂停程序执行,等待用户按下任意键继续。这通常用于调试环境,防止控制台窗口在程序执行完毕后立即关闭,以便用户能看到输出结果。*/return 0;
}

main是程序入口,只能有一个!!! 


二、注释

1.作用

在代码中加一些说明和解释,方便自己或其他程序员程序员阅读代码。

2.两种格式

单行注释// 描述信息——通常放在一行代码的上方,或者一条语句的末尾,==对该行代码说明==

多行注释 /* 描述信息 */——通常放在一段代码的上方,==对该段代码做整体说明==

3.提示

编译器在编译代码时,会忽略注释的内容。


三、变量

1.变量的定义

定义:变量是程序中用于存储数据的内存单元,每个变量具有特定的类型、名称和作用域,通过名称可以访问和操作其存储的值。


2.变量的作用

  1. 数据存储与传递:

    • 存储程序运行时需要处理的输入数据、中间结果或最终结果(如计算过程中的数值、用户输入的字符串等)。
    • 在函数、模块之间传递数据(如通过参数传递变量值)。
  2. 控制程序逻辑

    • 作为条件判断的依据(如 if (count > 10) 中的 count 变量)。
    • 用于循环计数(如 for (int i = 0; i < n; i++) 中的 i)。
  3. 抽象与复用

    • 通过命名变量简化复杂数据的表示(如用 pi 表示圆周率,提升代码可读性)。
    • 允许同一变量在不同场景中重复使用(如循环中反复更新计数器)。

3.变量的语法结构

① 基本声明语法

[存储类别] [类型说明符] [变量名] [初始化表达式];

  • 存储类别(可选):autostaticexternregisterthread_local 等(如 static int count;)。
  • 类型说明符(必须):基本类型(intdoublechar 等)或复合类型(数组、指针、引用等)。
  • 变量名(必须):符合标识符规则(字母、数字、下划线,不能以数字开头,不与关键字冲突)。
  • 初始化表达式(可选):如 = 值 或 {值}(如 int x = 10; 或 double y{3.14};)。

② 初始化方式


4.变量声明与定义

变量声明告知编译器变量的类型和名称,而定义则会为变量分配内存空间。

int a;          // 声明并定义变量 a
extern int b;   // 仅声明变量 b,告诉编译器 b 在其他地方定义

例如:

#include<iostream>
using namespace std;
int main() {//变量的定义//语法:数据类型  变量名 = 初始值int a = 10;cout << "a = " << a << endl;//a = 10system("pause");return 0;
}

 5.变量类型

C++ 提供了多种基本数据类型,也支持用户自定义类型。

// 基本数据类型
int num = 42;           // 整数
double pi = 3.14;       // 双精度浮点数
char letter = 'A';      // 字符
bool isTrue = true;     // 布尔值
std::string name = "Doubao";  // 字符串(需包含 <string> 头文件)// 复合类型
int arr[5] = {1, 2, 3, 4, 5};  // 数组
int* ptr = &num;               // 指针
int& ref = num;                // 引用

6.变量作用域

变量的作用域决定了它的可见性和生命周期。

void func() {int x = 10;  // 局部变量,仅在函数内部可见if (true) {int y = 20;  // 块作用域变量,仅在 if 语句块内可见}
}  // x 和 y 的生命周期在此结束int global = 100;  // 全局变量,整个程序都可见

7.变量存储类别

变量的存储类别决定了其内存分配方式和生命周期。

// 自动变量(默认)
{int autoVar = 5;  // 等价于 auto int autoVar = 5;
}  // 离开作用域时自动销毁// 静态变量
void staticDemo() {static int count = 0;  // 静态局部变量,函数调用间保持值count++;
}// 外部变量(使用 extern)
extern int externalVar;  // 声明外部定义的变量// 寄存器变量
register int regVar = 10;  // 建议编译器将变量存储在寄存器中

8.常量与只读变量

使用 const 和 constexpr 定义不可修改的变量。

const double gravity = 9.8;  // 常量,定义后不可修改
constexpr int maxValue = 100;  // 编译时常量,必须在编译时确定值int num = 5;
const int& constRef = num;  // 对常量的引用,不能通过引用修改 num

 9.变量初始化

C++ 提供多种初始化方式。

int a = 10;       // 拷贝初始化
int b(20);        // 直接初始化
int c{30};        // 列表初始化(C++11),防止缩窄转换
int d = {40};     // 拷贝列表初始化// 动态初始化
int e = func();   // 使用函数返回值初始化

10.类型推导(C++11 起)

使用 auto 和 decltype 自动推导变量类型。

auto x = 10;          // x 为 int 类型
auto y = 3.14;        // y 为 double 类型
decltype(x) z = 20;   // z 为 int 类型,与 x 类型相同

 11.变量的内存对齐(C++11 起)

使用 alignas 控制变量的对齐方式。

alignas(16) char buffer[64];  // 缓冲区按 16 字节对齐

12.右值引用与移动语义(C++11 起)

使用右值引用 && 绑定临时对象,实现移动语义。

int&& rref = 10 + 20;  // 右值引用绑定到临时表达式

 13.原子变量(C++11 起)

使用 std::atomic 定义原子操作的变量,用于多线程编程。

#include <atomic>
std::atomic<int> counter(0);  // 原子计数器,多线程安全

14.结构化绑定(C++17 起)

从聚合类型中解包变量。

std::pair<int, double> p = {1, 2.3};
auto [a, b] = p;  // a 为 int 类型,b 为 double 类型

 15.概念与约束(C++20 起)

使用概念约束变量类型。

#include <concepts>
template <std::integral T>
T add(T a, T b) {return a + b;
}

16.变量模板(C++14 起)

定义模板化的变量。

template <typename T>
constexpr T pi = T(3.1415926535897932385);

 17.线程局部存储(C++11 起)

使用 thread_local 定义线程局部变量。

thread_local int threadID = 0;  // 每个线程拥有自己的副本

四、常量

1. 常量的定义

是程序运行期间其值不可被修改的量。在 C++ 中,常量一旦被初始化,就不能再被赋值。通过使用常量,可以提高代码的安全性和可维护性。


2. 常量的作用

  • 防止意外修改:确保变量值在初始化后不会被改变。
  • 提高代码可读性:用有意义的名称代替字面量(如PI代替3.14159)。
  • 便于维护:修改常量定义时,所有引用处会自动更新。
  • 编译期优化constexpr常量在编译时求值,提升运行效率。

3. 常量的语法结构

(1)使用const关键字

const 数据类型 常量名 = 初始值;

示例

const int MAX_SIZE = 100;
const double PI = 3.14;

 (2)使用constexpr(C++11 及以后)

constexpr 数据类型 常量名 = 常量表达式;

 示例

constexpr int SQUARE(int x) { return x * x; }
constexpr int RESULT = SQUARE(5); // 编译时计算为25

 (3)define 宏常量

#define 常量名 常量值

 通常在文件上方定义,表示一个常量.示例:

#define day 7
int main() {cout << "一周里总共有 " << day << " 天" << endl;//day = 8;  //报错,宏常量不可以修改//2、const修饰变量const int month = 12;cout << "一年里总共有 " << month << " 个月份" << endl;//month = 24; //报错,常量是不可以修改的system("pause");return 0;
}

(4)常量指针与指针常量

  • 常量指针(指向常量的指针)

 const 数据类型* 指针名; // 或 数据类型 const* 指针名;

const int* p;
int a = 10;
p = &a; // 合法
// *p = 20; // 非法:不能通过指针修改值
  •  指针常量(指针本身是常量)

数据类型* const 指针名 = &初始值;

int a = 10, b = 20;
int* const p = &a;
*p = 20; // 合法:可以修改指向的值
// p = &b; // 非法:不能修改指针本身
  •  指向常量的常量指针

const 数据类型* const 指针名 = &初始值;

const int* const p = &a;
// *p = 20; // 非法:不能修改指向的值
// p = &b;  // 非法:不能修改指针本身

 (5)常量引用

const 数据类型& 引用名 = 被引用对象;

const int& ref = a;
// ref = 20; // 非法:不能通过引用修改值

 (6)类中的常量

  • 常量成员变量

在构造函数初始化列表中初始化。

class MyClass {
public:const int value;MyClass(int val) : value(val) {} // 必须在初始化列表中赋值
};
  • 常量成员函数

返回类型 函数名(参数列表) const; 

示例:

class MyClass {
public:int getData() const { return data; } // 常量成员函数
private:int data;
};
  •  常量对象

const 类名 对象名(参数);

const MyClass obj(10);
obj.getData(); // 只能调用常量成员函数

4. 与宏定义的对比 


5. 注意事项

  • const变量必须初始化:定义时必须赋值,否则会编译错误。
  • constexpr要求:用于编译期常量,函数体必须足够简单(如纯计算)。
  • 类中的静态常量:静态常量成员需在类外初始化(除非使用inlineconstexpr)。

五、关键字

①作用

关键字是C++中预先保留的单词(标识符)

②基本使用的关键字


③常用关键字

1.int

  • 定义:用于声明整数类型的变量
  • 作用:存储整数值,范围与具体实现相关。
  • 语法表达int 变量名;
  • 示例
int age = 25;
int sum = 10 + 20;

2.float / double

  • 定义用于声明浮点类型的变量,float为单精度,double为双精度。
  • 作用:存储带有小数部分的数值。
  • 语法表达float 变量名; 或 double 变量名;
  • 示例
float price = 9.99f;
double pi = 3.1415926;

 3.char

  • 定义:用于声明字符类型的变量
  • 作用:存储单个字符,实际存储的是字符的 ASCII 码值。
  • 语法表达char 变量名;
  • 示例
char grade = 'A';
char initial = 'J';

4.bool

  • 定义:用于声明布尔类型的变量
  • 作用:存储逻辑值,只有 true 和 false 两个值。
  • 语法表达bool 变量名;
  • 示例
bool isStudent = true;
bool hasLicense = false;

 ④控制流关键字

1.if-else

  • 定义:用于基于条件执行不同的代码块。
  • 作用:实现分支逻辑
  • 语法表达
if (条件表达式) {// 条件为真时执行的代码
} else {// 条件为假时执行的代码
}
  • 示例
int score = 85;
if (score >= 60) {cout << "及格" << endl;
} else {cout << "不及格" << endl;
}

 2.switch

  • 定义:基于一个表达式的值,选择执行多个代码块中的一个。
  • 作用:替代多个 if-else 语句,使代码更清晰。
  • 语法表达
switch (表达式) {case 值1:// 表达式等于值1时执行的代码break;case 值2:// 表达式等于值2时执行的代码break;default:// 表达式不等于任何 case 时执行的代码
}
  • 示例
int day = 3;
switch (day) {case 1:cout << "星期一" << endl;break;case 2:cout << "星期二" << endl;break;default:cout << "其他" << endl;
}

 3.for

  • 定义:用于实现循环结构,在条件满足时重复执行代码块。
  • 作用:简化需要重复执行的代码。
  • 语法表达
for (初始化表达式; 条件表达式; 递增/递减表达式) {// 循环体
}
  • 示例
for (int i = 0; i < 5; i++) {cout << i << endl;
}

 4.while / do-while

  • 定义while 在循环开始时检查条件,do-while 在循环结束时检查条件。
  • 作用:实现循环逻辑
  • 语法表达
while (条件表达式) {// 循环体
}do {// 循环体
} while (条件表达式);
  • 示例
int i = 0;
while (i < 5) {cout << i << endl;i++;
}int j = 0;
do {cout << j << endl;j++;
} while (j < 5);

 ⑤函数与类关键字

1.void

  • 定义:表示无返回值或无参数类型
  • 作用:用于函数返回类型或参数列表中。
  • 语法表达void 函数名(); 或 返回类型 函数名(void);
  • 示例
void printHello() {cout << "Hello" << endl;
}

2.return

  • 定义:用于从函数中返回值并终止函数执行
  • 作用:将结果返回给函数调用者。
  • 语法表达return 表达式; 或 return;(用于 void 函数)
  • 示例
int add(int a, int b) {return a + b;
}

 3.class

  • 定义:用于定义类,类是面向对象编程的基本单元。
  • 作用:封装数据和方法,实现数据隐藏和继承。
  • 语法表达
class 类名 {访问修饰符:成员变量;成员函数;
};
  • 示例
class Rectangle {
private:int width, height;
public:int getArea() { return width * height; }
};

 4.public / private / protected

  • 定义:访问修饰符,用于控制类成员的访问权限
  • 作用:实现封装,保护数据不被随意访问。
  • 语法表达:在类定义中使用。
  • 示例
class Person {
private:string name;
protected:int age;
public:void setName(string n) { name = n; }
};

⑥内存管理关键字

1.new / delete

  • 定义用于动态分配和释放内存
  • 作用:在运行时创建和销毁对象。
  • 语法表达
类型* 指针名 = new 类型;
delete 指针名;
  •  示例
int* ptr = new int;
*ptr = 100;
delete ptr;

2.static

  • 定义用于声明静态变量或函数
  • 作用:静态变量在程序的整个生命周期内存在,静态函数属于类而不是对象。
  • 语法表达static 类型 变量名; 或 static 返回类型 函数名();
  • 示例
class Counter {
public:static int count;static int getCount() { return count; }
};
int Counter::count = 0;

⑦其他关键字

1.const

  • 定义用于声明常量,保证变量值不被修改
  • 作用:提高程序的安全性和可读性。
  • 语法表达const 类型 变量名 = 值; 或 类型 const 变量名 = 值;
  • 示例
const int MAX_SIZE = 100;

2.friend

  • 定义用于声明友元函数或友元类
  • 作用:允许非成员函数或其他类访问当前类的私有和保护成员。
  • 语法表达friend 返回类型 函数名(参数列表); 或 friend class 类名;
  • 示例
class Point {
private:int x, y;friend void printCoordinates(Point p);
};
void printCoordinates(Point p) {cout << "(" << p.x << ", " << p.y << ")" << endl;
}

3.this

  • 定义指向当前对象的指针。
  • 作用:在类的成员函数中访问当前对象的成员。
  • 语法表达this->成员名
  • 示例
class Circle {
private:double radius;
public:Circle(double r) { this->radius = r; }
};

六、标识符命名规则

①作用:C++规定给标识符(变量、常量)命名时,有一套自己的规则。

  1. 标识符不能是关键字
  2. 标识符只能由字母、数字、下划线组成
  3. 第一个字符必须为字母或下划线
  4. 标识符中字母区分大小写

②建议:给标识符命名时,争取做到见名知意的效果,方便自己和他人的阅读。

相关文章:

  • C++ 中的尾调用优化TCO:原理、实战与汇编分析
  • Android 中使用 OkHttp 创建多个 Client
  • 【Dv3Admin】系统视图角色菜单按钮权限API文件解析
  • 【Qt】Qt生成的exe依赖库与打包
  • 206. 2013年蓝桥杯省赛 - 打印十字图(困难)- 模拟
  • React Native 基础语法与核心组件:深入指南
  • 后进先出(LIFO)详解
  • 深入解析 sock_skb_cb_check_size 宏及其内核安全机制
  • Spring Boot + Vue 前后端分离项目解决跨域问题详解
  • 一套键鼠控制多台电脑
  • u盘插入电脑后显示无媒体,无盘符,无空间,无卷的修复办法
  • 在写外部FLASH的应用时发现一些问题,在这里分享一下我的想法
  • 【Dv3Admin】系统视图角色管理API文件解析
  • 在Word中使用 Microsoft Print to PDF和另存为PDF两种方式生成的 PDF文件
  • Docker 操作容器[SpringBoot之Docker实战系列] - 第538篇
  • bilibili-mcp 使用示例
  • JBank:Jucoin 推出的 Web3 去中心化自托管银行金融协议
  • 服务器硬防的应用场景都有哪些?
  • Deepin 25 安装字体
  • 第二部分-IP及子网划分
  • 北京做微信网站哪家好/宁波seo排名外包
  • 做挂件的网站/搜索大全引擎入口
  • 英文网站建设580/百度自媒体平台
  • 石家庄网站建设系统/电商网站建设步骤
  • 网站建设金牛万达/站长工具ip查询
  • 闵行西安网站建设/东莞seo外包公司