跳转至

杂谈

何为“普通”?

在 C++ 中,“普通”一词并没有特殊的语言定义,它只是作者或教学材料中常用的**通俗化表述**,目的是通过对比帮助读者区分某些概念。以下是具体分析:


“普通”在不同语境中的含义

1. “普通变量”

  • 实际含义:通常指**非动态分配、非静态、非类成员的基本类型变量**(如 int a;),或泛指默认情况下的变量定义方式。
  • 对比对象
    • 动态分配的变量(如 int* p = new int;)。
    • 静态变量(如 static int s;)。
    • 类成员变量(如类中定义的 int m_value;)。
  • 例如
    int a = 10;             // “普通”变量(自动存储期,基本类型)
    static int s = 20;      // 静态变量(非“普通”)
    MyClass obj;            // “普通”类对象(栈上分配,语法与基本类型类似)
    

2. “普通成员函数”

  • 实际含义const 的成员函数(即没有 const 修饰符的成员函数)。
  • 对比对象const 成员函数(如 void func() const;)。
  • 例如
    class MyClass {
    public:
        void modify() { /* 修改对象状态 */ }  // “普通”成员函数(非 const)
        void read() const { /* 只读操作 */ }  // const 成员函数(非“普通”)
    };
    

3. “普通引用”

  • 实际含义const 的引用(即可以修改被引用对象的引用)。
  • 对比对象const 引用(如 const int& r = x;)。
  • 例如
    int x = 10;
    int& r1 = x;       // “普通”引用(可通过 r1 修改 x)
    const int& r2 = x; // const 引用(不可通过 r2 修改 x)
    

为什么使用“普通”这种表述?

  1. 降低理解门槛
    对于初学者来说,“普通”一词更直观,能快速区分默认/常见情况与特殊修饰的情况(如 const)。

  2. 强调对比
    在教学中,作者希望通过“普通”与“特殊”的对比,突出某些特性(如 conststatic)的作用。例如:

  3. “普通成员函数” vs “const 成员函数”:前者可修改对象,后者不可。
  4. “普通引用” vs “const 引用”:前者可修改目标对象,后者不可。

  5. 避免术语堆砌
    直接使用“非 const 成员函数”或“非 const 引用”虽然准确,但可能让文本显得冗长。用“普通”替代可以简化表达。


“普通”与标准术语的对应关系

通俗表述 C++ 标准术语 示例
普通变量 自动存储期的基本类型变量 int a;
普通成员函数 const 成员函数 void func();
普通引用 const 引用 int& r = x;

需要注意的误区

  • “普通”并非标准术语
    在 C++ 标准文档或正式讨论中,不会用“普通”描述这些概念,而是直接使用精确的术语(如 non-const member function)。

  • 上下文依赖
    “普通”的含义可能因上下文变化。例如,在讨论内存分配时,“普通变量”可能指栈上变量;在讨论函数修饰符时,则指非 const 函数。


总结

  • “普通”是教学中的通俗说法,用于简化描述默认或常见情况。
  • 核心目的是对比:通过“普通”与“特殊”(如 conststatic)的对比,帮助理解语言特性。
  • 实际编程中应使用标准术语:如 非 const 成员函数非 const 引用,以确保准确性。