繁体   English   中英

静态数组上的 const_cast 以添加常量

[英]const_cast on a static array to add constness

我面临需要将非常量静态数组传递给 const 参数的情况。 正如我所发现的, const_cast 不仅可以用于删除,还可以用于为类型添加常量。 所以这是我正在尝试做的过度简化的版本:

int a[3] = { 1, 2, 3 };
const int b[3] = const_cast<const int[3]&>( a );

但是,编译器似乎无法解析此错误,例如

5:43: error: expected '>' before '&' token
5:43: error: expected '(' before '&' token
5:44: error: expected primary-expression before '>' token
5:50: error: expected ')' before ';' token

我也尝试过使用指针进行转换,但遇到了同样的错误。 此外,我不想切换到指针,因为它需要更新相当大的代码块。

这似乎是一项相对简单的任务,但我已经坚持了一段时间,甚至无法找到与此主题相关的任何有用信息。

更新:

感谢评论,我发现在我的案例中的根本原因与 const_cast 无关。 如果有人感兴趣,我试图用不同大小的静态数组列表初始化向量,这显然是不可能的。

但是,由于引用数组的不明显语法导致我提出问题,因此我将接受解释它的答案。

首先,您引用数组的语法是错误的。 正确的形式是const int (&)[3] 其次,一个数组不能从另一个数组初始化。 第三,通常没有必要将非常量转换为 const,因为这种转换是隐式的。

制作数组的 const 副本的最简单方法是使用数组的包装类。 标准库为这样的包装器提供了一个模板: std::array 例子:

std::array a { 1, 2, 3 };
const std::array b = a;

这不是引用数组的语法。 它会这样拼写:

int a[3] = {1, 2, 3};
const_cast<const int(&)[3]>(a);

但是您的数组无法复制。 您必须引用它或使用std::array

int a[3] = {1, 2, 3};
auto& b = const_cast<const int(&)[3]>(a);

// or use std::array

std::array a = {1, 2, 3};
auto const b = a;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM