转换失去了限定符,但实际上并没有

时间:2016-08-28 11:02:50

标签: c++ const

这有点相关,但也有点不同:C++ "conversion loses qualifiers" compile error

在我的代码中,我遇到以下错误:

  

错误C2440:'初始化':无法从'const git_commit转换   * const *'到'const git_commit **'

据我所知,从T **到const T **的分配将允许违反const的规则,这里在我给出的例子中,即从const T * const *赋值给const T **获得常数,而不失去任何,所以在哪里/为什么这是一个问题?

2 个答案:

答案 0 :(得分:1)

const git_commit * const *

指向常量git_commits

的常量指针数组的指针
const git_commit * *

指向常量git_commits

的可变指针数组的指针

将const数组赋给可变数组会丢失const。

答案 1 :(得分:-1)

int const x = 7;
std::cout << x << '\n'; // compiler can optimize to 7
int const* const px = &x;
std::cout << *px << '\n'; // compiler can optimize to 7

int const*const* ppx = &px;
std::cout << **ppx << '\n'; // compiler can optimize to 7

int const** ppx_cheat = ppx; // illegal, but presume we are allowed to do it
int const y = 1;
int const* py = &y;
*ppx_cheat = py;
std::cout << **ppx << '\n'; // compiler can optimize to 7, *but is wrong*