将c从char**隐式转换为const char**,这种转换方式合理吗?
- 内容介绍
- 文章标签
- 相关推荐
本文共计401个文字,预计阅读时间需要2分钟。
为什么我的编译器(GCC)没有将char 转换为const char ?以下是一些可能的解释:
1. 编译器默认不进行隐式类型转换,以避免潜在的错误。
2.在某些情况下,编译器可能无法确定转换的正确性。
3.可能的代码示例:
c
char *ptr=Hello, World!;const char *const_ptr=ptr; // 正确,const_ptr是一个指向常量的指针char **ptr_ptr=&ptr; // 正确,ptr_ptr是一个指向指针的指针const char **const_ptr_ptr=&ptr; // 错误,const_ptr_ptr无法指向非常量指针4. 如果在代码中确实需要将char 转换为const char ,可以使用显式类型转换:
cconst char const_ptr_ptr=(const char )ptr_ptr;
请注意,在转换过程中,确保目标指针指向的数据是常量,否则可能会导致未定义行为。
为什么我的编译器(GCC)没有从char **隐式转换为const char **?以下代码:
#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 *).因此,对于类型安全,不允许进行此转换.
本文共计401个文字,预计阅读时间需要2分钟。
为什么我的编译器(GCC)没有将char 转换为const char ?以下是一些可能的解释:
1. 编译器默认不进行隐式类型转换,以避免潜在的错误。
2.在某些情况下,编译器可能无法确定转换的正确性。
3.可能的代码示例:
c
char *ptr=Hello, World!;const char *const_ptr=ptr; // 正确,const_ptr是一个指向常量的指针char **ptr_ptr=&ptr; // 正确,ptr_ptr是一个指向指针的指针const char **const_ptr_ptr=&ptr; // 错误,const_ptr_ptr无法指向非常量指针4. 如果在代码中确实需要将char 转换为const char ,可以使用显式类型转换:
cconst char const_ptr_ptr=(const char )ptr_ptr;
请注意,在转换过程中,确保目标指针指向的数据是常量,否则可能会导致未定义行为。
为什么我的编译器(GCC)没有从char **隐式转换为const char **?以下代码:
#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 *).因此,对于类型安全,不允许进行此转换.

