为什么下面的 c++ 代码无法编译?
Why the following c++ code don't compile?
#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个出现,它就会编译。。
使其成为
const double ** t2 = new const double *;
问题是,通过以某种方式取消引用,您可能会使用双指针违反常量正确性。
这样的转换是不允许的,因为如果转换是可能的,您可以通过以下方式修改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]);
}
对于模拟结果,请查看IdeOne.com上的代码-您将获得SIGSEGV(const对象被放置在只读内存中,您正在尝试修改它(。使用不同的平台,对象可能会被静默地修改。
现在至少应该编译
int main(int argc, char*argv[])
{
double *t1 = new double;
const double ** t2 = new const double *;
test(t1, t2);
}
相关文章:
- 在Linux for Windows上编译C++代码时出错
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在程序中编写脚本来编写和编译代码
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- 在macos上编译代码的未解析符号
- 使用个人C++库编译代码时,与头文件一起使用时会中断
- 使用指针编译代码后,.cpp文件将变为随机字符
- VS Express 无法正确编译代码(?
- 如何在Ubuntu中使用Visual Studio代码编译C++代码
- 使用 Android NDK 使用 clang++ 编译C++代码时对"_Unwind_Resume"的未定义引用
- 无法使用两个包装不同下一层的ssl_stream编译代码
- 编译代码时"[Warning] extra tokens at end of"
- 无法编译代码,因为它已在 C++11 中弃用
- 如何在 Azure 应用服务中使用 cl.exe 编译 C++ 代码并生成可执行文件
- 如何调试编译 c++ 代码的 bazel?
- 为什么在使用转换构造函数编译代码时需要 const 复制构造函数?
- 编译 C++ 代码后尺寸较大
- 使用用 C++ 和 DDS 编写的 CMAKE 编译代码
- 编译代码时如何不制作二进制文件?
- 如何使用所有其他文件信息来编译代码,例如HAAR级联训练的权重的XML文件