Effective C++ 学习笔记<1> 视C++为一个语言联邦
来源:互联网 发布:php伪造来路跳转 编辑:程序博客网 时间:2024/06/05 04:47
视C++为一个语言联邦
与其说C++是具有一些规范约束的一体语言,不如说C++是一些次语言组成的联邦政府,每个次语言都有自己的规
约,C++的高效编程就是建立在这些次语言上的,取决于你使用C++的哪一部分。也就是说,当你使用不同的part
of C++时,高效编程的方式是不同的。
为了理解C++,你必须认识其主要的次语言,幸运的是总共只有4个:
C
C++仍是以C为基础,并兼容了C的语法。但当你以C++的C成分工作时,高效编程守则映照出C语言的局限性:没有
异常,没有重载,没有模板。
Object-Oriented C++
包括类、封装、继承、多态等面向对象编程特性。
Template C++
C++的泛型编程部分
STL
这是个Template程序库。它将容器、迭代器、算法以及函数对象的规约有极佳的紧密配合与协调。
当你从某个次语言切换到另一个时,高效编程的方法可能会发生改变。比如说,在C中,传值一般比传引用要高效。
而在Object-Oriented C++中就不是这样了,因为对象传值的话会执行相应的构造函数和析构函数,这时传引用就会
比传值要高效了。
举例说明Object-Oriented C++中传引用的高效性。
#include <iostream>using namespace std;class A {public: A() { cout<<"dafault constructor"<<endl; } A(A &a) { cout << "copy constructor"<<endl; } ~A() { cout << "distructor"<<endl; } void print() { cout << "this is A"<<endl; }};void test(A a) { a.print();}int main() { A a; test(a); cout<<"end"<<endl;}
传值 结果为:
若改为传引用结果为:
void test(A &a) { a.print();}
还可以看到在传值时,析构函数调用了两次,如果写成这样
#include <iostream> #include <cstring> using namespace std; class A { char *r; public: A(char *b) { int n = strlen(b); r = new char[n + 1]; memcpy(r, b, sizeof b); } void print() { cout << r << endl; } ~A() { delete[] r; } }; void test(A a) { a.print(); } int main() { char b[] = "abc"; A a(b); test(a); return 0; }
则会两次调用delete [ ] r 导致内存问题。
因此
当你使用不同的part ofC++时,高效编程的方式是不同的。当你从某个次语言切换到另一个时,高效编程的方法也
可能会发生改变。C++的高效编程守则视状况而变化,取决于你使用C++的哪一个部分。
0 0
- 《Effective C++》学习笔记条款01 视C++为一个语言联邦
- [Effective C++] 条款01:视C++为一个语言联邦
- 菜鸟读《Effective C++》条款1:视C++为一个语言联邦
- Effective c++ 学习笔记——之条款1:视C++为一个语言联邦
- Effective C++ 学习笔记<1> 视C++为一个语言联邦
- Effective C++ 01 视C++为一个语言联邦 笔记
- Effective c++ 笔记—视c++ 为一个语言联邦
- 重读经典-《Effective C++》Item1:视C++为一个语言联邦
- effective C++(第三版)读书笔记一——条款一:视C++为一个语言联邦
- 《Effective C++》读后总结(一)视C++为一个语言联邦
- Effective c++ 学习笔记之条款一视C++为一个语言联邦
- 《Effect C++》学习------条款1 视C++为一个语言联邦
- effective c++条款1:视C++为一个语言联邦
- Effective C++ 笔记(1):视C++为语言联邦
- Effective C++ Item 01-视C++为一个语言联邦
- effective C++ 01_视C++为一个语言联邦
- 条款1 视c++为一个语言联邦(如何理解c++)
- Item 1:视C++为一个语言联邦【effective C++读书笔记】
- c# xmlserializer 序列化
- OpenStack Nova内部机制【译】
- 解决vsftp无法上传文件及文件夹的问题
- 后缀表达式求值--leetcode第二题
- UVA10194 Football (aka Soccer)
- Effective C++ 学习笔记<1> 视C++为一个语言联邦
- Stanford ML - Introduction 入门
- 常用jQuery选择器总结
- linux cc编译器
- 使用jquery prev()方法找到同级的前一个元素
- PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
- spinlock与linux内核调度的关系
- 花生壳
- HDU 3182