gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 22:12:30 26 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 正确性规则,即使它不是立即显而易见的。

[de-facto standard] C++ FAQ 中的示例说明了这个问题

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

基本上,规则是:在某个间接级别添加 const 后,您必须将 const 添加到所有间接级别一直到右侧。例如 int ***** 不能隐式转换为 int **const ***,但可以隐式转换为 int **const *const *const *

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

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