当我编译这样的东西
double da[ 3 ] = { 2., 3., 4. };
double (* pda)[ 3 ] = &da;
double const (* cpda)[ 3 ] = pda; // gcc: warning; MSVC: ok
Run Code Online (Sandbox Code Playgroud)
gcc警告我
warning: initialization from incompatible pointer type [enabled by default]
Run Code Online (Sandbox Code Playgroud)
问题:这项任务有什么问题?是的,从技术上讲,这些是不同的类型,但我没有看到任何危险,double const (*)[ 3 ]看起来比我更安全double (*)[ 3 ].
我做了一些测试,结果让我更加困惑:
1)MSVC非常满意double const (* cpda)[ 3 ] = pda;分配,没有错误,没有警告.
2)gcc和MSVC都很满意
double d = 1.;
double * pd = &d;
double const * cpd = pd; …Run Code Online (Sandbox Code Playgroud)