为什么GCC抱怨从`void **'转换为`const void **?

时间:2015-04-14 00:06:34

标签: c gcc implicit-conversion gcc-warning

我只是想知道为什么我会收到此代码的警告:

void example(const int** x) {
    // whatever
}

int main() {
    int** x;
    example(x);
    return 0;
}

GCC的输出:

$ gcc example.cpp
example.cpp: In function ‘int main()’:
example.cpp:9:14: error: invalid conversion from ‘int**’ to ‘const int**’ [-fpermissive]
     example(x);
              ^
example.cpp:1:6: note: initializing argument 1 of ‘void example(const int**)’
 void example(const int** x)
      ^

int**转换为const int**有什么问题?这不应该永远安全吗?

另外,为什么上面的代码不好,但这段代码没问题?

void example(const int* x) {
    // whatever
}

int main() {
    int* x;
    example(x);
    return 0;
}

我的原始代码使用struct mytype**并且有相同的警告,所以我认为类型是什么并不重要。这是一个读C类型错误的案例吗?

0 个答案:

没有答案