`

改善c++程序建议——其他

c++ 
阅读更多
1、c++编写死循环一般使用:

while(1)
{
}

2、关键字static有三个明显的作用

1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。

3、关键字const有什么含意?

const可以理解为"只读";

4、C++中什么数据分配在栈或堆中,New分配数据是在近堆还是远堆中?
答:栈: 存放局部变量,函数调用参数,函数返回值,函数返回地址。由系统管理
堆: 程序运行时动态申请,new 和 malloc申请的内存就在堆上

5、C语言中的整数自动转换原则

void foo(void)
{
    unsigned int a = 6;
    int b = -20;
    (a+b > 6) ? puts("> 6") : puts("<= 6");
}
这个问题测试你是否懂得C语言中的整数自动转换原则,我发现有些开发者懂得极少这些东西。不管如何,这无符号整型问题的答案是输出是 ">6"。原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。因此-20变成了一个非常大的正整数,所以该表达式计算出的结果大于6。这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。如果你答错了这个问题,你也就到了得不到这份工作的边缘。

6、宏函数的必要性与缺点


为什么要使用宏呢?因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去执行前要保存现场并记忆执行的地址,转回后要恢复现场,并按原来保存地址继续执行。因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率。而宏只是在预处理的地方把代码展开,不需要额外的空间和时间方面的开销,所以调用一个宏比调用一个函数更有效率。

  但是宏也有很多的不尽人意的地方。

  1、.宏不能访问对象的私有成员。

  2、.宏的定义很容易产生二意性。


7、内联函数相对于宏的优势


内联函数和宏的区别在于,宏是由预处理器对宏进行替代,而内联函数是通过编译器控制来实现的。而且内联函数是真正的函数,只是在需要用到的时候,内联函数像宏一样的展开,所以取消了函数的参数压栈,减少了调用的开销。你可以象调用函数一样来调用内联函数,而不必担心会产生于处理宏的一些问题。

  我们可以用Inline来定义内联函数,不过,任何在类的说明部分定义的函数都会被自动的认为是内联函数。
下面我们来介绍一下内联函数的用法。

  内联函数必须是和函数体申明在一起,才有效。像这样的申明Inline Tablefunction(int I)是没有效果的,编译器只是把函数作为普通的函数申明,我们必须定义函数体。

Inline tablefunction(int I) {return I*I}; 

我们也可以将定义在类的外部的函数定义为内联函数,比如:
Class TableClass{
 Private:
  Int I,j;
 Public:
  Int add() { return I+j;};
  Inline int dec() { return I-j;}
  Int GetNum();
}
inline int tableclass::GetNum(){
return I;
}

当然,内联函数也有一定的局限性。就是函数中的执行代码不能太多了,如果,内联函数的函数体过大,一般的编译器会放弃内联方式,而采用普通的方式调用函数。这样,内联函数就和普通函数执行效率一样了。



8、枚举型常量使程序的可读性增强


#include <iostream>

using namespace std;

int main ( )
{

enum day{
Sunday, Monday, Tuesday, Wednesday, Thurday,
Friday, Saturday
};

day today;

today = Monday;
if( today == Sunday || today == Saturday)
{
cout << "周末休息\n";

}else {

cout << "工作日\n";
return 0;
}
}


分享到:
评论

相关推荐

    Effective+C+++3rd+chm+中文版(代码加亮)

    对于 C++ ——一种以拥有非同寻常的能力范围和表现力而自豪的语言——更是尤其如此。如果能正确使用,与 C++ 共事是一件令人快乐的事情。极多样的设计样式被直接表达并有效实现。对于 classes(类),functions...

    effective stl

    世界级C++大师Scott Meyers之Effective三部曲之一,中国C++技术先驱及著名作译者潘爱民先生经典译作——如同Meyers的其他著作一样,本书充满了从实践中总结出来的智慧,其清晰、简明、透彻的风格,必将使每一位STL...

    C++书籍集合

    该书围绕55条准则,每一条都介绍了一个可让你写出更好的C++程序代码的方法,并以特别设计过的例子详加讨论。 《Exceptional C++(C++编程剖析)》和《More exceptional C++》 这两本书中都包含了40个C++编程问题,...

    EffectiveC#中文版--改善C#程序的50种方法

    书 名:EffectiveC#中文版-改善C#程序的50种方法 作 者:(美)Bill Wagner(瓦格纳) 原版名称:Effective C#: 50 Specific Ways to Improve Your C# 译 者:李建忠 出版时间:2007 年5月 内容简介:...

    Effective+C#+中文版改善C#程序的50种方法

    本书围绕一些关于C#和.NET的重要主题,包括C#语言元素、.NET资源管理、使用C#表达设计、创建二进制组件和使用框架等,讲述了最常见的50个问题的解决方案,为程序员提供了改善C#和.NET程序的方法。本书通过将每个条款...

    重构_改善既有代码的设计

    软件工程领域的超级经典巨著,与另一巨著《设计模式》并称"软工双雄",全美销量超过100000册,亚马逊书店五星书。  在本书中,作者Martin ...对象专家运用许多技术来改善既有程序的结构完美性与性能,已有数年之久。

    个人日记管理系统——C编写

    本系统是本人在修结构化这门课程时所写的用C语言编写的一个小程序,系统功能简单,界面设计这方面有待改善,但是已实现基本的日记管理功能,仅供学习参考使用,欢迎多多提意见哈,O(∩_∩)O谢谢!~

    ZoomIt v4中文版

    此程序是由Borland Delphi 2.0 +Microsoft Visual Studio C++6.0编写,本人对Delphi不熟悉,所以点击托盘出现的英文没有汉化, 汉化不是很完美,但绝对满足你的使用,请大家多多包涵。 Gemgin 现在是一名软件工程师...

    重构-改善既有代码的设计+中文版

    软件工程领域的超级经典巨著,与另一巨著《设计模式》并称"软工双雄",全美销量超过100000册,亚马逊书店五星书。 在本书中,作者Martin ...对象专家运用许多技术来改善既有程序的结构完美性与性能,已有数年之久。

    一个程序员五年学习观.doc

    * 《Effective C++:改善程序与设计的 55 个具体做法》、《More Effective C++:35 个改善编程与设计的有效方法(中文版)》、《C++沉思录》、《C++Templates 中文版》、《深度探索 C++ 对象模型》、《泛型编程与 STL》...

    PLSQLDeveloper下载

    比较用户对象——对表格定义、视图、程序单元等作出修改后,将这些修改传递给其他数据库用户或检查修改前后的区别将是非常有用的。这也许是一个其他的开发环境,如测试环境或制作环境等。而比较用户对象功能则允许...

    asp.net知识库

    按键跳转以及按Enter以不同参数提交,及其他感应事件 动态控制Page页的Head信息 SubmitOncePage:解决刷新页面造成的数据重复提交问题 SharpRewriter:javascript + xml技术利用#实现url重定向 采用XHTML和CSS设计可...

    超爽的自学课件(java)

    我们最后介绍的是Java 1.2的“Swing”库——它使Java的UI组件得到了显著的改善。 &lt;br&gt;(14) 第14章:多线程 Java提供了一套内建的机制,可提供对多个并发子任务的支持,我们称其为“线程”。这线程均在单一的...

    【理论学习班】短波单边带收发信机原理(张毓华)BMP PART2

    短波单边带收发信机原理 简要介绍 作者:张毓华 出版:北京航空航天大学出版社 - 1988年出版 分类:TN832 尺寸:26cm ...9. Visual C++6.0编程基础,张然,北京航空航天大学出版社,7-81012-885-X,TP312C

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    2.13 SQL执行——总览 52 2.14 小结 53 第3章 访问和联结方法 55 3.1 全扫描访问方法 55 3.1.1 如何选择全扫描操作 56 3.1.2 全扫描与舍弃 59 3.1.3 全扫描与多块读取 60 3.1.4 全扫描与高水位线 60 3.2 ...

    餐饮管理信息系统管理信息系统课程设计.doc

    其次,基于IPAD类型的触屏类电子产品已经极大的普及,我们完全可以生产一个点菜 PAD,且点菜PAD可以与收银端、厨师端 最后,C++、JAVA等面向对象程序设计语言已经完全可以轻易应付这一系统;另外数 据库系统也完全...

Global site tag (gtag.js) - Google Analytics