搭建C++开发环境分析

开发 后端
在一些情况下,C++开发环境甚至能够降低程序的性能。因此在使用的时候应该慎重,看完本文你肯定有不少收获,希望本文能教会你更多东西。

C++开发环境包括许多新的和改进的用于提高工作效率的功能。IDE 还进行了重新设计,从而向开发人员提供对.NET Framework 组件的直接访问,我认为C++开发环境会使我们的工作更简单和更轻松。

1.我们先来看看内联函数给我们带来的好处:从一个用户的角度来看,内联函数看起来和普通函数一样,它可以有参数和返回值,也可以有自己的作用域,然而它却不会引入一般函数调用所带来的负担。另外,它可以比宏更安全更容易调试。

 当然有一点应该意识到,inline specifier仅仅是对编译器的建议,编译器有权利忽略这个建议。那么编译器是如何决定函数内联与否呢?一般情况下关键性因素包括函数体的大小,是否有局部对象被声明,函数的复杂性等等。

2.那么如果一个函数被声明为inline但是却没有被内联将会发生什么呢?理论上,当编译器拒绝内联一个函数的时候,那个函数会像普通函数一样被对待,但是还会出现一些其他的问题。例如下面这段代码:

  1. // filename Time.h   
  2. #include<ctime>   
  3. #include<iostream>   
  4. using namespace std;   
  5. class Time   
  6. {   
  7. public:   
  8. inline void Show() { for (int i = 0; i<10; i++) cout<<time(0)<<endl;}   
  9. };  

因为成员函数Time::Show()包括一个局部变量和一个for循环,所以编译器一般拒绝inline,并且把它当作一个普通的成员函数。但是这个包含类声明的头文件会被单独的#include进各个独立的编译单元中:

  1. // filename Time.h   
  2. #include<ctime>   
  3. #include<iostream>   
  4. using namespace std;   
  5. class Time   
  6. {   
  7. public:   
  8. inline void Show() { for (int i = 0; i<10; i++) cout<<time(0)<<endl;}   
  9. };  


程序被链接的时候,linker将会面对两个相同的Time::Show()拷贝,于是函数重定义的连接错误发生。但是老一些的C++实现对付这种情况的办法是通过把一个un-inlined函数当作static来处理。

因此每一份函数拷贝仅仅在自己的编译单元中可见,这样链接错误就解决了,但是在程序中却会留下多份函数拷贝。在这种情况下,程序的性能不但没有提升,反而增加了编译和链接时间以及最终可执行体的大小。
但是幸运的是,新的C++标准中关于un-inlined函数的说法已经改变。

一个符合标准C++实现应该只生成一份函数拷贝。然而,要想所有的编译器都支持这一点可能还需要很长时间。
另外关于内联函数还有两个更令人头疼的问题。#t#

***个问题是该如何进行维护。一个函数开始的时候可能以内联的形式出现,但是随着系统的扩展,函数体可能要求添加额外的功能,结果内联函数就变得不太可能,因此需要把inline specifier去除以及把函数体放到一个单独的源文件中。

另一个问题是当内联函数被应用在代码库的时候产生。当内联函数改变的时候,用户必须重新编译他们的代码以反映这种改变。然而对于一个非内联函数,用户仅仅需要重新链接就可以了。

这里想要说的是,内联函数并不是一个增强性能的灵丹妙药。只有当函数非常短小的时候它才能得到我们想要的效果。但是如果函数并不是很短而且在很多地方都被调用的话,那么将会使得可执行体的体积增大。

【编辑推荐】

  1. 如何正确编写C++项目开发编写项目计划书
  2. C++库函数进行学习探索总结笔记
  3. 深度演示C++语言的种种高安全性
  4. 详细介绍如何准确无误的编写C++语言
  5. 深度演示C++语言的种种高安全性
责任编辑:chenqingxiang 来源: CSDN
相关推荐

2009-06-05 14:54:09

EclipseC++环境搭建

2009-08-09 20:39:11

Linux内核虚拟环境虚拟主机

2012-09-28 03:19:27

互联网创业调研报告

2010-01-08 17:13:46

Visual C++环

2010-01-18 15:19:41

Visual C++开

2010-01-15 09:58:38

C++ Builder

2010-01-15 16:17:04

Carbide C++

2010-01-20 11:02:42

C++开发环境

2010-01-13 11:02:50

C++环境

2010-01-13 10:45:44

Visual C++

2010-01-13 10:37:55

C++开发

2022-12-30 17:12:42

开发c++调试

2010-01-12 18:00:30

Visual C++

2022-09-29 13:24:00

VS codeCC++

2010-09-07 17:27:54

Carbide.c++Symbian移动开发

2010-09-14 09:24:29

C语言

2010-07-09 09:52:36

C#Linux

2013-07-23 06:11:44

Android开发学习Android开发环境Java

2011-01-14 12:44:32

Linux PPCEclipseC

2011-01-14 12:53:45

Linux PPCEclipseC
点赞
收藏

51CTO技术栈公众号