【发布时间】:2011-04-03 20:20:54
【问题描述】:
在C/C++ 中创建一个变量const 的“constify”操作是否有意义?
这是一个可能有用的示例,显然我们不想在第一行声明它const:
std::vector<int> v;
v.push_back(5);
constify v; // now it's const
目前,如果没有这种可能性,您必须引入另一个变量才能获得相同的效果:
std::vector<int> v0;
v0.push_back(5);
const std::vector<int>& v = v0;
这更令人困惑,因为它在作用域中添加了一个新名称,您需要将其作为引用以避免复制整个向量(或使用swap?)。
【问题讨论】:
-
如果你只在 if-then-else 的一个分支中构造 v 会发生什么?
-
那么它可能应该是
const只在那个范围内。 -
没有。这是没有意义的。
-
在我看来,@dehmann 正在寻找 Ruby 的
freeze操作的 C++ 等价物。虽然我同意在 C++ 程序中需要这种设备通常表明存在设计缺陷,但我也认为这里的操作词是“一般”。我想不出它的有效用途,但也许有一个...... -
请从您的标题和标签中取出 C。这完全是一个 C++ 问题,我猜无法改变 C 中的静态类型。而这一切出现的“C/C++”真的很伤我的眼,C和C++是两种不同的语言。
标签: c++ variables language-design syntactic-sugar