const_cast静态数组以添加恒常性
const_cast on a static array to add constness
我遇到了将非常量静态数组传递给常量参数的需要。正如我所发现的,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]
.其次,一个数组不能从另一个数组初始化。第三,通常没有必要将 non-const 转换为 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;
相关文章:
- const_cast静态数组以添加恒常性
- 自动模板参数、数据成员和恒常性
- 有没有办法检测自身内部的类恒常性?
- 为什么const_cast删除指针的恒常性,而不删除指向常量的指针的恒常性?
- 对指针和恒常性兼容性的引用
- 自定义容器中的括号运算符中的恒常性
- C++ 重载分辨率和恒常性
- C++17类模板演绎常性
- C++ 函数匹配和恒常性
- 如何忽略函数模板中的恒常性?
- 常量自动和对象恒常性
- 比较运算符 == 中的共享指针恒常性
- 添加额外的恒常性会导致编译器错误
- 删除模板化函数中的恒常性
- 无法正确理解我的恒常性
- 模板转换运算符优先级和恒常性
- const_iterator和恒常性const_iterator::value_type
- 使用const_cast来添加恒常性 - 坏主意?
- C++ 逻辑恒常性和 const方法的按值返回
- 恒常性添加无效?错误:无法使用字符**初始化常量字符**