为什么我的编译器(GCC)没有从char **隐式转换为const char **? 以下代码: #include iostreamvoid print(const char** thing) { std::cout thing[0] std::endl;}int main(int argc, char** argv) { print(argv);} 给出以下错误:
以下代码:
#include <iostream> void print(const char** thing) { std::cout << thing[0] << std::endl; } int main(int argc, char** argv) { print(argv); }
给出以下错误:
oi.cpp: In function ‘int main(int, char**)’: oi.cpp:8:12: error: invalid conversion from ‘char**’ to ‘const char**’ [-fpermissive] oi.cpp:3:6: error: initializing argument 1 of ‘void print(const char**)’ [-fpermissive]这样的转换将允许您将const char *放入char *数组中,这将是不安全的.在印刷中你可以这样做:
thing[0] = "abc";
现在argv [0]将指向一个无法修改的字符串文字,而main期望它是非const(char *).因此,对于类型安全,不允许进行此转换.