第十章

来源:互联网 发布:html5 移动商城源码 编辑:程序博客网 时间:2024/04/27 14:17
1.编译器在每次函数调用时使堆栈的指针向下移动一个适当的位置,为这些局部变量分配空间
2.c和c++都允许在函数内部定义一个static对象,这个对象将存储在程序的静态数据区中
3.无论什么时候设计一个包含静态变量的函数时,都应该记住多线程问题
4.静态对象的析构函数在程序从main()中退出时,或者标准的c库函数exit()被调用时才被调用。多数情况下main()函数的结尾也是调用exit()来结束程序的。但是如果用标准的c库函数abort()来退出程序,静态对象的析构函数并不会被调用
5.如果一个包含局部静态对象的函数从未被调用过,那么这个对象的构造函数也就不会执行,这样自然也不会有析构了
6.lei a是一个全局的lei类的对象,所以构造函数总是在main()函数之前就被调用
7.这些名字有内部连接,这意味着可以在其他的翻译单元中使用同样的名字,而不会发生名字冲突
8.如果把局部变量声明为extern,这意味着某处已经存在一个存储区(所以该变脸对函数来说实际上是全局的)
9.一个namespace的名字可以用另一个名字来作它的别名 namespace Bob=Bobsupername;
10.在一个未命名的空间中的名字自动地在翻译单元内无限制地有效。但是确保每个翻译单元只有一个未命名的名字空间,空间里的数据自动为内部连接。
11.可以在一个名字空间的类定义之内插入一个友元声明:友元函数就成了名字空间的一个成员了
12.使用名字空间的方法:Using指令  Using声明  作用域运算符
13.Using指令和声明均在它所在的{}或文件中才有效
14.Using声明也可以出现在一个名字空间内,其作用与在其他地方时一样
#include "UsingDeclaration.h"
namespace Q {
  using U::f;
  using V::g;
  // ...
}
void m() {
  using namespace Q;
  f(); // Calls U::f();
  g(); // Calls V::g();
}
15.不要把一个全局的Using指令引入到一个头文件的全局区
16.所有static数据成员(变量,数组,对象)都必须在类外初始化,但是static const int num=100;也可以在类内初始化
17.函数内部定义的类(局部类)中有静态数据成员
18嵌套类
class Outer {
  class Inner {
    static int i; // OK在外使用Inner应该为Outer::Inner
  };
};


int Outer::Inner::i = 47;
18.静态成员函数和数据成员调用“.”“->”“::”
19.因为静态成员函数没有this指针,所以它不能访问非静态成员,只能访问静态成员
20.把构造函数变成私有的
#include <iostream>
using namespace std;


class Egg {
  static Egg e;
  int i;
  Egg(int ii) : i(ii) {}
  Egg(const Egg&); // Prevent copy-construction
public:
  static Egg* instance() { return &e; }
  int val() const { return i; }
};

Egg Egg::e(47);

int main() {
//!  Egg x(1); // Error -- can't create an Egg
  // You can access the single instance:
  cout << Egg::instance()->val() << endl;
} ///:~





















原创粉丝点击