当我将double **传递给期望const double **的函数时,我收到一条关于从gcc传递不兼容指针类型的消息。这让我感到困惑,因为const double **只会对传入的参数的使用施加更多约束。这与将double *传递给期望const double *的函数有什么不同?
稍后添加:将double **传递给期望const double * const *的函数同样有问题,任何想法可能会出错?
答案 0 :(得分:5)
如果您通过值传递指针const T
,则该函数无法编辑调用者的指针,也无法编辑T
,因此一切都是安全的。
如果您通过值传递指针指向const T
的指针,则该函数无法编辑T
,但可以编辑第二个指针。由于指针类型不同(const vs mutable),这可能会造成破坏。
static const double PI = 3.14;
void function(const double** p) {
*p = Π //point at the const double PI
}
int main() {
double* p;
function(&p); //pass pointer to pointer to double
*p = -1; //changing a static const global! That's bad!
}
Matt McNabb观察到,如果参数为const double*const*
,则C ++会允许它,C认为不是,可能是由于简单的疏忽。