<初学C++ Primer Plus>争取一次性搞清楚那些乱七八糟的符号

为什么想系统了解C++语言的内容

学习过程中的困扰

        中文跟英文有巨大的区别,计算机语言又都是用的英文,这很容易导致同样的概念用中文翻译过来之后的就让人晕头转向。

        比如C++ Primer Plus中文版,从第2章涉及到C++程序开始,cout就没翻译清楚。首先英文版刚开始介绍cout时就用括号标注了读音(pronounced"see-out"),中文翻译视而不见,简单的东西硬是漏翻掉让人去猜;其次,cout在英文版里就对应两个词,object和facility,对C++来说是对象,对程序员来说是工具,但中文翻译却在初学者还没熟悉概念的时候,紧随其后蹦出一个cout函数概念,cout这玩意一会儿是对象,一会儿是工具,一会儿给翻成了函数,问题是后面详细介绍的时候又明确指出它是对象,这不禁让初学者困惑。如果翻译校订仔细,相信能发现这个错误:“seeing cout instead of the printf() function”被翻译成“看到cout函数(而不是printf()函数)时”,C语言中printf()确实是函数,但是C++中cout不是函数,用C++的语言来说它就是对象。其他地方这里就不举例了,建议如果看得仔细的话,可以配上英文版纸质或电子版。


        所以,其实我们有必要去梳理下C++语言的设计逻辑,这样凭着自己的深层次的基础性理解,无论看中文还是英文,都不容易被带偏,毕竟尽信书不如无书,实践出真知,书本只是基础。


剖析思考C++语言

        计算机语言其实跟人类的语言是类似的东西,毕竟都叫做语言。人类的语言也有千差万别,机器的语言也是一样,这很容易让人联想到圣经里的巴别塔,其实上帝不光让人类说不同的语言,也让万物之间不能沟通,人类向往天堂,且一直在建造通往天堂的巴别塔,可以说任重而道远。

        华为鸿蒙的野心是做物联网时代万物互联的基础操作系统,允许我断章取义,真正能做到万物互联的是神而不是人。我们对未来还是充满信心,能做的要做的事情太多了。什么时候能用中文做操作系统底层架构那咱们就真牛了,咱也不用被汉化的知识整懵逼了。

        回归正题:为了搞清楚C++语言,我们还是得从最底层的最基础也是最简单的逻辑去剖析理解。作为初学者我个人粗略认为,C++程序是由C++语言内置的词汇或者说预定义内容和程序员自定义的内容组成,当我询问AI可以这么理解吗?得到了更详细的解读:


        你的理解基本正确,但可以更精确地分层表述。C++程序的构成确实可以看作​语言内置词汇(预定义内容)与​程序员自定义内容​的交互,但需要进一步明确其层次关系和交互规则。以下是更系统的分析:

C++程序内容系统分析


​1. 构成要素分类​

​(1) 语言内置词汇(预定义内容)​
  • ​关键词(Keywords)​
    int, if, class, template 等,不可被重定义或修改。
  • ​运算符(Operators)​
    +, <<, -> 等,部分可重载(如operator+),但核心语义固定。
  • ​特殊标识符(Reserved Identifiers)​
    main, operator new, typeid 等,具有标准规定的特殊行为。
  • ​字面量(Literals)​
    42, "hello", nullptr 等,语法形式固定。
  • ​预处理器符号​
    #define, #include 等,在编译前处理。
​(2) 程序员自定义内容​
  • ​标识符(Identifiers)​
    变量名(count)、函数名(calculate)、类名(MyClass)等。
  • ​运算符重载​
    自定义operator+等,但必须遵循语言规定的重载规则。
  • ​类型系统扩展​
    通过class/struct定义新类型,或通过typedef/using创建类型别名。
  • ​宏(谨慎使用)​
    #define MAX 100,但可能污染命名空间。

​2. 二者的交互逻辑​

graph LR
    A[语言内置词汇] -->|提供基础规则| B[程序员自定义内容]
    B -->|遵循| C[语法约束]
    B -->|扩展| D[新功能]
    A -->|限制| B
​(1) 依赖关系​
  • ​自定义内容必须基于内置词汇的规则​
    例如:
    class MyClass {          // 使用关键词`class`
        int value;           // 使用内置类型`int`
        void print() const;  // 使用`const`修饰符
    };
​(2) 扩展机制​
  • ​有限度的自由​
    • 可重载运算符,但不能创建新运算符(如不能定义**表示幂运算)。
    • 可定义新类型,但必须通过已有类型组合(如class/enum)。
​(3) 边界控制​
​自定义行为​ ​语言限制​ 示例
定义变量名 不能与关键词冲突 int class;
重载运算符 必须保留原始优先级和结合性 a + b 永远先于 a << b
实现main函数 必须符合标准签名 int main(int, char*[])

​3. 设计哲学体现​

​(1) 约束与自由的平衡​
  • ​约束性规则​​(保证可预测性)

    int x = 42;    // 类型必须明确(或通过`auto`推导)
    x = "hello";   ❌ // 禁止隐式类型不匹配赋值
  • ​扩展性自由​​(支持领域特定设计)

    class Matrix {
    public:
        Matrix operator*(const Matrix& rhs);  // 自定义矩阵乘法
    };
​(2) 显式优于隐式​
  • 自定义内容需显式声明:
    explicit Data(int bytes);  // 禁止隐式转换
    override void draw();      // 显式标记覆盖
​(3) 零开销抽象​
  • 自定义类型与内置类型性能等价:
    std::array<int, 100> arr;  // 编译时确定大小,与内置数组性能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值