【发布时间】:2012-08-30 01:32:53
【问题描述】:
常见的 std::cin 用法
int X;
cin >> X;
这样做的主要缺点是 X 不能是const。它可以很容易地引入错误;我正在寻找一些技巧来创建一个 const 值,并且只写入一次。
天真的解决方案
// Naive
int X_temp;
cin >> X_temp;
const int X = X_temp;
显然你可以通过将 X 更改为 const& 来改进它;仍然可以修改原始变量。
我正在寻找一个简短而聪明的解决方案来解决这个问题。我确信我不是唯一一个会从这个问题的良好答案中受益的人。
// 编辑: 我希望解决方案能够轻松扩展到其他类型(比如说,所有 POD、std::string 和具有简单构造函数的可移动可复制类)(如果它没有意义,请在 cmets 中告诉我)。
【问题讨论】:
-
将前两行设为函数返回
int:)const int X = read_cin(); -
将
const int更改为const int&不会有任何改进。第二个几乎与const int * const完全相同,因此您将复制sizeof(int*),而在const int中,您将复制sizeof(int),因此数据量可能完全相同。使用对int的引用毫无意义 - 您可能不应该使用对任何 POD-s 的引用。 -
我个人喜欢你提出的“天真的解决方案”。您从用户那里读入的值显然不是一个常量,那么您明确地将它的值复制到另一个您承诺不会通过将其标记为 const 来更改的值。它有点难看,但似乎完全符合正在发生的事情。
-
您的“幼稚”解决方案是应该如何完成的。没有人会因为执行如此简单、平凡的任务而从庞大的类接口中受益。如果你发现自己编写冗长而复杂的函数只是为了设置一个变量,这表明程序设计中出现了严重错误。
-
@BartekBanachewicz “这需要我想阅读的每种类型的函数。”将其设为
read_cin<int>()然后:)