C++ 中 Const Int 和 Int Const 之间的区别

Shikha Chaudhary 2024年2月16日
  1. C++ 中 const intint const 的区别
  2. C++ const 关键字
  3. const intint const 带变量
  4. const intint const 与指针一起
  5. 在 C++ 中使用 int * const
  6. 在 C++ 中使用 const int *
  7. 结论
C++ 中 Const Int 和 Int Const 之间的区别

任何编程语言中最受喜爱和最棘手的问题是那些微小的变化会对程序的运行方式和输出产生很大的影响。

在本文中,我们将讨论 const int 是否与 C++ 中的 int const 相同。

C++ 中 const intint const 的区别

代码:

int const a = 1000;
const int a = 1000;

这是两行看起来几乎相同的代码。现在,这两行代码是一样的吗?

在回答这个问题之前,让我们重温一下 C++ 的 const 关键字的基础知识。

C++ const 关键字

C++ 的 const 关键字有助于保持某些事物不变。这意味着如果在任何变量、指针或方法之前放置 const 关键字,则这些变量、指针和方法的数据项的值在程序执行期间不能更改。

假设我们尝试更改任何使用 const 关键字初始化的变量、指针或方法的值,这会给我们带来错误。

代码:

#include <iostream>
using namespace std;

int main() {
  const int demo = 1;  // constant variable
  cout << demo;
  demo = 2  // changing the value of constant variable
         cout
         << demo;
  return 0;
}

输出:

In function 'int main()': error: assignment of read-only variable 'demo'
    9 |     demo = 2
    |     ~~~~~^~~

在上面的示例中,我们声明了一个 const 变量 demo 并为其赋值 1。然后,我们为同一个常量变量分配一个不同的值 2

正如你在输出中看到的那样,这会导致错误。

代码:

#include <iostream>
using namespace std;

int main() {
  int demo = 1;
  cout << "The initial value is: " << demo << endl;

  // changing the value of the variable
  demo = 2;

  cout << "The changed value is: " << demo << endl;
  return 0;
}

输出:

The initial value is: 1
The changed value is: 2

这一次,我们不用关键字 const 初始化变量 demo。因此,我们可以更改此变量的值而不会出现任何错误。

这基本上就是 const 关键字的工作原理。请参阅链接以了解有关 const 关键字的更多信息。

让我们回到我们必须回答的问题。

const intint const 带变量

在 C++ 中将 const 附加到变量的标准方法是将此关键字放在变量的数据类型之前。但是,如果我们将它放在变量本身之前,它的用途和工作方式相同。

这意味着以下代码行是等效且正确的。

const int demo = 1000;
int const demo = 1000;

当你阅读此类声明时,诀窍是从右到左。因此,第一行代码将被解读为 - demo 是一个常量整数。

而第二行读作 - demo 是一个常量整数。毫无疑问,这两种说法的意思是一样的。

我们可以通过一个工作示例来验证这一点。在以下示例中,我们将关键字 const 放在数据类型之前,即 int,然后打印变量 demo

代码:

#include <iostream>
using namespace std;

int main() {
  const int demo = 1000;  // const keyword before the data type
  cout << demo;
}

输出:

1000

让我们尝试在变量 demo 本身之前放置关键字 const

#include <iostream>
using namespace std;

int main() {
  int const demo = 1000;  // const keyword before the variable itself
  cout << demo;
}

输出:

1000

看看这些语句如何以相同的方式工作而不会导致任何类型的错误。当我们必须声明一个常量变量时​​,我们可以使用这些语句中的任何一个。

因此,我们可以得出结论,int constconst int 相同,但有一个问题。这对于变量来说是正确的,直到指针不进来。

对于指针,关键字 const 的含义根据其位置而变化。让我们讨论关键字 const 如何与指针一起工作。

const intint const 与指针一起

const 关键字与指针一起使用非常简单。我们可以使指针不可变或指向不可变的内容。

看下面的代码行。指针 demo 是一个常量指针,它的值不能改变。

这意味着它不能被修改为指向不同的值或变量。我们从右到左阅读这个 - demo 是一个指向整数的常量指针。

int* const demo = &anyvalue;

但是,在下面给出的第二段代码中,指针 demo 指向的数据不能更改。我们将其解读为 - demo 是一个指向常量整数的指针。

const int *demo = &anyvalue;

让我们通过示例来理解这两行代码。

在 C++ 中使用 int * const

如上所述,将关键字 const 放在指针变量之前意味着我们不能将指针更改为指向不同的值或变量。这可以通过一个例子更深刻地看出。

以下几点总结了下面给出的代码中发生的事情。

  1. 在这里,我们首先将变量 one 的值赋给指针变量*demo。这意味着指针*demo 指向变量 one
  2. 在打印变量 one 的值时,我们得到输出为 1,而在打印 demo 时,我们得到它指向的地址。这是变量 one 的地址。
  3. 稍后,我们将另一个变量 two 分配给同一个指针变量 demo 并打印值。这次指针返回一个不同的地址。

代码:

#include <iostream>
using namespace std;

int main() {
  int one = 1;
  int two = 2;
  int *demo = &one;  // demo pointer points to variable one

  cout << one << endl;
  cout << demo << endl;

  demo = &two;  // assigning the variable two to demo variable

  cout << two << endl;
  cout << demo << endl;

  return 0;
}

输出:

1
0x7ffc22e802a8
2
0x7ffc22e802ac

你可以看到我们如何将不同的变量分配给同一个指针变量。如果在指针变量之前附加 const 关键字,这种更改是不可能的。

代码:

#include <iostream>
using namespace std;

int main() {
  int one = 1;
  int two = 2;
  int* const demo = &one;  // attach const keyword before the pointer variable

  cout << one << endl;
  cout << demo << endl;

  demo = &two;  // this assignment will now give an error

  cout << two << endl;
  cout << demo << endl;

  return 0;
}

输出:

In function 'int main()': error: assignment of read-only variable 'demo'
   13 |     demo = &two;
      |     ~~~~~^~~~~~

请注意,这一次,由于声明的指针是常量,我们不能为其分配不同的变量。因此我们得到一个错误。

这就是 int const 与指针一起使用时的含义。

在 C++ 中使用 const int *

我们已经知道我们可以使用指针来改变变量的值。这在下面的示例中显示。

以下几点总结了这段代码中发生的事情。

  1. 我们首先将值 1 分配给变量 one,指针*demo 指向变量 one
  2. 然后,我们打印变量 one 和指针*demo 的值。这两个都将输出作为 1
  3. 稍后,我们将值 2 分配给指针变量*demo
  4. 最后,我们打印变量 one 和指针 demo 的值,但这次它们都将输出作为 2

代码:

#include <iostream>
using namespace std;

int main() {
  int one = 1;  // variable one holds the value 1
  int *demo = &one;

  cout << one << endl;
  cout << *demo << endl;

  *demo = 2;  // assign the value 2 to variable demo

  cout << one << endl;
  cout << *demo << endl;
}

输出:

1
1
2
2

借助分配变量的指针,了解变量的值如何变化。现在,如果你在指针的数据类型之前使用 const 关键字,这种可变性将是不可能的。

代码:

#include <iostream>
using namespace std;

int main() {
  int one = 1;
  const int *demo = &one;  // attach const keyword before data type

  cout << one << endl;
  cout << *demo << endl;

  *demo = 2;  // this assignment will give an error now

  cout << one << endl;
  cout << *demo << endl;
}

输出:

In function 'int main()': error: assignment of read-only location '* demo'
   12 |     *demo = 2;
      |     ~~~~~~^~~

请注意,如果我们尝试更改指针指向的变量的值,则会出现错误。这就是 const int 与指针一起使用时的含义。

结论

在本文中,我们了解了 const intint const 的不同之处。此外,我们看到了它们如何在变量和指针的上下文中工作。

我们还了解到,这两种格式对于简单变量的含义相同,但指针的含义会发生显着变化。我们通过各种工作示例理解了这一点,并且还学习了 C++ 的 const 关键字的基础知识。

相关文章 - C++ Keyword