很早之前,忘了是看书还是别人介绍了,说STL里有一些类型检查的东西,比如vector里面会检查是否定义了赋值操作符,还有的检查是否有默认参数的构造函数之类的。看STL源码的时候发现了一个concept_check的头文件,发现其中的内容还真是不少。有一些就是做这种检查的。
STL默认提供了很多种操作的检查,比如:
_Allocator
_Assignable
_DefaultConstru...
分类:
其他好文 时间:
2014-12-15 21:52:51
阅读次数:
164
C++11中的移动构造函数又把NRV优化翻出来了,都是采用临时中间值优化,两者不能共存。
参数传递如何实现?
【实现模型1】引入临时对象,使用拷贝构造函数初始化。然后利用bitwise copy将其拷贝到x0的位置。比如:
void foo( X x0 );
X xx;
foo( xx );
改写成
X __temp0;
__temp0.X::X ( xx );
foo( __t...
分类:
其他好文 时间:
2014-12-15 10:27:49
阅读次数:
280
在前一篇文章中我们说到了如何解决对象的循环引用问题:http://blog.csdn.net/jiangwei0910410003/article/details/41926369,这一篇文章我们就来介绍一下OC中的对象拷贝概念,这个对于面向对象语言中都会有这种的问题,只是不同的语言有不同的解决方式:C++中有拷贝构造函数,Java中需要实现Cloneable接口,在clone方法中进行操作。但是...
分类:
其他好文 时间:
2014-12-14 18:37:52
阅读次数:
217
1.拷贝构造函数是与类名相同,其形参是本类的对象的引用。2.拷贝构造函数会在以下三种情况下被调用:1).当用类的一个对象去初始化该类的另一个对象时。2).如果函数的形参是类的对象,调用该函数,将对象作为函数实参传递给函数的形参时。3).如果函数的返回值是类的对象,函数执行完成,将返回值返回时。3.浅...
分类:
其他好文 时间:
2014-12-11 01:31:56
阅读次数:
280
用一句简单的话来说就是浅拷贝,只是对指针的拷贝,拷贝后两个指针指向同一个内存空间,深拷贝不但对指针进行拷贝,而且对指针指向的内容进行拷贝,经深拷贝后的指针是指向两个不同地址的指针。所谓浅拷贝,指的是在对象复制时,只对对象中的数据成员进行简单的赋值,默认拷贝构造函数执行的也是浅拷贝。大多情况下“浅拷贝...
分类:
其他好文 时间:
2014-12-05 10:25:23
阅读次数:
170
构造 构造函数 tuple的构造函数很普通,没啥说的。default (1)constexpr tuple();默认构造函数copy / move (2)tuple (const tuple& tpl) = default; 拷贝构造函数tuple (tuple&& tpl) = defau...
分类:
编程语言 时间:
2014-11-30 19:58:53
阅读次数:
295
一、重载operator=返回类型
下面举例说明,operator=类似。
针对:ostream & operator
说明几点:
1.第一个形参为对ostream对象的引用,在该对象上将产生输出,ostream为非const,因为写入到流会改变流的状态;该形参是一个引用,因为不能复制ostream对象(在c++中定义的标准输入输出流类istream和ostream,其中拷贝构造函数和赋...
分类:
编程语言 时间:
2014-11-30 18:48:25
阅读次数:
149
一、编译器为空类生成函数的原型以及函数创建的时机
在C++中当创建一个空类时,C++就会默认的为这个类创建4个函数:默认的构造函数、析构函数、拷贝构造函数、以及赋值操作符。
C++中创建一个空类:
class Empty {};
默认会生成4个函数,其函数的原型如下:
public: Empty() { ... } Empty(const Empty& rhs) {...
分类:
编程语言 时间:
2014-11-27 12:44:45
阅读次数:
240
2.4.1 22页谈到了关于比较操作符的问题。作者的说法是:赋值操作符返回的都是【真】但是注释下面提示:if(a=false){alert('hello, world');}这段代码中的alert('hello,world');是不会执行的。其他情况可能得闲的时候去看看。
分类:
编程语言 时间:
2014-11-26 13:40:24
阅读次数:
195
Dog.h文件
#include
#include
using namespace std;
#ifndef DOG_H
#define DOG_H
class Dog {
private:
string name;
int age;
static int count;
public:
void bark() {
cout << Dog::name << " age:" << ...
分类:
编程语言 时间:
2014-11-24 11:55:18
阅读次数:
137