Effective C++读书笔记(0)

来源:岁月联盟 编辑:exp 时间:2012-02-04
美国联邦调查局(FBI)局长罗伯特·米勒2日表示,在不远的未来,网络恐怖主义会成为与当前恐怖主义模式相当或更严重的威胁。
 
    米勒当天在参议院举行的关于全球威胁的听证会上警告说,FBI和其他情报机构应改变结构,以应对这类日益严重的威胁。
 
    米勒说:“关于互联网目前我们做得很少。侵犯知识产权、窃取研发成果、窃取企业发展方案和计划等,所有这些事件都很容易被攻击者利用。”
 
    他还表示,情报机构应该像9·11恐怖袭击后那样“共享信息”。他强调说:“我们必须建立应对此类威胁的共同机制,就像9·11后我们所做的那样,打破部门间的藩篱。”
 
    米勒希望国会能通过一项应对网络恐怖主义威胁的法案,把调查和情报机构变成“信息接收者”。他说,这将有助于FBI和其他机构分享关于某个案件的信息。
 
    米勒在周二举行的一次听证会上曾警告说,应把网络恐怖主义、黑客攻击、战略网络的脆弱性对美国构成的威胁放在头等重要的位置。
 
    他说,制止恐怖主义袭击是FBI当前的首要任务,但未来网络威胁将成为美国最大的安全问题。 作为明年7月入职的职场新人,虽然大学里写了不少project,但实战经验匮乏,实在不是什么牛人。所以还是笨鸟先飞,在一段非常闲适的日子里买来了Effective C++,想进一步提升自我,在入职前打好基础,特此边研读边做笔记一份,有摘录有总结有自己的一些理解。我知道这玩意儿基本没什么人观摩,但万一有人走过路过,望不吝赐教。
 
 
 
Start
 
声明式(Declaration):告诉编译器某个东西的名称和类型,但略去细节。
 
std::size_t numDigits(int number);
 
每个函数的声明揭示其声明式:参数&返回类型
 
如上numDigits函数的签名是std::size_t(int),也就是说"这函数获得一个int 并返回一个std::size_t"。
 
 
 
定义式(Definition):提供编译器一些声明式所遗漏的细节。
 
定义式为对象分配内存;为function提供代码本体,为class列出其成员(构造)。
 
class Widget {            
 
public:
 
      Widget();
 
      ~Widget();
 
... 
 
};
 
 
 
 
template<typenameT>     
 
class GraphNode{
 
public:
 
      GraphNode();
 
      ~GraphNode();
 
... 
 
};
 
 
 
 
初始化(Initialization):给予对象初值。
 
用户自定义类型对象的初始化由构造函数执行;default构造函数要么没有参数,要么每个参数都有缺省值。
 
class A {
 
public:
 
    explicit A (int x=0, bool b=true);
 
};
 
void doSth (A aObject);
 
A obj (28);  //Right,根据28创建A,第二个参数bool被缺省为true
 
doSth(28);  //Wrong,应该传入参数A,int与A之间不能隐式转换
 
doSth(A(28)); //Right, cast显式转换
 
用explicit声明构造函数,阻止了参数隐式类型转换的执行,但仍可进行显式类型转换;因此,除非有隐式转换需要,否则构造函数被鼓励声明为explicit。
 
 
 
copy构造函数:以同型对象初始化自我对象,构造函数的参数为另一同类型对象;
 
copyassignment操作符:从另一个同型对象中拷贝其值到自我对象,其实就是等号赋值。
 
class Widget
 
{
 
public:
 
    Widget(); //default构造函数
 
    Widget(const Widget& rhs); //copy构造函数
 
    Widget& operator=(const Widget&rhs); //copy assignment操作符
 
    ...
 
}; 
 
Widget w1; //call the defaultconstructor
 
Widget w2(w1); //call the copyconstructor
 
w1 = w2;  //call the copy assignment operator
 
Then:
 
Widget w3 =w2;
 
先用copy构造函数创建w3,再用w2(已定义的)进行等号赋值;值传递就意味着调用copy构造函数。
 
 
 
STL:标准模板库(Standard Template Library),C++标准程序库的一部分,致力于容器(vector,list,set,map,等等),迭代器(vector<int>::iterator,set<string>::iterator,等等), 算法(for_each,find,sort,等等)。
 
 
 
不明确行为(undefined behavior):某些C++构件的行为没有定义,无法稳定估计运行期会发生什么。
 
int *p = 0; // p为null指针
 
std::cout << *p; //对null指针取值
 
 
 
char name[] = "Darla";// name数组大小为6(尾端为null)
 
char c = name[10]; //指向一个无效的数组索引
 
尽可能避开不明确行为。
 
摘自 pandawuwyj的专栏