摘要:
【C++11包装引用】 我们可以通过实体化样板类reference_wrapper得到一个包装引用 (wrapper reference)。包装引用类似于一般的引用。对于任意对象,我们可以通过模板类ref得到一个包装引用 (至于 constant reference 则可通过cref得到)。 当样板函数需要形参的引用而非其拷贝,这时包装引用就能派上用场: 这项功能将加入头文件。参考:http://zh.wikipedia.org/wiki/C++0x#.E5.8C.85.E8.A3.85.E5.BC.95.E7.94.A8
阅读全文
posted @ 2014-01-03 22:48
Tekkaman
阅读(638)
推荐(0)
摘要:
【C++11能用智能指针】 shared_ptr是一引用计数 (reference-counted) 指针,其行为与一般 C++ 指针即为相似。在 TR1 的实现中,缺少了一些一般指针所拥有的特色,像是别名或是指针运算。C++11新增前述特色。 一个shared_ptr只有在已经没有任何其它shared_ptr指向其原本所指向对象时,才会销毁该对象。 一个weak_ptr指向的是一个被shared_ptr所指向的对象。该weak_ptr可以用来决定该对象是否已被销毁。weak_ptr不能被解参考; 想要访问其内部所保存的指针,只能通过shared_ptr。有两种方法可达成此目的。第一,类...
阅读全文
posted @ 2014-01-03 22:44
Tekkaman
阅读(2620)
推荐(0)
摘要:
【C++正则表达式】 这个新的程序库,被定义于头文件,由几个新的类型所组成:正则表达式(样式)以样板类basic_regex的实体表示样式匹配的情况以样板类match_results的实体表示 函数regex_search是用来搜索样式; 若要搜索并取代,则要使用函数regex_replace,该函数会回传一个新的字符串。算法regex_search和regex_replace接受一个正则表达式(样式)和一个字符串,并将该样式匹配的情况存储在 structmatch_results。 底下描述了match_results的使用情况: 参考:http://zh.wikipedia.org...
阅读全文
posted @ 2014-01-03 22:36
Tekkaman
阅读(3424)
推荐(0)
摘要:
【C++11散列表】 散列表对应于C++03中的hash_xxx,分为set和map两种 上述的类型将满足对一个容器类型的要求,同时也提供访问其中元素的成员函数:insert,erase,begin,end。 散列表需引入和两个头文件。参考:http://zh.wikipedia.org/wiki/C++0x#.E9.9B.9C.E6.B9.8A.E8.A1.A8
阅读全文
posted @ 2014-01-03 22:29
Tekkaman
阅读(1134)
推荐(0)
摘要:
【C++11多元组类别】 多元组可被视为是struct其数据成员的一般化。底下是一个多元组类别的定义和使用情况: 我们可以定义一个多元组类别对象proof而不指定其内容,前提是proof里的元素其类别定义了默认构造函数 (default constructor)。此外,以一个多元组类别对象赋值给另一个多元组类别对象是可能的,但只有在以下情况: 若这两个多元组类别相同,则其内含的每一个元素其类别都要定义拷贝构造函数 (copy constructor); 否则的话,赋值操作符右边的多元组其内含元素的类别必须能转换成左边的多元组其对应的元素类别,又或者赋值操作符左边的多元组其内含元素的类别...
阅读全文
posted @ 2014-01-02 22:18
Tekkaman
阅读(741)
推荐(0)
摘要:
【C++11之sizeof】 在标准C++,sizeof可以作用在对象以及类别上。但是不能够做以下的事: 这会传回OtherType的大小。C++03并不允许这样做,所以会引发编译错误。C++11将会允许这种使用。参考:http://zh.wikipedia.org/wiki/C++0x#.E5.85.81.E8.A8.B1sizeof.E9.81.8B.E7.AE.97.E5.AD.90.E4.BD.9C.E7.94.A8.E5.9C.A8.E9.A1.9E.E5.88.A5.E7.9A.84.E8.B3.87.E6.96.99.E6.88.90.E5.93.A1.E4.B8.8A....
阅读全文
posted @ 2014-01-02 22:02
Tekkaman
阅读(464)
推荐(0)
摘要:
【C++11静态assert】 C++11新的关键字static_assert可以解决模板中的状态检察。 声明采取以下的形式: 这里有一些如何使用static_assert的例子: 当常数表达式值为false时,编译器会产生相应的错误信息。第一个例子是前处理器指令#error的替代方案;第二个例子会在每个模板类型Check生成时检查assertion。 静态assertion在模板之外也是相当有用的。例如,某个算法的实现依赖于long long类别的大小比int还大,这是标准所不保证的。 这种假设在大多数的系统以及编译器上是有效的,但不是全部。参考:http://zh.wiki...
阅读全文
posted @ 2014-01-02 21:58
Tekkaman
阅读(609)
推荐(0)
摘要:
【C++11之使用或禁用对象的默认函数】 C++11 允许显式地表明采用或拒用编译器提供的内置函数。例如要求类型带有默认构造函数,可以用以下的语法: 另一方面,也可以禁止编译器自动产生某些函数。如下面的例子,类型不可复制: = delete的声明(同时也是定义)也能适用于非内置函数, 禁止成员函数以特定的形参调用: 若尝试以 double 的形参调用f(),将会引发编译期错误, 编译器不会自动将 double 形参转型为 int 再调用f()。 若要彻底的禁止以非int的形参调用f(),可以将= delete与模板相结合: 参数:http://zh.wikipedia.o...
阅读全文
posted @ 2014-01-02 21:21
Tekkaman
阅读(2647)
推荐(0)
摘要:
【C++11变长参数模板】 C++03只有固定模板参数。C++11 加入新的表示法,允许任意个数、任意类别的模板参数,不必在定义时将参数的个数固定。 实参的个数也可以是 0,所以tuple someInstanceName这样的定义也是可以的。 若不希望产生实参个数为 0 的变长参数模板,则可以采用以下的定义: 【变长函数参数包】 除了在模板参数中能使用...表示不定长模板参数外,函数参数也使用同样的表示法代表不定长参数。 其中,Params与parameters分别代表模板与函数的变长参数集合, 称之为参数包 (parameter pack)。参数包必须要和运算符"......
阅读全文
posted @ 2014-01-01 23:19
Tekkaman
阅读(30522)
推荐(2)
摘要:
【C++11无限制的unions】 在标准 C++ 中,并非任意的类型都能做为 union 的成员。比方说,带有 non-trivial 构造函数的类型就不能是 union 的成员。在新的标准里,移除了所有对 union 的使用限制,除了其成员仍然不能是引用类型。 这一改变使得 union 更强大,更有用,也易于使用。 参考:http://zh.wikipedia.org/wiki/C++0x#.E6.A8.A1.E6.9D.BF.E7.9A.84.E5.88.A5.E5.90.8D
阅读全文
posted @ 2014-01-01 21:16
Tekkaman
阅读(1110)
推荐(0)
摘要:
【C++模板的别名】参考:http://zh.wikipedia.org/wiki/C++0x#.E6.A8.A1.E6.9D.BF.E7.9A.84.E5.88.A5.E5.90.8D
阅读全文
posted @ 2014-01-01 21:13
Tekkaman
阅读(574)
推荐(0)
摘要:
【C++11角括号】 标准 C++ 的剖析器一律将 ">>" 视为右移运算符。 但在样板定义式中,绝大多数的场合其实都代表两个连续右角括号。 为了避免剖析器误判,撰码时不能把右角括号连着写。 C++11 变更了剖析器的解读规则;当遇到连续的右角括号时,优先解析右角括号为样板引数的退出符号。 如果解读过程中出现普通括号("(" 与 ")"),这条规则产生变化: 参考:http://zh.wikipedia.org/wiki/C++0x#.E5.BC.B7.E5.9E.8B.E5.88.A5.E5.88.97.E8.88.89
阅读全文
posted @ 2014-01-01 20:45
Tekkaman
阅读(1356)
推荐(0)
摘要:
【C++11强类型枚举】 在标准C++中,枚举类型不是类型安全的。枚举类型被视为整数,这使得两种不同的枚举类型之间可以进行比较。C++03 唯一提供的安全机制是一个整数或一个枚举型值不能隐式转换到另一个枚举别型。 此外,枚举所使用整数类型及其大小都由实现方法定义,皆无法明确指定。 最后,枚举的名称全数暴露于一般范围中,因此C++03两个不同的枚举,不可以有相同的枚举名。 (好比enum Side{ Right, Left };和enum Thing{ Wrong, Right };不能一起使用。)C++11 引进了一种特别的 "枚举类",可以避免上述的问题。使用enum c
阅读全文
posted @ 2014-01-01 20:38
Tekkaman
阅读(16496)
推荐(3)
摘要:
【C++11空指针】 1、NULL的问题 运行结果: 2、nullptr 解决问题 早在 1972 年,C语言诞生的初期,常数 0 带有常数及空指针的双重身分。 C 使用 preprocessor macro NULL 表示空指针, 让 NULL 及 0 分别代表空指针及常数 0。 NULL 可被定
阅读全文
posted @ 2014-01-01 20:17
Tekkaman
阅读(3323)
推荐(0)
摘要:
【C++11显式虚函数重载】 在子类中给重载的虚函数加上override, 可以让编译器检察基类是否有这一虚函数。此功能适用于当基类原有的虚函数发生变化,即相当于编译期检察。 而基类,可以给函数加上final修饰符来告诉编译器这函数不希望被子类覆盖。 override与final都不是语言关键字(keyword),只有在特定的位置才有特别含意,其他地方仍旧可以作为一般指示字(identifier)使用。 参考:http://zh.wikipedia.org/wiki/C++0x#.E9.A1.AF.E5.BC.8F.E8.99.9B.E5.87.BD.E6.95.B8.E9.87.8...
阅读全文
posted @ 2014-01-01 20:11
Tekkaman
阅读(1301)
推荐(0)
摘要:
【C++11对象构造的改良】 C++03中一个构造函数无法构造另一个构造函数,因为A()实际上意味着生成一个临时对象,存在语音混淆。详情请看参考2。 C++11中允许直接在初始化列表中调用其它的构造函数: 另外,C++11允许通过using命令直接把基类的构造函数转换为本类的构造函数: 最后,C++11支持直接对类成员用=与赋初始值。 参考: 1、http://zh.wikipedia.org/wiki/C++0x#.E7.89.A9.E4.BB.B6.E5.BB.BA.E6.A7.8B.E7.9A.84.E6.94.B9.E8.89.AF 2、http://blog.chi...
阅读全文
posted @ 2014-01-01 19:45
Tekkaman
阅读(1362)
推荐(0)
摘要:
【C++11lambda表达式】 mutable 修饰符,用于修改[]中以值传递的变量,无mutable修饰符的话则不行。 使用示例: 1 #include <vector> 2 #include <iostream> 3 #include <algorithm> 4 #include <funct
阅读全文
posted @ 2014-01-01 18:51
Tekkaman
阅读(349)
推荐(0)
摘要:
【C++11for循环】 for述句将允许简单的范围迭代,引用或非引用形式均可: 参考:http://zh.wikipedia.org/wiki/C++0x
阅读全文
posted @ 2014-01-01 12:44
Tekkaman
阅读(348)
推荐(0)
摘要:
【C++11类型推导】 1、使用auto的时候,编译器根据上下文情况,确定auto变量的真正类型。auto在C++14中可以作为函数的返回值,因此auto AddTest(int a, int b)的定义是没问题的。 2、只能用于定义函数,不能用于声明函数。 但如果把实现写在头文件中,可以编译通过,
阅读全文
posted @ 2014-01-01 12:01
Tekkaman
阅读(314)
推荐(0)
摘要:
【C++11之初始化列表】 在C++03中,在严格遵守POD的定义和限制条件的结构及类型上可以使用初始化列表(initializer list),构想是结构或是数组能够依据成员在该结构内定义的顺序通过给予的一串引数来产生。非POD的类型不能使用,就连相当有用的STL容器std::vector也不行。 C++11将会把初始化列表的概念绑到类型上,称作std::initializer_list。这允许构造函数或其他函数像参数般地使用初始化列表。 这个构造函数是种特殊的构造函数,称作初始化列表构造函数。有着这种构造函数的类型在统一初始化的时候会被特别对待。 类型std::initialize...
阅读全文
posted @ 2014-01-01 10:11
Tekkaman
阅读(599)
推荐(0)
摘要:
【C++11之外部模板】 在标准C++中,只要在编译单元内遇到被完整定义的模板,编译器都必须将其实例化(instantiate)。这会大大增加编译时间,特别是模板在许多编译单元内使用相同的参数实例化。看起来没有办法告诉C++不要引发模板的多次实例化。 C++11将会引入外部模板这一概念。C++已经有了强制编译器在特定位置开始实例化的语法: template class std::vector; 而C++所缺乏的是阻止编译器在某个编译单元内实例化模板的能力。C++11将简单地扩充前文语法如下: extern template class std::vector; 这样就告诉编译器不要...
阅读全文
posted @ 2013-12-31 23:41
Tekkaman
阅读(428)
推荐(0)
摘要:
【C++11之常量表达式】 关键字:constexpr; 中文学名:常量表达式。 constexpr用于把运行期计算放置在编译期。 使用constexpr有3个限制: 1、函数中只能有一个return语句(有极少特例) 2、只能调用其它constexpr函数 3、只能使用全局constexpr变量 一个constexpr函数,只允许包含一行可执行代码。但允许包含typedefs、 using declaration && directives、静态断言等。 假如你将一个成员函数标记为constexpr,则顺带也将它标记为了const。如果你将一个变量标记为constexpr,则
阅读全文
posted @ 2013-12-30 22:50
Tekkaman
阅读(550)
推荐(0)
摘要:
【C++11右值引用】 1、什么是左值?什么是右值? 左值是表达式结束后依然存在的对象;右值是表达式结束时就不再存在的对象。 2、在早期的C++中,普通 & 无法对右值取引用。只有 const & 可以对右值取引用。 右值引用能够解决两个问题。 1)非必要的拷贝操作 2)模板函数,按照实际类型进行转
阅读全文
posted @ 2013-12-29 20:49
Tekkaman
阅读(493)
推荐(0)
摘要:
【tty & pty & pts】基本概念:1> tty(终端设备的统称):tty一词源于Teletypes,或者teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东西被键盘与显示器取代,所以现在叫终端比较合适。终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。2> pty(虚拟终端):但是如果我们远程telnet到主机或使用xterm时不也需要一个终端交互么?是的,这就是虚拟终端pty(pseudo-tty)3> pts/ptmx(pts/ptmx结合使用,进而实现pty)
阅读全文
posted @ 2013-12-27 21:55
Tekkaman
阅读(319)
推荐(0)
摘要:
【PageRank】 PageRank,即网页排名,又称网页级别、Google左侧排名或佩奇排名。 在PageRank提出之前,已经有研究者提出利用网页的入链数量来进行链接分析计算,这种入链方法假设一个网页的入链越多,则该网页越重要。早期的很多搜索引擎也采纳了入链数量作为链接分析方法,对于搜索引擎效果提升也有较明显的效果。 PageRank除了考虑到入链数量的影响,还参考了网页质量因素,两者相结合获得了更好的网页重要性评价标准。对于某个互联网网页A来说,该网页PageRank的计算基于以下两个基本假设:数量假设:在Web图模型中,如果一个页面节点接收到的其他网页指向的入链数量越多,那么这..
阅读全文
posted @ 2013-12-27 21:33
Tekkaman
阅读(1549)
推荐(0)
摘要:
【How to run a terminal inside of vim?】 :sh turn vim into shell mode d+trl back to vim 参考:http://stackoverflow.com/questions/1236563/how-to-run-a-terminal-inside-of-vim
阅读全文
posted @ 2013-12-22 10:48
Tekkaman
阅读(1032)
推荐(0)
摘要:
【vimdiff】启动方法首先保证系统中的diff命令是可用的。Vim的diff模式是依赖于diff命令的。Vimdiff的基本用法就是:# vimdiff FILE_LEFT FILE_RIGHT或者# vim -d FILE_LEFT FILE_RIGHT光标移动接下来试试在行间移动光标,可以看到左右两侧的屏幕滚动是同步的。这是因为"scrollbind"选项被设置了的结果,vim会尽力保证两侧文件的对齐。如果不想要这个特性,可以设置::set noscrollbind可以使用快捷键在各个差异点之间快速移动。跳转到下一个差异点:]c反向跳转是:[c如果在命令前加上数字的
阅读全文
posted @ 2013-12-21 13:04
Tekkaman
阅读(576)
推荐(0)
摘要:
【svn's tree conflict】 A tree conflict occurs when a developer moved/renamed/deleted a file or folder, which another developer either also has moved/r...
阅读全文
posted @ 2013-12-15 14:16
Tekkaman
阅读(1861)
推荐(0)
摘要:
[svn's diff command] svn diff 比较的是版本快照, 跟merge的应用diff完全不一样.缺省情况下,svn diff忽略文件的祖先,只会比较两个文件的内容。如果你使用--notice-ancestry,比较修订版本(也就是,当你运行svn diff比较两个内容相同,...
阅读全文
posted @ 2013-12-13 18:01
Tekkaman
阅读(481)
推荐(0)
摘要:
【符号表分离】 gcc编译环境下,debug & release的区别主要在于-g选项,当指定-g后会生成大量调试信息。此时可通过objcopy把调试符号剥离。参考:http://blog.csdn.net/cyteven/article/details/13015511
阅读全文
posted @ 2013-12-12 23:56
Tekkaman
阅读(1357)
推荐(0)
摘要:
【gcc -D】-Dname Predefinenameas a macro, with definition1. 通常debug和release版的区别就在于是否有DEBUG宏,DEBUG宏可以通过-D选项传递。如:-DDEBUG参考: 1、http://gcc.gnu.org/onlinedocs/gcc-4.8.2/gcc/Preprocessor-Options.html#Preprocessor-Options 2、http://blog.csdn.net/blaider/article/details/7043444
阅读全文
posted @ 2013-12-12 22:46
Tekkaman
阅读(1465)
推荐(1)
摘要:
【Options for Debugging Your Program or GCC】-g Produce debugging information in the operating system's native format (stabs, COFF, XCOFF, or DWARF 2). GDB can work with this debugging information.On most systems that use stabs format,-genables use of extra debugging information that only GDB can
阅读全文
posted @ 2013-12-12 21:54
Tekkaman
阅读(324)
推荐(0)
摘要:
【invoking gdb】The most usual way to startgdbis with one argument, specifying an executable program: gdb programYou can also start with both an executable program and a core file specified: gdb program coreYou can, instead, specify a process ID as a second argument, if you want to debug a run...
阅读全文
posted @ 2013-12-12 21:36
Tekkaman
阅读(359)
推荐(0)
摘要:
[Debugging Information in Separate Files] gdballows you to put a program's debugging information in a file separate from the executable itself, in a way that allowsgdbto find and load the debugging information automatically. Since debugging information can be very large—sometimes larger than the
阅读全文
posted @ 2013-12-12 18:52
Tekkaman
阅读(402)
推荐(0)
摘要:
【Bash's ArithmeticExpression】let command: 1 let a=17+232 echo "a = $a" # Prints a = 403 let a=17 + 23 # WRONG4 let a="17 + 23" # Right5 let a=28/66 echo "a = $a" # Prints a = 4In addition to theletcommand, one may use the(())syntax to enforce an arithmetic context.
阅读全文
posted @ 2013-12-08 20:10
Tekkaman
阅读(459)
推荐(0)
摘要:
【shell's glob】 basic glob example: range glob example: 参考:http://bash.cumulonim.biz/glob.html
阅读全文
posted @ 2013-12-08 19:43
Tekkaman
阅读(361)
推荐(0)
摘要:
【int* V.S. int[]】 在C++中,int[]有2种形态,一种是指针形态,即使用方法和int*一样,另一种是符号形态,即只是一个编译期的符号(意味着在runtime期,所定义的int[]根本不存在) int *p = "abc"; int p[] = "abc"; 对于上面2行代码,调用p[i]时结果是一样的,但执行过程不一样。具体参见《C专家编程》。
阅读全文
posted @ 2013-12-08 19:31
Tekkaman
阅读(308)
推荐(0)
摘要:
【anonymous namespace V.S. static variant】 在C语言中,如果我们在多个tu(translationunit)中使用了同一个名字做为函数名或者全局变量名,则在链接阶段就会发生重定义错误,为了解决这个问题,我们可以在定义这些标识符(identifier)的时候加...
阅读全文
posted @ 2013-12-08 19:28
Tekkaman
阅读(557)
推荐(0)
摘要:
【screen command of linux】 常用键: 补充: Ctrl-a S # split terminal horizon Ctrl-a TAB # switch to another splitted part then use step 3 to select a screen C
阅读全文
posted @ 2013-12-08 18:38
Tekkaman
阅读(405)
推荐(0)
摘要:
[define中的:#,##,#@]#defineConn(x,y)x##y#defineToChar(x)#@x#defineToString(x)#x(2)x##y表示什么?表示x连接y,让compiler认为 xy 需要组合在一起, 被看作是一个符号而不是其它. 举例说:intn=Conn(123,456);/* 结果就是n=123456;*/char*str=Conn("asdf","adf");/*结果就是 str = "asdfadf";*/(2)再来看#@x,其实就是给x加上单引号,结果返回是一个const char。举
阅读全文
posted @ 2013-12-06 14:16
Tekkaman
阅读(550)
推荐(0)