当前位置:天才代写 > tutorial > C语言/C++ 教程 > 在C++中界说常量的两种要领的较量

在C++中界说常量的两种要领的较量

2017-11-05 08:00 星期日 所属: C语言/C++ 教程 浏览:394

副标题#e#

在C++中,要界说一个常量,有两种主要的做法

1.标记常量(#define)

2.常值变量(const)

标记常量的界说方法,其实与C++自己没有干系,它是一个编译器指令,可能称为预处理惩罚指令(有关的预处理惩罚指令尚有#include,#ifdefine等等)。它的用法如下

#define PI 3.1415926

这样的语法就界说了一个叫做PI的标记常量,它的值指定为3.1415926.

【留意】因为它其实不是C++语法,所以它不需要(也不能)用分号竣事。

我们怎么利用呢

#include <iostream>
#define PI 3.1415926

using namespace std;

int main()
{
 double Area(int radio);//声明要领
 cout<< Area(2)<<endl;
 return 0;
}

double Area(int radio)//实现要领,这是一个按照半径计较面积的要领
{
 return PI*radio*radio;
}

与标记常量相对的,常值变量需要通过const要害字界说。相对来说,const越发现代,它是c++的一个要害字,它的用法如下

const double PI=3.1415926;

我们把上面的代码转换一下 #include <iostream>

using namespace std;

const double PI=3.1415926;

int main()
{
 double Area(int radio);//声明要领
 cout<< Area(2)<<endl;
 return 0;
}

double Area(int radio)//实现要领,这是一个按照半径计较面积的要领
{
 return PI*radio*radio;
}

总结起来说,我们推荐用const,而不是#define预处理惩罚指令

1.const可以界说数据范例,提高了范例安详性。譬喻,我们上面可以指定PI这个常量是double范例

2.const既然是变量(这里有点别扭,它其实是稳定的,但名称叫做常值变量),那么就有地点,合用面越发广

3.语法上也更好领略一些


#p#副标题#e#

题外话:在C#中能不能利用标记呢?

C#中也可以利用标记界说,譬喻下面这样

#define MINI

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
 class Program
 {
  static void Main(string[] args)
  {
#if MINI
   Console.WriteLine("你界说了MINI标记");
#endif
   Console.Read();
  }
 }

}

 

一般这样做的目标都是为了改变编译行为。因为#define是编译器指令

除了用#if这样的条件编译语句之外,我们还可以用Conditional指令

#define MINI

using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;

namespace ConsoleApplication1
{
 class Program
 {
  static void Main(string[] args)
  {

#if MINI
   Console.WriteLine("你界说了MINI标记");
#endif

   //按条件挪用要领
   SomeMethod();

   Console.Read();
}

[Conditional("MINI")]//Conditional 是一个新的Attribute,可以举办条件编译,本例的意思是只有界说了MINI这个标记的环境下,才将该要领编译进去。不然,任何其他挪用处都将放一个空缺。

static void SomeMethod()
 {
  Console.WriteLine("你挪用了我的要领");
 }
}

}

可是conditional只能针对void要领,这其实很好领略。因为你要知道,它大概被替换掉,就是大概不被编译。假如它有返回值,并且该值需要被其他措施代码利用,那不就是贫苦了吗

 

    关键字:

天才代写-代写联系方式