您的位置:首页 > 编程语言 > C语言/C++

effective C++ 读书笔记(0-2)

2011-09-07 11:10 169 查看
1:

const int * ptr 指向常量(read only)的指针

对指针重新赋值可以

对指针指向的内容重新赋值不行

int * const ptr 指向的指针常量

2:

在类的声明中 声明一个 static const 型成员变量 是可以的

class A

{

private:

static const int num = 5;

int Array[num];

};

这里对于变量 num 不需要 在定义就可以使用

但注意这里 只能声明 const型的成员变量

对于 static 非const 成员变量

class A

{

private:

static int num = 5;

int Array[num];

};

这样子会报错!

..\/basic.h:15:19: error: ISO C++ forbids in-class initialization of non-const static member 'num'
..\/basic.h:16:15: error: array bound is not an integer constant before ']' token

解决办法 就是在.cpp文件中 定义咯~

4:

the enum hack

看起来好像 这和 static const unsigned 成员变量 没什么区别

class A

{

public:

static const int num = 5;

enum {numEnum = 5};

int scores[num];

int shit[numEnum];

};

但实际上 enum 的内容与define 很类似

取一个 static const int 成员变量的值是合法的

但是取一个 enum 或是 define 出来的变量的值是不合法的

int main()

{

A a;

cout<<&a.num<<endl;

cout<<&a.numEnum<<endl; //error!

return 0;

}

enum分配出来的东西不会导致额外的内存分配

5:
(1) 对于C-like 类型而言 (也即是 内置类型
pass-by-value 往往比 pass-by-reference 高效
(2)但是对于C++ 来讲 由于存在 构造与析构函数
pass-by-reference-to-const 往往更高效
(3)对于template C++而言更是如此 应为我甚至不知道所处理对象的类型
所以pass-by-reference-to-const 比较好

#ifndef BASIC_H_
#define BASIC_H_
#include <iostream>
using namespace std;
class A
{
public:
static const int num = 5;
enum {numEnum = 5};
int scores[num];
int shit[numEnum];
template <class T>
inline const T& callWithMax(const T& a,const T& b)
{
return (a>b?a:b);
}
};
class B
{
public :
int a;
inline bool operator >(const B &ref) const
{
return a>ref.a;
}
friend ostream& operator <<(ostream &os,const B &ref);
B(int temp):a(temp){};
};

#endif /* BASIC_H_ */

#include "basic.h"
ostream & operator <<(ostream & os,const B &b)
{
cout<<b.a<<endl;
return os;
}

#include <iostream>
#include <list>
#include <map>
#include "basic.h"
using namespace std;

int main()
{
A a;
B b1(1),b2(2);
cout<<a.callWithMax(b1,b2)<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: