
C/C++
文章平均质量分 70
fengqiaojiangshui
这个作者很懒,什么都没留下…
展开
-
【C++11】新特性——decltype
在C++中,decltype作为操作符,用于查询表达式的数据类型。decltype在C++11标准制定时引入,主要是为泛型编程而设计,以解决泛型编程中,由于有些类型由模板参数决定,而难以(甚至不可能)表示之的问题。泛型编程在整个1990年代越发流行,对实现类型推导机制的需求也应运而生。为此,许多编译器厂商都基于程序语言现有的功能,自行实现了这类操作符,其实现如typeof,以及一些功能有限原创 2015-03-15 19:33:51 · 556 阅读 · 0 评论 -
C++虚函数表
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过原创 2015-04-12 21:52:36 · 341 阅读 · 0 评论 -
寄存器变量
变量一般情况下都存在于内存中。如果程序需要使用某个变量,CPU的控制器将从内存中取得变量值后会将其暂存在寄存器中。寄存器就是CPU自己的"小内存",它的特点是"容量小、速度快"。正常情况下,编程语言本身无法直接操作寄存器。但某些时候,一些变量可能会被频繁地使用,这时,频繁地对内存进行存取操作就会耗费较多的时间;如果我们能够有效地利用CPU的寄存器,就会显著提升程序的运行效率。 C语言中原创 2015-04-12 20:38:22 · 552 阅读 · 0 评论 -
辨别系统是大端or小端字节序---通过联合体
字节序有两种表示方法:大端字节序(big ending),小端字节序(little ending)。网络字节序:采用的是大端字节序。主机字节序:不同的CPU采用的方法不一样,可以通过代码来查看自己主机的字节序。大端字节序:高位字节排放在内存低地址端,低位字节排放在内存的高地址端。小端字节序:低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。看一个原创 2015-04-12 21:14:13 · 1433 阅读 · 0 评论 -
C++中const的实现机制深入分析
问题 C语言以及C++语言中的const究竟表示什么?其具体的实现机制又是如何实现的呢? 本文将对这两个问题进行一些分析,简单解释const的含义以及实现机制。 问题分析 简单的说const在C语言中表示只读的变量,而在C++语言中表示常量。关于const在C与C++语言中的使用以及更多的区别,以后有时间另开一贴说明。那么const究竟是如何实现的呢? 对于声明为const原创 2015-04-16 21:32:34 · 363 阅读 · 0 评论 -
C/C++中static,const,inline三种关键字详细总结
一、关于staticstatic 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性,下面我将从 static 修饰符的产生原因、作用谈起,全面分析static 修饰符的实质。static 的两大作用:一、控制存储方式 static被引入以告知编译器,将变量存储在程序的静态存储区而非栈上空间。引出原因:函数内部定义的变量,在程序执行到它的定义处时,编译原创 2015-04-16 21:53:40 · 567 阅读 · 0 评论 -
volatile浅析
volatile的本意是“易变的”。因为访问寄存器要比访问内存单元快的多,所以编译器一般都会作减少存取内存的优化,但有可能会读脏数据。当要求使用volatile声明变量值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。 精确地说就是:遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问;如果不使用volatil原创 2015-04-28 20:16:00 · 341 阅读 · 0 评论 -
C++的多态
C++编程语言是一款应用广泛,支持多种程序设计的计算机编程语言。我们今天就会为大家详细介绍其中C++多态性的一些基本知识,以方便大家在学习过程中对此能够有一个充分的掌握。 多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。多态(polymorphism),字面意思多种形状。 C++多态性是通过虚函数来实现的,虚函数允许子类重新定转载 2015-05-05 21:52:19 · 306 阅读 · 0 评论 -
__attribute__((weak))
GNU C的一大特色(却不被初学者所知)就是__attribute__机制。__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。它的书写特征是:__attribute__前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__attribute__参数,语法格式如下原创 2015-05-06 20:47:11 · 402 阅读 · 0 评论 -
【C++11】新特性——引入nullptr
1. 引入nullptr的原因引入nullptr的原因,这个要从NULL说起。对于C和C++程序员来说,一定不会对NULL感到陌生。但是C和C++中的NULL却不等价。NULL表示指针不指向任何对象,但是问题在于,NULL不是关键字,而只是一个宏定义(macro)。1.1 NULL在C中的定义在C中,习惯将NULL定义为void*指针值0:[cpp] view转载 2015-03-05 19:35:10 · 359 阅读 · 0 评论 -
C++之STL
STL就是Standard Template Library,标准模板库。这可能是一个历史上最令人兴奋的工具的最无聊的术语。从根本上说,STL是一些“容器”的集合,这些“容器”有list, vector,set,map等,STL也是算法和其它一些组件的集合。这里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作。是C++标准库的一个重要组成部分,它由Stepanov and Lee等人最转载 2015-03-05 19:21:38 · 359 阅读 · 0 评论 -
【C++11】新特性——std::function 和 std::bind
标准库函数bind()和function()定义于头文件中(该头文件还包括许多其他函数对象),用于处理函数及函数参数。bind()接受一个函数(或者函数对象,或者任何你可以通过”(…)”符号调用的事物),生成一个其有某一个或多个函数参数被“绑定”或重新组织的函数对象。(译注:顾名思义,bind()函数的意义就像它的函数名一样,是用来绑定函数调用的某些参数的。)例如: int f(转载 2015-03-15 18:48:04 · 370 阅读 · 0 评论 -
【C++11】新特性——std::function
用过C#的人,一般都知道委托和事件。如果没有用过C#,我在这里简单解释一下委托,如果用过了,下面可以skip。委托是一个方法声明,我们知道,在C语言中,可以通过函数指针表示一个地址的CALL方法,委托在C#中也差不多是干这样的工作。但是委托有一些不同,主要的地方就是,在C++中,函数指针并不是“面向对象”的,比如,我们有一个类CTest,类中有一个成员方法foo,此时如果我们要通过转载 2015-03-15 19:11:52 · 3602 阅读 · 0 评论 -
【C++11】新特性——function、bind以及lamda表达式
本文主要内容是C++0x中新增的function对象、bind机制和lambda表达式。之所以把这三块放在一起讲,是因为这三块之间有着非常密切的关系,通过对比学习,加深对这部分内容的理解。在开始之间,首先要讲一个概念,closure(闭包),这个概念是理解lambda的基础。下面我们来看看wikipedia上对于计算机领域的closure的定义:A closure (als转载 2015-03-15 19:13:21 · 456 阅读 · 0 评论 -
【C++11】新特性——unique_ptr
unique_ptrunique_ptr(定义在中)提供了一种严格的语义上的所有权o 拥有它所指向的对象o 无法进行复制构造,也无法进行复制赋值操作(译注:也就是对其无法进行复制,我们无法得到指向同一个对象的两个unique_ptr),但是可以进行移动构造和移动赋值操作o 保存指向某个对象的指针,当它本身被删除释放的时候(例如,离开某个作用域),会使用给定的删除器(delete转载 2015-03-15 19:26:06 · 446 阅读 · 0 评论 -
【C++11】新特性——weak_ptr
weak_ptr弱指针(weak pointer)经常被解释为用来打破使用shared_ptr管理的数据结构中循环(?)。但是我认为,将weak_ptr看成是指向具有下列特征的对象的指针更好一些。只有当对象存在的时候,你才需要对其进行访问并且它可能被其他人删除释放并且在最后一次使用之后调用其析构函数(通常用于释放那些不具名的内存(anon-memory)资源(译注:weak转载 2015-03-15 19:28:53 · 600 阅读 · 0 评论 -
【C++11】新特性——常量表达式constexpr
C++语言一直具有常量表达式的概念。这些诸如3+4之类的表达式总是产生相同的结果且不具备副作用。常量表达式给编译器带来了优化的可能,而编译器也经常在编译期执行此类表达式并将结果存放在程序中。此外,C++语言规范中有一些地方需要使用常量表达式。定义数组需要常量表达式,而枚举值也必须是常量表达式。然而,每当碰到函数调用或对象构造,常量表达式便不再有效。所以简单如下例便不合法:int G原创 2015-03-15 19:40:29 · 2844 阅读 · 0 评论 -
【C++11】新特性——共享资源的智能指针shared_ptr
shared_ptr被用来表示共享的拥有权。也就是说,当两段代码都需要访问一些数据,而它们又都没有独占该数据的所有权(从某种意义上来说就是该段代码负责销毁该对象)。这时我们就需要shared_ptr。shared_ptr是一种计数指针。当引用计数变为0时,shared_ptr所指向的对象就会被删除。下面我们用一段代码来说明这点。 void test() { sha转载 2015-03-15 19:21:20 · 443 阅读 · 0 评论 -
【C++11】新特性——auto的使用
C++11中引入的auto主要有两种用途:自动类型推断和返回值占位。auto在C++98中的标识临时变量的语义,由于使用极少且多余,在C++11中已被删除。前后两个标准的auto,完全是两个概念。1. 自动类型推断 auto自动类型推断,用于从初始化表达式中推断出变量的数据类型。通过auto的自动类型推断,可以大大简化我们的编程工作。下面是一些使用auto的例子。转载 2015-03-05 19:32:46 · 392 阅读 · 0 评论 -
i++是否原子操作?并解释为什么?
不是原子操作。理由:1.i++分为三个阶段:内存到寄存器寄存器自增写回内存这三个阶段中间都可以被中断分离开. 2.++i首先要看编译器是怎么编译的,某些编译器比如VC在非优化版本中会编译为以下汇编代码:__asm{ moveax, dword ptr[i] inc eax mov dwordptr[i],转载 2017-04-12 20:26:40 · 650 阅读 · 0 评论