如何在C++中使用const

时间:2020-02-23 14:29:54  来源:igfitidea点击:

在本教程中,我们将重点介绍C++中的const。

C++中const的基础

C++有大量的关键字,可以帮助我们整体上为数据变量提供特殊功能。

C++中的const使特定的数据实体成为一个常数,即在整个程序范围内,const变量的值保持不变。

在实际情况下,const关键字对于在使用过程中将特定值锁定为静态和常量非常重要。

让我们举个例子。

对于自动电子邮件系统,其中的所有者希望在每个月的最后日期向其员工发送邮件,所有者的电子邮件地址将保持不变。
因此,我们可以声明一个变量来保存所有者的电子邮件地址,并使用const关键字使其保持不变。

因此,我们实际上将节省时间并降低系统的复杂性。

C++中const的变体

C++中的const关键字可以与编程的不同数据实体一起使用,例如:

  • 资料变数
  • 函数参数
  • 指针
  • 类的对象
  • 类数据成员

1.数据变量为const

当数据变量声明为const时,等于该变量的值被视为常量并且是不可变的。

语法:

const data-type variable = value;

例:

#include<iostream>
using namespace std;
int main()
{
  const int A=10,B=20;
  cout<<"Addition: "<<(A+B);

}

输出:

Addition: 30

如果我们尝试更改或者操纵const数据变量的值,则编译器将引发错误,表明我们无法将值分配给只读变量。

#include<iostream>
using namespace std;
int main()
{
  const int A=10;
  A+=10;
  cout<<A;

}

输出:

main.cpp: In function ‘int main()’:
main.cpp:6:8: error: assignment of read-only variable ‘A’
   A+=10;

2.函数参数在C++中为const

我们甚至可以将一个参数分配给函数/方法作为常量,从而将所有更改限制在该函数参数上。

语法:

data-type function(const data-type variable)
{
//body
}

例:

#include<iostream>
using namespace std;

int add(const int x)
{   
  int res=0;
  int error=20;
  res = x+error;
  return res;
}
int main()
{
int ans = add(50);
cout<<"Addition:"<<ans;
}

输出:

Addition:70

如下所示,如果我们尝试操纵const函数参数的值,则编译器将引发错误。

#include<iostream>
using namespace std;

int add(const int x)
{   x=x+100;
  return x;
}
int main()
{
int ans = add(50);
cout<<"Addition:"<<ans;
}

在上面的示例中,我们试图更改const函数参数" x"的值,从而导致编译器错误。

输出:

main.cpp: In function ‘int add(int)’:
main.cpp:5:9: error: assignment of read-only parameter ‘x’
 {   x=x+100;

3.指针为const

指针变量也可以使用以下语法声明为常量:

data-type const *variabl;

例:

#include<iostream>
using namespace std;
int main()
{   int age = 21;
  int const *point = & age;
  cout<<"Pointer value: "<<*point;

}

输出:

Pointer value: 21

错误和异常:

如果我们尝试操纵const指针的值,则会导致编译错误。

#include<iostream>
using namespace std;
int main()
{   int age = 21;
  int const *point = & age;
  *point=*point+10;
  cout<<"Pointer value: "<<*point;

}

输出:

main.cpp: In function ‘int main()’:
main.cpp:6:19: error: assignment of read-only location ‘* point’
   *point=*point+10;
                 

4.类的数据变量为const

也可以将Class变量视为const,以使数据变量的值恒定且不变。

语法:

const data-type variable = value;

例:

#include<iostream>
using namespace std;
class Demo
{
  public:
  const int X = 10;
  
};
int main()
{
 Demo d;
 cout<<d.X;

}

输出:

10

错误和异常:

#include<iostream>
using namespace std;
class Demo
{
  public:
 const int X = 10;
  
};
int main()
{
 Demo d;
 d.X=100;
 cout<<d.X;

}

输出:

main.cpp: In function ‘int main()’:
main.cpp:12:8: error: assignment of read-only member ‘Demo::X’
  d.X=100;

5.类的对象为const

甚至类的对象也可以使用const关键字。
一旦我们将一个类的对象声明为常量,该类的数据变量就变得不可变,即属于该对象所指向的类的数据变量的值无法更改。

语法:

const Class object;

例:

#include<iostream>
using namespace std;
class Demo
{
  public:
  int X = 10;

};
int main()
{
 const Demo d;
 cout<<d.X;

}

输出:

10

错误和异常:

#include<iostream>
using namespace std;
class Demo
{
  public:
  int X = 10;

};
int main()
{
 const Demo d;
 d.X=100;
 cout<<d.X;

}

输出:

main.cpp: In function ‘int main()’:
main.cpp:12:8: error: assignment of member ‘Demo::X’ in read-only object
  d.X=100;