副标题#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();
}
static void SomeMethod()
{
Console.WriteLine("你挪用了我的要领");
}
}
}
可是conditional只能针对void要领,这其实很好领略。因为你要知道,它大概被替换掉,就是大概不被编译。假如它有返回值,并且该值需要被其他措施代码利用,那不就是贫苦了吗