
c++
文章平均质量分 68
CodeWill
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
使用stl for_each的三种方法
注:博主暂未找到原始来源,因此并未引出具体转载处,如有朋友知晓,也可评论留言,我会加上具体出处,谢谢!Abstract之前在(原創) 如何使用for_each() algorithm? (C/C++) (STL) 曾經討論過for_each(),不過當時功力尚淺,只談到了皮毛而已,這次看了effective STL的item 41、43後,對for_each()又有了更深入的了解,转载 2016-02-03 23:18:35 · 764 阅读 · 0 评论 -
const引起重载的情况讨论
注:博主尚未找到最原始来源,若能提供原始地址的朋友麻烦在下面评论,我将注明转处,谢谢。const到底是不是一个重载的参考对象,请看下面的例子class A{public: void f(int i){ std::cout void f(int i) const { std::cout};这个地方的重载是没有问题的,说明const 修饰函数能够区分重载转载 2016-02-04 14:01:29 · 1184 阅读 · 0 评论 -
c++四种类型转换
转自:点击打开链接类型转换有c风格的,当然还有c++风格的。c风格的转换的格式很简单(TYPE)EXPRESSION,但是c风格的类型转换有不少的缺点,有的时候用c风格的转换是不合适的,因为它可以在任意类型之间转换,比如你可以把一个指向const对象的指针转换成指向非const对象的指针,把一个指向基类对象的指针转换成指向一个派生类对象的指针,这两种转换之间的差别是巨大的,但是传统的c语言转载 2016-02-16 14:56:06 · 439 阅读 · 0 评论 -
const, static, inline函数在类外定义时注意点讨论
类中定义成员函数(类或对象成员)常用到三种修饰符: const, static, inline,而我们知道在类中直接定义函数,将自动变为inline函数,一般内联函数是一些经常被调用的小型函数,因此很多函数我们还是会以类外定义的方式来定义,这时部分关键字仍然需要再次出现,本文针对上述3个关键字进行讨论。首先给出个例子:class Decl{public: Decl();//默认原创 2016-02-04 14:22:07 · 1607 阅读 · 0 评论 -
几种排序算法
转自:点击打开链接1. 简述 本文主要说明一些常用的内部排序算法的分类、复杂性和稳定性。主要基于现在的理解和学习,详细准确的复杂度可以参见维基百科等比较权威的网站,对于一些算法的不同实现,复杂度也不同,这里给出的复杂度都是相对较好的算法的复杂度。2. 分类 3. 复杂性和稳定性 冒泡排序:在已经有序的情况,取得O(N)的复转载 2016-02-01 14:28:33 · 1077 阅读 · 0 评论 -
c++合成默认构造函数
转自:点击打开链接对于C++默认构造函数,我曾经有两点 误解 :类如果没有定义任何的构造函数,那么编译器(一定会!)将为类定义一个合成的默认构造函数。合成默认构造函数会初始化类中所有的数据成员。第一个误解来自于我学习C++的第一本书 《C++ Primer》,在书中392页: “只有当一个类没有定义构造函数时,编译器才会自动生成一个默认构造函数” 。实际上这句话也没转载 2016-03-09 20:10:10 · 495 阅读 · 0 评论 -
c++ string和char* char[]的互转
转自:点击打开链接string 与char* char[]之间的转换,有需要的朋友可以参考下。1、首先必须了解,string可以被看成是以字符为元素的一种容器。字符构成序列(字符串)。有时候在字符序列中进行遍历,标准的string类提供了STL容器接口。具有一些成员函数比如begin()、end(),迭代器可以根据他们进行定位。注意,与char*不同的是,s转载 2016-02-26 10:41:58 · 7307 阅读 · 1 评论 -
钻石型继承模型的内存分布
转自:点击打开链接 并更正一个小错误以及增加了自己的一些理解关于C++对象内存布局的资料和书籍也有很多,比如陈皓老师的博客:1、C++对象的内存布局(上)2、C++对象的内存布局(下)白杨:RTTI、虚函数和虚基类的实现方式、开销分析及使用指导左手为你画猜:C++类对象内存模型与成员函数调用分析(上、中、下)关于讲解C++对象内存模转载 2016-03-13 21:31:08 · 1226 阅读 · 0 评论 -
c++对象内存布局模型
转自:点击打开链接首先介绍一下C++中有继承关系的类对象内存的布局: 在C++中,如果类中有虚函数,那么它就会有一个虚函数表的指针__vfptr,在类对象最开始的内存数据中。之后是类中的成员变量的内存数据。 对于子类,最开始的内存数据记录着父类对象的拷贝(包括父类虚函数表指针和成员变量)。 之后是子类自己的成员变量数据。 对于子类的子类,也是同样的原理。但是无论继承了多少个子类,对转载 2016-02-16 22:26:01 · 465 阅读 · 0 评论 -
c printf格式总结
转自:点击打开链接1.调用格式为 printf("格式化字符串>", 参量表>); 其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原样输出; 另一部分是格式化规定字符, 以"%"开始, 后跟一个或几个规定字符, 用来确定输出内容格式。参量表是需要输出的一系列参数,其个数必须与格式化字符串所说明的输出参数个数一样多, 各参数之间用","分开, 且顺序一一对应转载 2016-07-24 23:00:39 · 625 阅读 · 0 评论 -
C++ Union
转自:点击打开链接联合(union)在C/C++里面见得并不多,但是在一些对内存要求特别严格的地方,联合又是频繁出现,那么究竟什么是联合、怎么去用、有什么需要注意的地方呢?就这些问题,我试着做一些简单的回答,里面肯定还有不当的地方,欢迎指出!1、什么是联合?“联合”是一种特殊的类,也是一种构造类型的数据结构。在一个“联合”内可以定义多种不同的数据类型, 一个被说明为该“联合转载 2016-07-24 23:44:53 · 280 阅读 · 0 评论 -
c++编译器何时会生成默认构造函数
转自:点击打开链接默认的构造函数是指为所有参数都提供了默认值的构造函数,通常是指无参的构造函数。比如下面的类Test,它的默认构造函数就是Test()。class Test{public: Test(){} // default constructor} ;如果你没有为你的类提供任何构造函数,那么编译器将自动为你生成一个默认的无参构造函数。一旦你为你的类定义了构造转载 2016-02-16 23:22:44 · 3686 阅读 · 0 评论 -
c++成员函数存储方式
转自:点击打开链接用类去定义对象时,系统会为每一个对象分配存储空间。如果一个类包括了数据和函数,要分别为数据和函数的代码分配存储空间。按理说,如果用同一个类定义了10个对象,那么就需要分别为10个对象的数据和函数代码分配存储单元,如图8.4所示。图8.4 能否只用一段空间来存放这个共同的函数代码段,在调用各对象的函数时,都去调用这个公用的函数代码。如图8.5转载 2016-02-16 22:10:18 · 439 阅读 · 0 评论 -
c++虚拟继承
转自:点击打开链接虚拟继承《c++ primer 3th》p813在缺省情况下,C++中的继承是按值组合的一种特殊情况。当我们写:class Bear : public ZooAnimal { ... };每个Bear 类对象都含有其ZooAnimal 基类子对象的所有非静态数据成员,以及在Bear中声明的非静态数据成员。类似地,当派生类自己也作为一个基类对象时,如:cla转载 2016-02-16 21:53:22 · 758 阅读 · 0 评论 -
c++拷贝函数
转自:点击打开链接一、C++中拷贝构造函数的定义:有一个参数的类型是其类类型的构造函数是为拷贝构造函数。如下所示:?123X::X(constX& x); Y::Y(constY& y, int=0 ); //可以是多参数形式,但其第二个即后继参数都有转载 2016-02-06 13:10:51 · 692 阅读 · 0 评论 -
c++ const在重载overload和覆盖override上使用区别
1.overload 重载首先讲讲const在重载上的使用,重载的目的是为了根据不同的输入来调用不同的同名函数。const的位置不同会引起不同的效果,我在一篇转载文章中具体阐述过:点击打开链接再归纳一下,能否构成重载的区别在于用户能否知晓函数的不同:1)放在函数尾部修饰作为对函数不会修改成员变量的修饰,即void fun() const;和void fun(); 这种情况下cons原创 2016-02-06 14:09:11 · 8232 阅读 · 0 评论 -
c++的typename的使用注意点
typename关键字经常出现定义模板类/函数中,但是在实际使用中,除了定义模板中的类型之外在其他代码中也偶尔需要用到typename关键字作为修饰,本文简单概括下常见的情况。对于常规的定义,如下所示:template OutputIterator filter(InputIterator input_vec_first, InputIterator input_vec_last,原创 2016-02-03 22:08:31 · 1146 阅读 · 0 评论 -
c++中int a, int *a=new int和 int *a=new int()
首先有以下3条代码:int a1;int *a2=new int;int *a3=new int();这里分一个情况来讨论,似乎c++ 98中和c++11中情况不同,分别输出这些参数,会发现c++11中每次输出时,均是0,因此这三条效果上等价,但是第一条是分配在栈空间中,而后面两条则是在堆空间中。但根据网上的资料,博主并未进行尝试,在c++ 98的编译器中,这三条是不同的,原创 2016-02-06 23:56:49 · 10299 阅读 · 0 评论 -
c++中int和string的互转
转自:点击打开链接int本身也要用一串字符表示,前后没有双引号,告诉编译器把它当作一个数解释。缺省情况下,是当成10进制(dec)来解释,如果想用8进制,16进制,怎么办?加上前缀,告诉编译器按照不同进制去解释。8进制(oct)---前缀加0,16进制(hex)---前缀加0x或者0X。string前后加上双引号,告诉编译器把它当成一串字符来解释。注意:对于字符,需要区分字转载 2016-02-07 00:19:18 · 439 阅读 · 0 评论 -
类中const函数及非const函数的调用规则
转自:点击打开链接类中const函数及非const函数的调用规则class Student{public: int getAge() { return m_age; } int getAge() const { return m_age; } void s转载 2016-01-30 16:20:39 · 3304 阅读 · 0 评论 -
c++虚基类
转自:点击打开链接虚基类的作用 当一个基类被声明为虚基类后,即使它成为了多继承链路上的公共基类,最后的派生类中也只有它的一个备份。例如:class CBase { };class CDerive1:virtual public CBase{ };class CDerive2:virtual public CBase{ };class CDerive12:publ转载 2016-02-16 14:11:57 · 360 阅读 · 0 评论 -
c++ vilatile
转自: 点击打开链接1. 为什么用volatile? C/C++ 中的 volatile 关键字和 const 对应,用来修饰变量,通常用于建立语言级别的 memory barrier。这是 BS 在 "The C++ Programming Language" 对 volatile 修饰词的说明:A volatile specifier is a hint to a c转载 2016-02-16 14:42:25 · 726 阅读 · 0 评论 -
c++ 迭代器
转自:点击打开链接迭代器是一个纯粹的抽象概念:任何东西,只要其行为类似迭代器,它就是一个迭代器。因此,你可以撰写一些类别(classes),具备迭代器接口,但有着各不相同的行为。C++标准程序库提供了数个预先定义的特殊迭代器,亦即所谓迭代器配接器(iterator adapters)。它们不仅起辅助作用,还能赋予整个迭代器抽象概念更强大的能力。 1、Insert itera转载 2016-02-16 16:34:08 · 530 阅读 · 0 评论 -
c++模板的特化和偏特化
转自:点击打开链接前言说到C++模板,这个已经不是什么新东西了,自己在实际开发中也用过;对于C++模板特化和偏特化,对于别人来说,已经不是什么新东西了,但是对于我来说,的确是我的盲区,那天在群里讨论这个问题,自己对于这部分确实没有掌握,又联想到在《STL源码剖析》一书中,对于此也是有着介绍。所以,今天就对此进行详细的总结,以备后忘。C++模板说到C++模板特化与偏特转载 2016-02-16 15:56:11 · 591 阅读 · 0 评论 -
c++迭代器和traits特性提取
转自:http://www.cnblogs.com/tracylee/archive/2012/10/26/2741907.html一、迭代器的概念迭代器是STL将数据容器和算法分开后连接的纽带,也是泛型思维发展的必然结果。泛型算法就是通过迭代器操作容器的,使得算法和容器本身分离开来。迭代器模式:提供一种方式,可以依次访问一个聚合物(容器)中所有元素而不暴露聚合物内部的转载 2016-02-16 16:43:26 · 1059 阅读 · 0 评论 -
c++中extern的用处
本文为笔者学习记录之用,文章较散,若有问题,欢迎指教。部分内容引自:定义与声明extern和static1.概要c++中extern关键词的作用主要在两个方面:第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而不是C++的,C++语言在编译的时转载 2016-01-24 01:12:01 · 652 阅读 · 0 评论