<分区>
当我将 double ** 传递给需要 const double ** 的函数时,我收到一条消息,提示我从 gcc 传递了一个不兼容的指针类型。这让我感到困惑,因为 const double ** 只是对传入参数的使用施加了更多限制。这与将 double * 传递给需要 const double * 的函数有何本质区别?
稍后添加:将 double ** 传递给需要 const double * const * 的函数同样有问题,知道这会出什么问题吗?
标签 c
<分区>
当我将 double ** 传递给需要 const double ** 的函数时,我收到一条消息,提示我从 gcc 传递了一个不兼容的指针类型。这让我感到困惑,因为 const double ** 只是对传入参数的使用施加了更多限制。这与将 double * 传递给需要 const double * 的函数有何本质区别?
稍后添加:将 double ** 传递给需要 const double * const * 的函数同样有问题,知道这会出什么问题吗?
最佳答案
如果您按值将指针传递给 const T
,则该函数无法编辑调用者的指针,也无法编辑 T
,因此一切都是安全的。
如果您按值传递指向 const T
的指针,该函数不能编辑 T
,但它可以 编辑第二个指针。由于指针对象类型不同(const vs mutable),这可能会造成严重破坏。
static const double PI = 3.14;
void function(const double** p) {
*p = &PI; //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 不允许,可能是由于简单的疏忽。
关于c - 为什么 double ** 类型的参数与 const double ** 类型的参数不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28286401/