为什么我不能从用户那里读取值并使其成为常量?

Why can't I read a value from the user and make it a constant?

本文关键字:常量 不能 用户 读取 那里 为什么      更新时间:2023-10-16

输入以下代码后,我会得到一个错误。

const int quantity;
cout << "How much spacing do you want in-between the frames? " ;
cin >> quantity;

错误:未初始化的常量"数量"[-允许]

错误:"运算符>>"的重载不明确

如果我只使用int类型,则不会发生这种情况

int quantity;
cout << "How much spacing do you want in-between the frames? " ;
cin >> quantity;

编译没有问题。我是C++新手,所以我只想知道为什么会这样。

如果将变量定义为

const int quantity;

你说"我想要一个叫quantityint,在任何情况下我都不希望它的价值改变。结果,如果你然后写

cin >> quantity;

编译器说了一些话,大意是"等等 - 您希望我通过将quantity的值替换为用户输入的任何内容来更改它,但早些时候您说您从不希望我更改它!

我的感觉是,您希望在为quantity提供初始值后,该值永远不会更改,但是对于const变量,需要在创建变量时设置初始值。因此,您可以尝试这样的事情:

const int quantity = readValue();

对于某些读取并返回int值的函数readValue()。这样,编译器可以看到quantity被赋予了一个固定值,它知道该值永远不会改变,并且您永远不会尝试直接cinquantity的值。

有关您得到的错误的更多技术观点:当编译器读取

const int quantity;

在没有为其分配任何值的情况下,它报告了一个错误,因为在不给它一个值的情况下创建一个常量是不寻常的。(我从你的代码中可以看出,你的意思是给它一个值,但你这样做的方式是不合法的,编译器也没有把这两件事拼凑在一起)。关于operator >>的第二个错误是因为从cin读取某些内容的不同方法(读取字符串、读取int、读取char等)都没有应用,因为它们中的每一个都假设他们可以获得相关值的可变(可修改)视图。同样,这两个问题都源于这样一个事实,即编译器将你的代码视为两个独立的错误,而不是一个大的"哎呀,这不是const工作方式"的错误。

您只能在声明const局部变量时初始化一次。您的示例看起来不可能工作,但如果添加间接级别,则很简单。

int ReadAnInt()
{
int temp;
cin >> temp;
return temp;
}
const int quantity = ReadAnInt();

const限定符意味着变量是不可变的,您无法更改其值。第一个错误告诉您变量未初始化。

cin允许您为变量赋值,这立即与const限定符相矛盾。

您必须在声明quantity初始化它。此外,您以后无法为其赋值;毕竟,它是恒定的。

首先,您将相同的代码放入两个框中。 我承认你把const符号放在第一个来源中。 其次,const必须在C++的声明中初始化。 因此,您应该将代码放如下

int value;
cin >> value;
const int my_num = value;
相关文章: