12 2014 档案
摘要:assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:1 #include 2 void assert( int expression ); assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然...
阅读全文
摘要:string类的成员函数c_str()c_str()函数原型:const char *c_str(void)c_str()函数功能:当程序用到atoi()、strcpy()这类的C函数时要求参数为char*型,就要将string类字符串转换成char型字符串;(string是个类,char是个常规类...
阅读全文
摘要:static_assert和 type traitsstatic_assert提供一个编译时的断言检查。如果断言为真,什么也不会发生。如果断言为假,编译器会打印一个特殊的错误信息。templateclassVector{static_assert(Sizea1;Vectora2;return0;}e...
阅读全文
摘要:非成员begin()和end()也许你注意到了,我在前面的例子中已经用到了非成员begin()和end()函数。他们是新加入标准库的,除了能提高了代码一致性,还有助于更多 地使用泛型编程。它们和所有的STL容器兼容。更重要的是,他们是可重载的。所以它们可以被扩展到支持任何类型。对C类型数组的重载已经...
阅读全文
摘要:Smart Pointers 智能指针已经有成千上万的文章讨论这个问题了,所以我只想说:现在能使用的,带引用计数,并且能自动释放内存的智能指针包括以下几种:unique_ptr: 如果内存资源的所有权不需要共享,就应当使用这个(它没有拷贝构造函数),但是它可以转让给另一个unique_ptr(存在m...
阅读全文
摘要:Strongly-typed enums 强类型枚举传统的C++枚举类型存在一些缺陷:它们会将枚举常量暴露在外层作用域中(这可能导致名字冲突,如果同一个作用域中存在两个不同的枚举类型,但是具有相同的枚举常量就会冲突),而且它们会被隐式转换为整形,无法拥有特定的用户定义类型。在C++11中通过引入了一...
阅读全文
摘要:我总觉得 C++中虚函数的设计很差劲,因为时至今日仍然没有一个强制的机制来标识虚函数会在派生类里被改写。vitual关键字是可选的,这使得阅读代码变得很费劲。因为可能需要追溯到继承体系的源头才能确定某个方法是否是虚函数。为了增加可读性,我总是在派生类里也写上virtual关键字,并且也鼓励大家都这么...
阅读全文
摘要:C++至少有4个不同的初始化符号,有些存在重叠,括号初始化语法如下:1 std::string s("hello"); 2 int m=int(); //default initialization 在某些情况下,你也可以使用“=”符号进行初始化:1 std::string s="hello";...
阅读全文
摘要:C++ 11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作。Lambda的语法形式如下: 如上图所示Lambda分为以下几个部分:1、 [函数对象参数] ,2、(操作符重载函数参数), 3、mutable, 4、exception声明, 5、->返回值类型, 6、{函数体}。...
阅读全文
摘要:很多语言都有Range-based for loops这个功能,现在C++终于知道把这个重要功能加进语法中了。一、基本语法for ( range_declaration : range_expression) loop_statement 1 vector vec; 2 vec.push_bac...
阅读全文
摘要:早在 1972 年,C语言诞生的初期,常数0带有常数及空指针的双重身分。 C 使用 preprocessor macroNULL表示空指针, 让NULL及0分别代表空指针及常数 0。NULL可被定义为((void*)0)或是0。C++ 并不采用 C 的规则,不允许将void*隐式转换为其他类型的指针...
阅读全文
摘要:C中的volatilevolatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。例...
阅读全文
摘要:泛型编程:源起、实现与意义By刘未鹏C++的罗浮宫(http://blog.csdn.net/pongba)(去年12月《程序员》的约稿)(以前也写过一篇相关的文章:Generic Programming - What Are You, anyway?)为什么泛型泛型编程(Generic Progr...
阅读全文
摘要:for_each函数原形 1 template inline 2 3 _Fn1 for_each(_InIt _First, _InIt _Last, _Fn1 _Func) 4 5 { // perform function for each element 6 7...
阅读全文
摘要:任何一个STL算法,都需要获得由一对迭代器(泛型指针)所标识的区间,用以表示操作范围。这一对迭代器所标示的是个所谓的前闭后开区间,以[first,last)表示。也就是说,整个实际范围从first开始,知道last-1。迭代器last所指的是“最后一个元素的下一位置”。这种偏移一格的标示法,带来了许...
阅读全文
摘要:不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中。typedef与#define有些相似,但更多的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一些C/C++的学习者的博客,其中有一篇关于typedef的总结还是很不错,由于总结的很好,我就不加修改...
阅读全文
摘要:右值引用,是 C++11 语言核心中最为重要的改进之一。右值引用给 C++ 带来了“Move语义”(“转移语义”),同时解决了模板编程中完美转发的问题(Perfect forwarding)。右值引用使 C++ 对象有能力甄别什么是(可以看作)临时对象,对于临时对象的拷贝可以做某种特别的处理,一般来...
阅读全文
摘要:decltype类似于sizeof操作符,decltype也不需对其操作数求值。粗略来说,decltype(e)返回类型前,进行了如下推导:1.若表达式e指向一个局部变量、命名空间作用域变量、静态成员变量或函数参数,那么返回类型即为该变量(或参数)的“声明类型”;2.若e是一个左值(lvalue,即...
阅读全文
摘要:autoC++11中引入的auto主要有两种用途:自动类型推断和返回值占位。auto的自动类型推导,用于从初始化表达式中推断出变量的数据类型。通过auto的自动类型推导,可以大大简化我们的编程工作auto实际上实在编译时对变量进行了类型推导,所以不会对程序的运行效率造成不良影响另外,似乎auto并不...
阅读全文
摘要:一、C++编译模式通常,在一个C++程序中,只包含两类文件——.cpp文件和.h文件。其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码;而.h文件则被称作C++头文件,里面放的也是C++的源代码。C+ +语言支持“分别编译”(separate compilation)。也就是说,一个...
阅读全文
摘要:1.模板的概念。我们已经学过重载(Overloading),对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如,为求两个数的最大值,我们定义MAX()函数需要对不同的数据类型分别定义不同重载(Overload)版本。//函数1.int max(int x,i...
阅读全文
摘要:这是本小人书。原名是《using stl》STL概述STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念,但这种分离确实使得STL变得非常通用。例如,由于STL的sort()函数是完全通用的,你可以用它来操作几乎任何数据集合,包括链表,容器和数组。要点STL算法作为模板函数提供。为了和其...
阅读全文

浙公网安备 33010602011771号