C++ 中 Const Int 和 Int Const 之间的区别
任何编程语言中最受喜爱和最棘手的问题是那些微小的变化会对程序的运行方式和输出产生很大的影响。
在本文中,我们将讨论 const int
是否与 C++ 中的 int const
相同。
C++ 中 const int
和 int 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 int
和 int 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 const
与 const int
相同,但有一个问题。这对于变量来说是正确的,直到指针不进来。
对于指针,关键字 const
的含义根据其位置而变化。让我们讨论关键字 const
如何与指针一起工作。
const int
和 int const
与指针一起
将 const
关键字与指针一起使用非常简单。我们可以使指针不可变或指向不可变的内容。
看下面的代码行。指针 demo
是一个常量指针,它的值不能改变。
这意味着它不能被修改为指向不同的值或变量。我们从右到左阅读这个 - demo 是一个指向整数的常量指针。
int * const demo = &anyvalue;
但是,在下面给出的第二段代码中,指针 demo
指向的数据不能更改。我们将其解读为 - demo 是一个指向常量整数的指针。
const int *demo = &anyvalue;
让我们通过示例来理解这两行代码。
在 C++ 中使用 int * const
如上所述,将关键字 const
放在指针变量之前意味着我们不能将指针更改为指向不同的值或变量。这可以通过一个例子更深刻地看出。
以下几点总结了下面给出的代码中发生的事情。
代码:
#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 *
我们已经知道我们可以使用指针来改变变量的值。这在下面的示例中显示。
以下几点总结了这段代码中发生的事情。
代码:
#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 int
和 int const
的不同之处。此外,我们看到了它们如何在变量和指针的上下文中工作。
我们还了解到,这两种格式对于简单变量的含义相同,但指针的含义会发生显着变化。我们通过各种工作示例理解了这一点,并且还学习了 C++ 的 const
关键字的基础知识。
相关文章
在 C++ 中通过掷骰子生成随机值
发布时间:2023/04/09 浏览次数:169 分类:C++
-
本文解释了如何使用时间因子方法和模拟 C++ 中的掷骰子的任意数方法生成随机数。了解它是如何工作的以及它包含哪些缺点。提供了一个 C++ 程序来演示伪数生成器。
在 C++ 中使用模板的链表
发布时间:2023/04/09 浏览次数:158 分类:C++
-
本文解释了使用模板在 C++ 中创建链表所涉及的各个步骤。工作程序演示了一个链表,该链表使用模板来避免在创建新变量时声明数据类型的需要。
在 C++ 中添加定时延迟
发布时间:2023/04/09 浏览次数:142 分类:C++
-
本教程将为你提供有关在 C++ 程序中添加定时延迟的简要指南。这可以使用 C++ 库为我们提供的一些函数以多种方式完成。
在 C++ 中创建查找表
发布时间:2023/04/09 浏览次数:155 分类:C++
-
本文重点介绍如何创建查找表及其在不同场景中的用途。提供了三个代码示例以使理解更容易,并附有代码片段以详细了解代码。
如何在 C++ 中把字符串转换为小写
发布时间:2023/04/09 浏览次数:63 分类:C++
-
介绍了如何将 C++ std::string 转换为小写的方法。当我们在考虑 C++ 中的字符串转换方法时,首先要问自己的是我的输入字符串有什么样的编码
如何在 C++ 中确定一个字符串是否是数字
发布时间:2023/04/09 浏览次数:163 分类:C++
-
本文介绍了如何检查给定的 C++ 字符串是否是数字。在我们深入研究之前,需要注意的是,以下方法只与单字节字符串和十进制整数兼容。
如何在 c++ 中查找字符串中的子字符串
发布时间:2023/04/09 浏览次数:65 分类:C++
-
本文介绍了在 C++ 中检查一个字符串是否包含子字符串的多种方法。使用 find 方法在 C++ 中查找字符串中的子字符串
如何在 C++ 中把字符串转换为 Char 数组
发布时间:2023/04/09 浏览次数:107 分类:C++
-
本文介绍了在 C++ 中把字符串转换为 char 数组的多种方法。使用 std::basic_string::c_str 方法将字符串转换为 char 数组