这有点相关,但也有点不同:C++ "conversion loses qualifiers" compile error
在我的代码中,我遇到以下错误:
错误C2440:'初始化':无法从'const git_commit转换 * const *'到'const git_commit **'
据我所知,从T **到const T **的分配将允许违反const的规则,这里在我给出的例子中,即从const T * const *赋值给const T **获得常数,而不失去任何,所以在哪里/为什么这是一个问题?
答案 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*