
C/C++
文章平均质量分 70
diaolingle
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
RVO(Return Value Optimization)和NRVO(Named Return Value Optimization)
中文解释:RVO:返回值优化 NRVO:具命返回值优化具体示例如下:#include class A{public: A(int i): m_a(i) { printf("constructor\n"); } A(const A &a) { printf("copy constructor\n"); m_a = a原创 2016-04-17 15:20:27 · 1367 阅读 · 0 评论 -
C/C++ Volatile关键词深度剖析
1 背景 12 Volatile:易变的 12.1 小结 23 Volatile:不可优化的 33.1 小结 44 Volatile:顺序性 44.1 happens-before 64.2 小结 75 Volatile:Java增强转载 2016-04-17 17:37:50 · 744 阅读 · 0 评论 -
关于运算符重载
Q:不能重载的运算符哪几个?A: . (成员访问运算符) .* (成员指针访问运算符) ∷ (域运算符) sizeof (长度运算符) ?: (条件运算符)Q:C++中重载输出运算符,为什么要返回引用?A:因为ostream不能复制,所以必须返回引用.Q:C++关键字的explicit的作用?A: 在C++中,expl原创 2016-04-17 23:32:42 · 437 阅读 · 0 评论 -
c++类的拷贝构造函数、隐式转换、重载的赋值操作符的一些分析和实例
1. 隐式转换和拷贝构造之间的一点实例分析#include #include #include #include using namespace std;class A{public: A(int i): m_a(i) { printf("constructor\n"); } A(const A &a) { printf("copy construct原创 2016-04-18 12:05:11 · 666 阅读 · 0 评论 -
类的const限定符
例子1:class A{public: A() {} ~A() {}public: int Test() const { printf("const\n"); return 0; } int Test() { printf("non const\n"); return 0; } static int Change() const //这个定义原创 2016-04-19 17:50:39 · 397 阅读 · 0 评论 -
关于C++中的友元函数的总结
1.友元函数的简单介绍1.1为什么要使用友元函数在实现类之间数据共享时,减少系统开销,提高效率。如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数。具体来说:为了使其他类的成员函数直接访问该类的私有变量。即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数。实际上具体大概有下面两种情况需要使用友元函数:(1)运算转载 2016-04-19 18:02:36 · 302 阅读 · 0 评论 -
C++强制转换之static_cast
static_cast用法:static_cast(expression)简介:该运算符把expression转换为type_id类型,但没有运行时类型检查来保证转换的安全性。主要有以下几种用法:1. 用于类层次结构中基类和派生类之间指针或引用的转换:进行上行转换是安全的,进行下行转换时是不安全的2. 用于基本数据类型之间的转换3. 把空指针转换成目标类型的空指针原创 2016-04-19 23:43:44 · 991 阅读 · 0 评论 -
c++强制转换之dynamic_cast
dynamic_cast(expression)用法:该运算符把expression转换成type-id类型的对象。Type-id必须是类的指针、类的引用或者void*;如果type-id是指针类型,那么expression也必须是一个指针,如果type-id是一个引用,那么expression也必须是一个引用。 dynamic-cast运算符可以在执行期间决定真正的类型。如果下原创 2016-04-20 02:44:45 · 4547 阅读 · 0 评论 -
c++之强制转换之const_cast和reinterpret_cast
const_cast,用于修改类型的const或volatile属性。const_cast (expression)该运算符用来修改类型的const或volatile属性。除了const 或volatile修饰之外, type_id和expression的类型是一样的。一、常量指针被转化成非常量的指针,并且仍然指向原来的对象;二、常量引用被转换成非常量的引用,并且仍然指向原来的转载 2016-04-20 15:23:29 · 2448 阅读 · 0 评论 -
c++类构造函数、析构函数与虚函数之间的那点小事
Q:类的构造函数是否可以是虚函数?A:不可以。 首先,设置后编译出错,语法上c++并不允许把类的构造函数声明为虚函数; 其次,抛开语法层面,类对象构造的时候是按照继承层次从上至下开始构造。创建一个类对象的时候是先分配整个类需要的存储空间,然后开始执行构造函数,举个简单的例子:class A{public: A() {} virtual void原创 2016-04-16 23:08:46 · 392 阅读 · 0 评论 -
杂项
Q: #include 和 #include “...”的区别?A:前者优先在库Include路径中搜索,后者优先在项目Include路径中搜索.Q:C++中, extern "C" 在哪些情况下会被用到,作用是什么?A: 因为C++的函数重载等特征,会在编译时在函数名称前后添加修饰符(取决于实现), 这一点与C语言不兼容. 用 extern "C" 修饰后的函数原创 2016-05-12 01:10:43 · 276 阅读 · 0 评论 -
C++空类的大小问题
Q: class A {}; sizeof(A) 的结果一般是1, 为什么?A: 如果不是1,当定义这个类的对象数组时候A array[5], array[0]至array[5]都在同一个地址处,无法区分。原创 2016-04-15 03:08:07 · 448 阅读 · 0 评论 -
【c++】必须在类初始化列表中初始化的几种情况
1. 类成员为const类型2. 类成员为引用类型#include using namespace std;class A{ public: A(int &v) : i(v), p(v), j(v) {} void print_val() { cout << "hello:" << i << " " << j << endl;}转载 2016-04-15 18:15:32 · 302 阅读 · 0 评论 -
c++ 类的构造函数
C++构造函数初始化按下列顺序被调用:首先,任何虚拟基类的构造函数按照它们被继承的顺序构造;其次,任何非虚拟基类的构造函数按照它们被继承的顺序构造;最后,任何成员对象的构造函数按照它们声明的顺序调用;class InitialA{public: InitialA(int i) { printf("Initial A, i: %d\n", i); }};c原创 2016-04-16 00:07:31 · 391 阅读 · 0 评论 -
auto_ptr作为vector的元素会出现什么情况
因为设备限制,我现在windows下进行测试,以下代码全部都在vs2013中运行过下面是例子1:#include #include #include #include using namespace std;class D{public: D() : d(1) {} ~D() { printf("D destruction\n"); } int d;};v原创 2016-05-11 10:46:17 · 2187 阅读 · 1 评论 -
auto_ptr的使用
auto_ptr是许许多多智能指针中的一种,auto_ptr做这样一件事:拥有一个动态分配内存对象,并且在它不再需要的时候履行自动清理的职责。下面上一些使用例子:#include #include #include #include using namespace std;class D{public: D() : d(1) {} ~D() { printf("D de原创 2016-05-11 11:58:26 · 300 阅读 · 0 评论 -
关于指针的删除
先上一个例子:#include #include #include #include using namespace std;int _tmain(int argc, _TCHAR* argv[]){ char* dst = "This is a str"; char* str = (char*)malloc(strlen(dst) + 1); if (str == NUL原创 2016-05-11 14:42:08 · 1934 阅读 · 0 评论 -
operator new和operator delete
1. 为什么要重载 operator new ?答: 效率问题: 通常系统默认提供的分配器速度极慢, 而且分配小型对象时空间浪费严重.改变行为:默认的分配器失败时会抛出异常, 或许你想改变这种行为.2. operator new 的行为答:区分三个不同的 new: new 操作符(new 表达式, new operator, new expression):转载 2016-05-11 17:02:05 · 1386 阅读 · 0 评论 -
shared_ptr的线程安全性
shared_ptr 的线程安全级别和内建类型、标准库容器、std::string 一样,即:• 一个 shared_ptr 对象实体可被多个线程同时读取;• 两个 shared_ptr 对象实体可以被两个线程同时写入,“析构”算写操作;• 如果要从多个线程读写同一个 shared_ptr 对象,那么需要加锁;请注意,以上是 shared_ptr 对象本身的线程安全转载 2016-05-11 23:41:21 · 517 阅读 · 0 评论 -
shared_ptr的用法
先看一个例子:#include #include #include using namespace std;class A{public: A() { printf("A constructor\n"); } ~A() { printf("A destructor\n"); } void Print() { printf("This is A\n"); }};原创 2016-05-11 18:59:28 · 657 阅读 · 0 评论 -
右值引用
http://www.cnblogs.com/hujian/archive/2012/02/13/2348621.html原创 2016-05-15 23:18:50 · 489 阅读 · 0 评论