Welcome 微信登录

首页 / 软件开发 / C++

细论数组维度(dimension)的计算

细论数组维度(dimension)的计算

细论数组维度(dimension)的计算2010-09-14 CSDN博客 林石我们经常需要知道先前定义的数组维度,或是为了对其进行循环遍历,或是其它。当我们显示初始化数组而没有指定其维度时尤其如此:int is[]={1,2,3};有开发经验的读者可能经常使用如下方式来实现:int dimension=sizeof(is)/sizeof(is[0])这在大部分情况下都工作得很好。只是敲的键盘次数有点多。所以,有了如下这个宏的出现:#define DIM(...
深入理解sizeof

深入理解sizeof

深入理解sizeof2010-09-14房秉毅最近在论坛里总有人问关于sizeof的问题,并且本人对这个问题也一直没有得到很好的解决,索性今天对它来个较为详细的总结,同时结合strlen进行比较,如果能对大家有点点帮助,这是我最大的欣慰了。一、好首先看看sizeof和strlen在MSDN上的定义:首先看一MSDN上如何对sizeof进行定义的:sizeof Operatorsizeof expressionThe sizeof keyword gives...
CString操作指南

CString操作指南

CString操作指南2010-09-14littleloach通过阅读本文你可以学习如何有效地使用CString。CString 是一种很有用的数据类型。它们很大程度上简化了MFC中的许多操作,使得MFC在做字符串操作的时候方便了很多。不管怎样,使用CString有很多特殊的技巧,特别是对于纯C背景下走出来的程序员来说有点难以学习。这篇文章就来讨论这些技巧。使用CString可以让你对字符串的操作更加直截了当。这篇文章不是CString的完全手册,但囊括...
声明函数指针并实现回调

声明函数指针并实现回调

声明函数指针并实现回调2010-09-14赵湘宁程序员常常需要实现回调。本文将讨论函数指针的基本原则并说明如何使用函数指针实现回调。注意这里针对的是普通的函数,不包括完全依赖于不同语法和语义规则的类成员函数(类成员指针将在另文中讨论)。声明函数指针回调函数是一个程序员不能显式调用的函数;通过将回调函数的地址传给调用者从而实现调用。要实现回调,必须首先定义函数指针。尽管定义的语法有点不可思议,但如果你熟悉函数声明的一般方法,便会发现函数指针的声明与函数声明非...
C++函数的可变参数详谈

C++函数的可变参数详谈

C++函数的可变参数详谈2010-09-14可变参数的英文表示为:variable argument.它在函数的定义时,用三个点号"."表示,用逗号与其它参数分隔.可变参数的特点:不像固定参数那样一一对应,也不像固定参数有固定的参数类型和参数名称;可变参数中个数不定可是传入的是一个参数也可以是多个;可变参数中的每个参数的类型可以不同,也可以相同;可变参数的每个参数并没有实际的名称与之相对应.由此可见,可变参数的形式非常自由而富有弹生.因些,它给那些天才程序...
Google C++编程风格指南(一)

Google C++编程风格指南(一)

Google C++编程风格指南(一)2010-09-21背景Google的开源项目大多使用C++开发。每一个C++程序员也都知道,C++具有很多强大的语言特性,但这种强大不可避免的导致它的复杂,这种复杂会使得代码更易于出现bug、难于阅读和维护。本指南的目的是通过详细阐述在C++编码时要怎样写、不要怎样写来规避其复杂性。这些规则可在允许代码有效使用C++语言特性的同时使其易于管理。风格,也被视为可读性,主要指称管理C++代码的习惯。使用术语风格有点用词不...
Google C++编程风格指南(二):作用域

Google C++编程风格指南(二):作用域

Google C++编程风格指南(二):作用域2010-09-21作用域1. 命名空间(Namespaces)在.cc文件中,提倡使用不具名的命名空间(unnamed namespaces,译者注:不具名的命名空间就像不具名的类一样,似乎被介绍的很少:-()。使用具名命名空间时,其名称可基于项目或路径名称,不要使用using指示符。定义:命名空间将全局作用域细分为不同的、具名的作用域,可有效防止全局作用域的命名冲突。优点:命名空间提供了(可嵌套)命名轴线(...
Google C++编程风格指南(三):C++类

Google C++编程风格指南(三):C++类

Google C++编程风格指南(三):C++类2010-09-21关于类的注意事项,总结一下:1. 不在构造函数中做太多逻辑相关的初始化; 2. 编译器提供的默认构造函数不会对变量进行初始化,如果定义了其他构造函数,编译器不再提供,需要编码者自行提供默认构造函数;3. 为避免隐式转换,需将单参数构造函数声明为explicit;……类类是C++中基本的代码单元,自然被广泛使用。本节列举了在写一个类时要做什么、不要做什么。1. 构...
Google C++编程风格指南(四):智能指针和其他C++特性

Google C++编程风格指南(四):智能指针和其他C++特性

Google C++编程风格指南(四):智能指针和其他C++特性2010-09-211.对于智能指针,安全第一、方便第二,尽可能局部化(scoped_ptr); 2.引用形参加上const,否则使用指针形参;3.函数重载的使用要清晰、易读;4.鉴于容易误用,禁止使用缺省函数参数(值得商榷);5.禁止使用变长数组;6.合理使用友元……Google特有的风情Google有很多自己实现的使C++代码更加健壮的技巧、功能,以及有异于别处...
Google C++编程风格指南(五):命名约定

Google C++编程风格指南(五):命名约定

Google C++编程风格指南(五):命名约定2010-09-211.总体规则:不要随意缩写;2.宏、枚举等使用全部大写+下划线;3.变量(含类、结构体成员变量)、文件、命名空间、存取函数等使用全部小写+下划线,类成员变量以下划线结尾,全局变量以g_开头;4.参考现有或相近命名约定……命名约定最重要的一致性规则是命名管理,命名风格直接可以直接确定命名实体是:类型、变量、函数、常量、宏等等,无需查找实体声明,我们大脑中的模式匹配...
Google C++编程风格指南(六):代码注释

Google C++编程风格指南(六):代码注释

Google C++编程风格指南(六):代码注释2010-09-21注释注释虽然写起来很痛苦,但对保证代码可读性至为重要,下面的规则描述了应该注释什么、注释在哪儿。当然也要记住,注释的确很重要,但最好的代码本身就是文档(self-documenting),类型和变量命名意义明确要比通过注释解释模糊的命名好得多。注释是为别人(下一个需要理解你的代码的人)而写的,认真点吧,那下一个人可能就是你!1.注释风格(Comment Style)使用//或/* */,统...
Google C++编程风格指南(七):格式

Google C++编程风格指南(七):格式

Google C++编程风格指南(七):格式2010-09-211.行宽原则上不超过80列,把22寸的显示屏都占完,怎么也说不过去;2.尽量不使用非ASCII字符;3.UNIX/Linux下无条件使用空格,MSVC的话使用Tab也无可厚非;4.函数参数、逻辑条件、初始化列表:要么所有参数和函数名放在同一行,要么所有参数并排分行……格式代码风格和格式确实比较随意,但一个项目中所有人遵循同一风格是非常容易的,作为个人未必同意下述格式...
Google C++编程风格指南(八):规则之例外

Google C++编程风格指南(八):规则之例外

Google C++编程风格指南(八):规则之例外2010-09-21编程风格指南的使用要点在于提供一个公共的编码规范,所有人可以把精力集中在实现内容而不是表现形式上。我们给出了全局的风格规范,但局部的风格也很重要,如果你在一个文件中新加的代码和原有代码风格相去甚远的话,这就破坏了文件本身的整体美观也影响阅读规则之例外前面说明的编码习惯基本是强制性的,但所有优秀的规则都允许例外。1. 现有不统一代码(Existing Non-conformant Code...
C++异常和错误处理经验谈

C++异常和错误处理经验谈

C++异常和错误处理经验谈2010-09-21代替 try / catch / throw 的通常做法是返回一个返回代码(有时称为错误代码),例如,printf(), scanf() 和 malloc()就是这样工作的:调用者通过if等语句来测试返回值判断函数是否成功。尽管返回代码技术有时是最适当的错误处理技术,但会增加不必要的if语句这样的令人讨厌的效果。质量降级:众所周知,条件语句可能包含的错误大约十倍于其他类型的语句。因此,在其他都相同时,如果你能从...
实现真正意义上的二维动态数组模板

实现真正意义上的二维动态数组模板

实现真正意义上的二维动态数组模板2010-09-21zyq654321我们可以通过动态数组的反例来确定动态数组应该具有哪些特性。大家都知道以下的方式是定义一个静态数组。int iCount[10];int iCount[10][10];从上面可以看出,定义了静态数组之后,无论程序如果使这个数组,该数组在内存中所占空间的大小,位置是确定不变的。我们可以得出结论,对于编译器,静态数组的大小和空间是已知的,因此编译器可以自动为该数组分配空间。具体情况是:如果你定...
泛型编程-转移构造函数(Generic Programming: Move Constructor)

泛型编程-转移构造函数(Generic Programming: Move Constructor)

泛型编程-转移构造函数(Generic Programming: Move Constructor)2010-09-21 Andrei Alexandrescu 1 引言我相信大家很了解,创建、复制和销毁临时对象是C++编译器最爱的户内运动。不幸的是,这些行为会降低C++程序的性能。确实,临时对象通常被视为C++程序低效的第一因素[1]。下面的代码是正确的:vector < string > ReadFile();vector < str...
单实例设计模式的实现

单实例设计模式的实现

单实例设计模式的实现2010-09-21赵湘宁单实例设计可能是使用最广泛的设计模式。其思想意图是保证一个类只有一个实例,并且提供类对象的全程访问。单实例对象应用的范围很广:如GUI应用必须是单鼠标,MODEM的联接需要一条且只需要一条电话线,操作系统只能有一个窗口管理器,一台PC连一个键盘。本文将讨论如何用C++实现单实例模式,并解释如何优化单线程应用的设计。设计方案使用全程对象能够保证方便地访问实例,但是不能保证只声明一个对象-也就是说除了一个全程实例外...
<< 121 122 123 124 125 126 127 128 129 130 >>