#include <iostream>
int test( const double *t1,const double **t2 )
{
return 0;
}
int main(int argc, char*argv[])
{
double *t1 = new double;
const double ** t2 = new double *;
test(t1, t2);
}
错误是:
cannot convert double ** to const double **
如果我删除了const
的2次出现,它会编译。
答案 0 :(得分:3)
成功
const double ** t2 = new const double *;
答案 1 :(得分:2)
问题是通过以某种方式取消引用,你可以用双指针违反const正确性。
答案 2 :(得分:0)
它至少应该立即编译
int main(int argc, char*argv[])
{
double *t1 = new double;
const double ** t2 = new const double *;
test(t1, t2);
}
答案 3 :(得分:0)
不允许进行此类转换,因为如果转换是可行的,您可以通过以下方式修改const对象:
#include <stdio.h>
const double A0 = 0;
const double A1 = 1;
const double* A[2] = { &A0, &A1 };
double * B[2];
int main()
{
double** b = B;
const double ** a = b; // illegal
//const double ** a = (const double **)b; // you can simulate it would be legal
a[0] = A[0];
b[0][0] = 2; // modified A0
printf("%f",A[0][0]);
}
对于模拟结果,检查code at IdeOne.com - 您将获得SIGSEGV(const对象被放置在只读内存中,您正在尝试修改它)。使用不同的平台,可以静默修改对象。