【发布时间】:2015-09-07 16:33:50
【问题描述】:
我很清楚const pointer to pointer problem,我以为我知道发生了什么,但我错了。我想实现这个:
int* var[4];
const int* const (&refArray)[4] = var; //compile error
是的,我想保留数组而不是转换为指针,是的,我实际上在我的代码中遇到了这个问题。所以我继续调查我能做什么和不能做什么,不久我意识到我不知道发生了什么:
int* var[4];
const int* const * ptr = var; //allowed
const int* const * (&refPtr_indirect) = ptr; //allowed
const int* const * (&refPtr) = var; //error
const int* const * const (&constRefPtr) = var; //allowed
int* const (&refArray)[4] = var; //allowed
const int* const (&refArray)[4] = var; //error
我可以理解前四个,但后两个对我来说完全没有意义。我确实看到第三个版本可能会起作用并且我可以删除reference,但我真的希望保留数组类型。
感谢您提供任何帮助,但希望它可以包括为什么规则是这样的原因。
【问题讨论】:
-
有什么理由不只使用
std::array或boost::array? -
在任何情况下,您都应该从指向数组的指针
&var进行初始化。这也行不通,但可能更容易找出原因。
标签: c++ arrays pointers reference constants