【问题标题】:Is it possible in C++ to initialize a const Int with scanf() or std::cin << or some input function like that? [duplicate]是否可以在 C++ 中使用 scanf() 或 std::cin << 或类似的某些输入函数初始化 const Int ? [复制]
【发布时间】:2021-09-18 03:21:08
【问题描述】:

我想声明一个array[x],但我希望我的数组大小在每次新程序启动时都可以更改。我的第一个想法是int x; scanf("%d",&amp;x); 在我声明我的array[x] 之前有一行,但这不起作用,因为 x 必须是一个 const int。

我的下一个想法是简单地创建一个const int x; scanf("%d", &amp;x);,但这次尝试也失败了,因为 array[x] 或者说必须先初始化 const int x 才能启动程序。

我的最后一个想法是初始化 x const int x = 1; 和下一次 scanf("%d", &amp;x); 在这个尝试中,程序没有崩溃,但它没有用。在我启动程序的那一刻,我的array[x] 被我的“旧”x 初始化。所以我改变的 x 没有影响。

你有什么想法可以解决这个小问题,或者在我用 C++ 启动程序后无法初始化 const int 或整体 const 类型?

【问题讨论】:

  • 阅读x。使用您想要的 x 值输出源代码。编译生成的代码。从生成的代码运行程序。或者,使用std::vector
  • 看起来你想要的是一个常量表达式,这不是你在运行时可以得到的。如果目的是将其用作数组维度,则可以使用std::vector

标签: c++ arrays types constants


【解决方案1】:

很遗憾,您不能直接执行此操作。 你可以做的是利用这个想法:

const int x = []{int x; scanf("%d", &x); return x;}();

对于一个数组,

const std::vector<double> v = []{
 int x; scanf("%d", &x);
 std::vector<double> v(x);
 ...fill v...
 return v;
}();

如果您想要一个大小固定(在初始化之后)但具有可修改元素的数组,您甚至需要考虑静态向量类型的结构。 (无论如何,这种数组变体并不是一个很好的类型)。

【讨论】:

  • 谢谢,我试试
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多