一、命名空间(namespace)

C++ 引入了 namespace 解决 C 语言中名字冲突的问题。它可以将全局作用域进行本地化分割。

示例 1:命名空间的定义与使用

#include <iostream>
namespace Calc {
    int add(int a, int b) { return a + b; }
    int sub(int a, int b) { return a - b; }
}
int main() {
    int sum = Calc::add(10, 20);
    int diff = Calc::sub(20, 5);
    std::cout << sum << " " << diff << "\n";
    return 0;
}

二、C++ 输入输出

C++ 使用 cout 和 cin 进行插流式输入输出,不再需要手动控制格式。

示例 2:C++ 流输入输出

#include <iostream>
#include <string>
int main() {
    std::string name;
    int age;
    std::cout << "Enter name and age: ";
    std::cin >> name >> age;
    std::cout << name << ", " << age << " years old\n";
    return 0;
}

三、缺省参数

缺省参数允许为函数参数指定默认值,调用时未传入则使用默认值。这一特性在构造函数中将发挥重要作用。

示例 3:全缺省与半缺省参数

#include <iostream>
void greet(const char* name = "Guest") {
    std::cout << "Hello, " << name << "!\n";
}
void order(int main_dish, int drink = 1) {
    std::cout << "Main: " << main_dish << ", Drink: " << drink << "\n";
}
int main() {
    greet();
    greet("Alice");
    order(5);
    order(3, 2);
    return 0;
}

四、函数重载

C++ 允许同一作用域中声明多个名称相同但形参不同的函数。原理是编译器通过名字修饰机制区分。

示例 4:函数重载

#include <iostream>
int max(int a, int b) { return a > b ? a : b; }
double max(double a, double b) { return a > b ? a : b; }
int main() {
    std::cout << max(3, 7) << "\n";
    std::cout << max(3.14, 2.71) << "\n";
    return 0;
}

五、引用

引用是已存在变量的别名,在传参和传回归值时可显著提升性能。它在拷贝构造函数和赋值运算符重载中有直接应用。

示例 5:引用作为参数和返回值

#include <iostream>
void swap(int& a, int& b) {
    int tmp = a;
    a = b;
    b = tmp;
}
int global = 0;
int& counter() { return global; }
int main() {
    int x = 10, y = 20;
    swap(x, y);
    std::cout << x << "," << y << "\n";
    counter() = 42;
    std::cout << counter() << "\n";
    return 0;
}

其他重要特性

  • inline 内联函数:以空间换时间,省去函数调用开销。类中定义的成员函数默认被视为 inline
  • auto 关键字(C++11):编译器自动推导变量类型
  • 基于范围的 for 循环(C++11):简洁遍历数组或容器
  • nullptr(C++11):专门表示指针空值,解决 NULL 的二意性问题

示例 6:inline、auto、范围 for、nullptr 综合应用

#include <iostream>
#include <vector>
inline int square(int x) { return x * x; }
int main() {
    std::vector<int> nums = {1,2,3,4,5};
    for (auto& n : nums) n = square(n);
    for (auto n : nums) std::cout << n << " ";
    std::cout << "\n";
    int* p = nullptr;
    if (p == nullptr) std::cout << "null\n";
    return 0;
}

总结

本篇介绍了 C++ 入门的核心特性。其中引用是后续类与对象学习的重中之重。下一篇《类与对象(上篇)》将正式进入面向对象编程的世界。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐