c++ - 静态数组上的 const_cast 以添加 constness
问题描述
我面临需要将非常量静态数组传递给 const 参数。正如我发现的那样, const_cast 不仅可以用于删除,还可以用于为类型添加 constness。所以这是我正在尝试做的过度简化的版本:
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,因为这种转换是隐式的。
制作数组的 const 副本的最简单方法是使用数组的包装类。标准库为此类包装器提供了一个模板:std::array
. 例子:
std::array a { 1, 2, 3 };
const std::array b = a;
推荐阅读
- python - 同一对象的不同内存地址
- javascript - 在 GoJS 中如何获取添加到图表中的节点的键?
- hadoop - 访问 Hadoop 作业历史服务器/jobhistory 页面时出错
- python - Flask - 使用列表设置 cookie
- html - 悬停时隐藏带有动画的嵌套div
- java - 如何用选定的颜色填充网格上的选定单元格?
- php - Laravel 中的上下文绑定
- amazon-cloudfront - AWS CloudFront 表示公钥无效/超出限制
- firebase - Firebase“session_start”事件在应用程序处于前台后超过 10 秒被触发
- python - Flask - 未找到请求的 url