【发布时间】:2020-05-04 15:00:39
【问题描述】:
我需要将非常量静态数组传递给 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
我也尝试过使用指针进行转换,但遇到了同样的错误。此外,我不想切换到指针,因为它需要更新相当大的代码块。
这似乎是一项相对容易的任务,但我已经坚持了一段时间,甚至无法找到与该主题相关的任何有用信息。
更新:
感谢 cmets,我发现在我的案例中根本原因与 const_cast 无关。如果有人感兴趣,我试图用不同大小的静态数组列表初始化向量,这显然是不可能的。
但是,由于是引用数组的不明显语法导致我提出问题,因此我将接受解释它的答案。
【问题讨论】:
-
没有必要这样做。您可以将非
const参数直接传递给const参数。请显示minimal reproducible example,说明您尝试执行的操作以及遇到的错误。 -
我宁愿发布你想要传递的函数和参数,但它错过了常量。如果您不需要
cosnt_cast,我不会感到惊讶 -
目前特别不清楚您的意图是制作数组的
const副本,还是打算形成对原始数组的const引用。请通过提供最初失败的代码演示来澄清。 -
@walnut @foreknownas_463035818 你是对的。我试图准备初始问题的示例,但遇到了另一个与
const_cast无关的错误。您能否建议我是否应该更改此问题或为最初的问题创建另一个问题? -
@Dheinamar 如果错误与参数的
constness 有关,那么我认为添加到这个问题就可以了。如果不是,那么我建议打开一个新问题,因为更改问题的主题会使已经给出的答案无效。在任何一种情况下,请确保您发布完整的minimal reproducible example 及其生成的所有错误消息,以及您最初打算做什么的解释。也不要覆盖当前问题中的代码和错误消息,因为这也会使答案无效。
标签: c++ arrays casting reference constants