Effective C++ 条款01:视 C++ 为一个语言联邦

Effective C++ 条款01:视 C++ 为一个语言联邦

本篇为《Effective C++:改善程序与设计的 55 个具体做法》读书笔记系列第一篇。

开篇引言

很多初学者在刚接触 C++ 时,常常会有这样的困惑:

  • 为什么 C++ 既有面向过程的语法,又有面向对象的特性?
  • 为什么模板(Template)的编程思维和写普通类完全不一样?
  • 为什么 STL 的使用方式看起来如此"函数式"?

Scott Meyers 在《Effective C++》开篇第一条就给出了答案:C++ 不是一个单一的编程语言,而是一个由多个次语言(sublanguages)组成的联邦。

理解这一点,是掌握 C++ 高效编程的基石。

核心观点

C++ 是一个多重范式编程语言(multi-paradigm programming language)。在同一个次语言中,各种高效编程守则简单易懂;但当你从一个次语言切换到另一个次语言时,守则可能会完全改变。

高效编程守则视状况而变化,取决于你使用 C++ 的哪一部分。

四大次语言详解

C++ 主要由以下四个次语言组成:

次语言 核心特性 适用场景
C 过程式编程、指针、数组、底层内存操作 系统编程、嵌入式、性能敏感代码
Object-Oriented C++ 类、继承、多态、封装、虚函数 大型软件架构、设计模式
Template C++ 泛型编程、模板元编程(TMP) 通用库、编译期计算、类型抽象
STL 容器、算法、迭代器、函数对象 数据结构与算法、标准库使用

1. C —— 过程式的基础

C++ 最初被命名为 “C with Classes”,它以 C 语言为基础。C 次语言涵盖了:

  • 基本数据类型(intchardouble 等)
  • 指针和数组
  • 流程控制(ifforwhile
  • 函数和结构体
  • 预处理器(#include#define

代码示例:

#include <cstdio>
#include <cstring>

// 纯 C 风格的字符串操作
void c_style_example() {
   
   
    char buffer[256];
    strcpy(buffer, "Hello, C!");
    printf("%s\n", buffer);
}

在这个次语言中,高效编程守则是 C 语言的那一套:避免不必要的抽象,直接操作内存,关注性能细节。

2. Object-Oriented C++ —— 面向对象的扩展

这是 C++ 最初的设计目标,也是大多数开发者最熟悉的部分:

  • 类(class)和对象
  • 继承(inheritance)
  • 多态(polymorphism)与虚函数
  • 封装(encapsulation)

代码示例:

#include <iostream>
#include <string>

class Shape {
   
   
public:
    virtual double area() const = 0;  // 纯虚函数
    virtual ~Shape() = default;
};

class Circle : public Shape {
   
   
public:
    Circle(double r) : radius(r) {
   
   }
    
    double area() <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凡人叶枫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值