gpt4 book ai didi

c++ - 如何将 "pointer to pointer type"转换为常量?

转载 作者:太空狗 更新时间:2023-10-29 23:17:06 25 4
gpt4 key购买 nike

用下面的代码

void TestF(const double ** testv){;}
void callTest(){
double** test;
TestF(test);
}

我明白了:

'TestF' : cannot convert parameter 1 from 'double **' to 'const double **'

我不明白为什么。为什么 test 不能静默转换为 const double**?我为什么要明确地这样做?这个我知道

TestF(const_cast<const double**>(test)) 

使我的代码正确,但我觉得这应该是不必要的。

关于 const 是否有一些我遗漏的关键概念?

最佳答案

该语言允许从 double ** 隐式转换为 const double *const *,但不允许隐式转换为 const double **。您尝试的转换会隐含地违反 const 正确性规则,即使它不是很明显。

[事实上的标准] C++ 常见问题解答中的示例说明了这个问题

https://isocpp.org/wiki/faq/const-correctness#constptrptr-conversion

基本上,规则是:一旦在某个间接级别添加了 const,就必须将 const 添加到所有间接级别,一直到右边。比如int *****不能隐式转换为int **const ***,但是可以隐式转换为int **const *常量 *常量 *

关于c++ - 如何将 "pointer to pointer type"转换为常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20352328/

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