2

可能这可能是一个非常基本的问题,但仍然想了解一些基本概念......

为什么我们将变量定义为 const ?- 在整个程序中保持该特定变量的值不变。

但是,当我遇到构造函数的初始化列表时,它允许在对象构造期间为 const 变量赋值(我尝试了下面的程序,例如),我对 const 关键字本身的基本概念感到困惑。有人可以澄清一下吗?

如果在对象构造期间允许更改,则以下程序中 const 变量的目的是什么?我们有这些行为的实时场景吗?如果是这样,你能给出一些场景吗?

#include<iostream>
using namespace std;

class Test {
    const int t;
public:
    Test(int t):t(t) {}  //Initializer list must be used
    int getT() { return t; }
};

int main() {
    Test t1(10);
    cout<<t1.getT();
    return 0;
}
4

3 回答 3

4

基本上,当数据成员被声明为常量时,它们必须在构造对象之前具有一些值因此我们使用成员初始化器,以便在构造对象之前数据成员具有一些值。

在这个程序中,直到最后,数据成员将具有相同的值

对于真实场景:

例如,您必须制作一个工资单程序,其中每个员工都有一个名字和姓氏,这样您就不会希望函数意外地修改他们的名字,因此为了防止这种情况,您可以保持它们不变。

于 2013-04-23T11:56:14.133 回答
0

为什么我们将变量定义为 const ?

声明 一个变量const以表明它不会被改变。

但是,当我遇到构造函数的初始化列表时,它允许在对象构造期间为 const 变量赋值(我尝试了下面的程序,例如),我对 const 关键字本身的基本概念感到困惑。有人可以澄清一下吗?

如果不是简单类型而是MyClass,它不是赋值而是构造,MyClass将使用构造函数,而不是operator=

于 2013-04-23T11:05:58.537 回答
-1

它在对象构造期间不会改变,因为它没有(定义的)值。
当您const在类中提供 -member 时,这是对象身份的一部分,并且此特定值将在对象的整个生命周期中保持不变。
声明成员const时,您向编译器保证您不会尝试更改此成员的值。

来自MSDN

const关键字指定变量的值是常量,并告诉编译器阻止程序员修改它。

// constant_values1.cpp
int main() {
   const int i = 5;
   i = 10;   // C3892
   i++;   // C2105
}
于 2013-04-23T11:06:52.400 回答