C++
西湖之恋
这个作者很懒,什么都没留下…
展开
-
c++primer要点-标准库
1.谓词是一个可调用的表达式,其返回结果是一个能用作条件的值。 2.lambda表达式:[capture list](parameter list) -> return type { function body } 捕获列表只用于局部非静态变量,被捕获变量的值在lambda创建时拷贝 隐式捕获:在捕获列表中写一个=(值捕获)或&(捕获引用),由编译器推断要使用的变量 对于值捕获原创 2015-07-10 16:52:00 · 265 阅读 · 0 评论 -
c++primer要点-重载运算与类型转换
1.与iostream兼容的输入输出运算符必须是普通的非成员函数;下标运算符必须是成员函数 2.lambda表达式被编译器翻译成一个未命名类的未命名对象,在这个类中含有一个重载的函数调用运算符;function类能够将相同调用形式的不用可调用对象类型统一起来 3.类型转换运算符将一个类类型的值转换成其他类型;类型转换函数必须是成员函数,不能声明返回类型,形参列表必须为空 explicit原创 2015-07-10 20:48:37 · 307 阅读 · 0 评论 -
c++primer要点-语句
1.case标签必须是整形常量表达式 2.如果在某处一个带有初值的变量位于作用域之外,在另一处该变量位于作用域之内,则从前一处跳到后一处是非法行为。 case true: string file_name; //错误 int ival = 0 ; //错误 int jval ;//正确 break; case f原创 2015-07-10 13:01:34 · 392 阅读 · 0 评论 -
c++primer要点-类
1.常量对象,以及常量对象的引用或指针都只能调用常量成员函数。 2.友元的声明仅仅指定了访问的权限 3.mutable声明的数据成员即使在const成员函数中也能被修改 4.如果没有在构造函数的初始值列表中显式的初始化成员,则该成员将在构造函数之前执行默认初始化。随着构造函数一开始执行,初始化就完成了。 构造函数的初始值有时必不可少:当成员是const或引用;当成员是类类型且没有定义构原创 2015-07-10 13:38:06 · 296 阅读 · 0 评论 -
c++primer 要点-函数
1.当用实参初始化形参时会忽略掉顶层const void fun(const int i){} void fun(int i){} //错误:重定义 底层const是可以重载的。 2.在不同的作用域中无法重载函数名,在c++语言中,名字查找发生在类型检查之前。 3.局部变量不能作为默认实参。除此之外,只要表达式的类型能转换成形参所需要的类型,改表达式就能作为默认实参。用作默认实参的名字在原创 2015-07-10 13:13:35 · 262 阅读 · 0 评论 -
c++primer 要点-变量和基本类型
1.const 对象必须初始化,默认情况下仅在文件内有效。 2.顶层const表示指针本身是个常量 : int *const p = &i; 3.对象拷贝时,顶层const不受影响;对于底层const,非常量可以转换为常量,反之不行 4.auto 会忽略引用和顶层const,decltype会保留。另外,如果表达式的内容是解引用或加括号的变量,decltype得到引用类型原创 2015-07-10 10:15:14 · 242 阅读 · 0 评论 -
c++对象模型-the sematics of function
1.多重继承下的虚函数原创 2015-07-16 16:08:40 · 245 阅读 · 0 评论 -
c++对象模型-the semantics of data
1.origin.x=0.0; pt->x=0.0; 这两者有什么差异:当pt的继承结构中含有虚基类,且x是从虚基类继承而来时,由于静态不知道pt指向哪个类的对象,x的offset必须动态时才能确定。但origin就没有这个问题。 2.继承与数据成员 只有继承无多态:子类对象中的基类部分,与基类对象中的布局完全一致。 加上多态:在对象头部加一个虚函数表指针。 多重继承原创 2015-07-16 15:32:57 · 331 阅读 · 0 评论 -
c++primer要点-特殊工具与技术
1.new表达式执行了3步操作:1)调用operator new 标准库函数分配内存;2)运行相应的构造函数构造对象;3)返回指向该对象的指针 delete表达式的2步操作:1)执行对象的析构函数;2)调用operator delete库函数释放内存 应用程序可以在全局作用域中定义operator new 函数和operator delete 函数,也可以将它们定义为成员函数;当定义成原创 2015-07-11 18:23:05 · 343 阅读 · 0 评论 -
c++对象模型-semantics of construction
1.虚基类的构造函数由最底层的类的构造函数调用。所以对处于虚继承中间层的类的构造函数,有时(本身就是最底层的时候)需要调用基类的构造函数,有时(本身由更底层构造函数调用的时候)不需要。所以编译器会生成两个版本。 2.vptr的初始化操作在base class constructors 调用之后,在“member initialization list”或程序员的代码之前。原创 2015-07-16 20:43:26 · 307 阅读 · 0 评论 -
c++对象模型-the semantics of constructors
1.default constructor 的构建,除了以下四种情况,啥都不做 1)带有default constructor的member class object:需要调用member的constructor 2)带有default constructor的base class :需要调用base的constructor 3)带有一个virual function 的clas原创 2015-07-14 19:49:57 · 242 阅读 · 0 评论 -
C++ vtable layout
A virtual table (vtable) is a table of information used to dispatch virtual functions, to access virtual base class subobjects, and to access information for runtime type identification (RTTI)转载 2015-07-07 11:31:17 · 364 阅读 · 0 评论 -
c++primer要点-异常、命名空间、多继承
1.编译器使用异常抛出表达式来对异常对象进行拷贝初始化,该表达式决定了异常对象的类型;进入catch语句后,通过异常对象初始化异常声明中的参数。 2.throw;//重新抛出语句,将当前异常对象沿着调用链向上传递。catch(...) 捕获所有异常。 3.要想处理构造函数初始值抛出的异常,必须将构造函数写成函数try语句块。 4.一个noexcept函数抛出了异常,程序会terminate;原创 2015-07-11 17:20:05 · 295 阅读 · 0 评论 -
c++primer要点-字符串、向量和数组
1.列表初始化:用花括号初始化变量,如果初始值存在丢失信息的风险,编译器将报错 默认初始化:内置类型的变量初始值由位置决定 直接初始化:string s5(“hiya”); 拷贝初始化:string s5 = “hiya”; 值初始化:vector svec(10);如果元素为内置类型,则初始值为0,否则由类默认初始化 原创 2015-07-10 10:46:46 · 294 阅读 · 0 评论 -
c++primer要点-拷贝控制
1.=default 显式要求编译器生成合成版本;=delete 定义为删除的函数阻止拷贝。 2.右值引用只能绑定到将要销毁的对象;std::move 获得绑定到左值上的右值引用 移动构造函数的第一个参数应该是该类型的右值引用,移动操作不应抛出异常,可以指明noexcept承诺。标准库容器能对异常发生时其自身行为提供保障。例如,vector的push_back可能需要移动元素。当vecto原创 2015-07-10 19:58:20 · 359 阅读 · 0 评论 -
c++primer要点-表达式
1.递增递减运算符必须作用于左值运算对象。前置版本将对象本身作为左值返回,后置版本将对象原值的副本作为右值返回。优先使用前置版本,因为后置版本需要将原值存储下来,如果我们不需要的话,就是一种浪费。 2.运算对象可按任意顺序求值:*beg = toupper(*beg++);//错误:该赋值语句未定义。 3.箭头运算符返回左值,点运算符依赖成员所属对象。 4.条件运算符的两个表达式都是左值或能原创 2015-07-10 11:01:29 · 310 阅读 · 0 评论 -
c++primer要点-面向对象程序设计
1.不论从基类派生出来多少个派生类,对于每个静态成员来说都只存在唯一实例,静态成员遵循通用的访问控制规则。原创 2015-07-11 12:22:26 · 485 阅读 · 0 评论 -
c++primer要点-模板与泛型编程
1.当调用一个函数模板时,编译器用函数实参来推断模板实参,并实例化一个特定版本的函数;也可以提供显示模板实参。 2.除了定义类型参数,还可以在模板中定义非类型参数,我们通过一个特定的类型名来指定非类型参数;实例化时,非类型参数被用户提供的或编译器推断的值代替,这些值必须是常量表达式。 3.默认情况下,一个类模板的成员函数只有当程序用到它时才实例化 4.显示实例化可以避免多个文件实例化相同模板原创 2015-07-11 14:04:28 · 417 阅读 · 0 评论