C++ 关键字

在这里插入图片描述

在这里插入图片描述


2. 命名空间(namespace)

作用:避免全局标识符冲突,实现作用域管理。

⚠️ 示例

代码语言:javascript

AI代码解释

#include <stdio.h>
#include <stdlib.h>
int rand = 10;

int main() {
    printf("%d", rand);  // 与 stdlib.h 的 rand 冲突,编译错误
    return 0;
}
2.1 定义命名空间

代码语言:javascript

AI代码解释

namespace test1 {
    int rand = 10;
    int Add(int l, int r) { return l + r; }
    struct Node {
        Node* next;
        int val;
    };
}
2.2 使用成员的方法

精确指定作用域test1::rand

using 引入某个成员

代码语言:javascript

AI代码解释

using test1::rand;
printf("%d", rand);

using namespace 完全展开

代码语言:javascript

AI代码解释

using namespace test1;
printf("%d", rand);

3. C++ 输入/输出(iostream)

代码语言:javascript

AI代码解释

#include <iostream>
using namespace std;
int main() {
    cout << "Hello, world!" << endl;
    return 0;
}
  • << 是输出流插入运算符,endl 换行并刷新。
  • 相比 printf/scanfcout/cin 能自动类型识别,更安全、简洁。

4. 缺省参数(Default Parameter)
4.1 定义与使用

代码语言:javascript

AI代码解释

void Func(int a = 0) {
    cout << a << endl;
}
Func();    // 输出 0
Func(10);  // 输出 10
4.2 分类
  • 全缺省:所有参数都有默认值。
  • 半缺省:只能从右向左省略参数。
⚠️ 注意事项
  1. 默认参数应出现在 声明 中,只写一次;
  2. 默认值必须是常量或全局变量;
  3. 只能从右起连续省略,中间不能跳缺。

5. 函数重载(Function Overloading)
5.1 支持条件

同名函数,只要参数列表不同(类型、个数、顺序),即构成重载;返回值不同不算。

5.2 示例

代码语言:javascript

AI代码解释

int Add(int, int);
double Add(double, double);

void f();
void f(int);
void f(int, char);
void f(char, int);
✅ 原理

C++ 编译器通过 name mangling 为不同签名改名,实现重载支持;C 语言不支持。


6. 引用(Reference)
6.1 基础概念

代码语言:javascript

AI代码解释

int a = 10;
int& ra = a;  // ra 是 a 的别名,二者共享内存
  • 必须初始化,且不能改变实体;
  • 可有多个引用指向同一对象。
6.2 使用场景
  1. 参数传递:修改调用方变量或减少拷贝开销。
  2. 返回值:尤其用于静态变量引用,避免临时对象。
    • 返回栈上对象引用会出错!
6.3 常引用(const&)

代码语言:javascript

AI代码解释

const int& ra = 10;
  • 防止修改,且可绑定临时值或常量。
6.4 性能提示

引用比传值快,特别是大对象或容器,可以减少或避免拷贝开销。


7. 内联函数(inline)
  • inline 修饰的小函数,会在编译期展开,去掉函数调用开销。
  • 不建议用于大型、递归或少用函数,否则可能导致可执行体积增大或忽略 inline。
  • 推荐在头文件中定义,防止链接错误。

8. auto 关键字(C++11)
  • 原是存储类别说明符,C++11 被重定义为编译器类型推断符。
  • 使用示例:

代码语言:javascript

AI代码解释

auto a = 10;     // int
auto b = 'x';    // char
auto c = func(); // 根据返回类型推断
⚠️ 注意:
  • 必须初始化;
  • 不能用于参数类型声明;
  • 避免误用:建议与范围 for 或 lambda 搭配使用。

9. 范围 for 循环(C++11)

代码语言:javascript

AI代码解释

int arr[] = {1,2,3,4,5};
for (auto& e : arr) {
    e *= 2;
}
  • 语法简洁、出错率低;
  • 要求类型支持 begin()end() 或迭代器操作。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐