gpt4 book ai didi

c - 为什么我不能在 C 中将 'char**' 转换为 'const char* const*'?

转载 作者:太空宇宙 更新时间:2023-11-04 04:24:18 24 4
gpt4 key购买 nike

以下代码片段(正确地)在 C 中给出警告,在 C++ 中给出错误(分别使用 gcc 和 g++,测试版本 3.4.5 和 4.2.1;MSVC 似乎并不关心):

char **a;
const char** b = a;

这个我可以理解也可以接受。
这个问题的 C++ 解决方案是将 b 更改为 const char * const *,它不允许重新分配指针并防止您绕过 const-correctness (C++ FAQ) .

char **a;
const char* const* b = a;

但是,在纯C中,更正后的版本(使用const char * const *)仍然给出警告,我不明白为什么。有没有办法在不使用强制转换的情况下解决这个问题?

澄清:

  1. 为什么这会在 C 语言中生成警告?它应该是完全常量安全的,并且 C++ 编译器似乎可以识别它。

  2. 在声明(并让编译器强制执行)我不会修改它指向的字符的同时,接受此 char** 作为参数的正确方法是什么?例如,如果我想写一个函数:

     void f(const char* const* in) {
    // Only reads the data from in, does not write to it
    }

我想在 char** 上调用它,参数的正确类型是什么?

最佳答案

几年前我也遇到过同样的问题,这让我苦恼不已。

C 中的规则陈述得更简单(即它们没有列出异常(exception)情况,例如将 char** 转换为 const char*const*)。结果,这是不允许的。在 C++ 标准中,它们包含了更多规则来允许此类情况。

归根结底,只是C标准的问题。我希望下一个标准(或技术报告)能够解决这个问题。

关于c - 为什么我不能在 C 中将 'char**' 转换为 'const char* const*'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43285759/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com