可能重複:
why isnt it legal to convert (pointer to pointer to non-const) to a (pointer to pointer to a const)爲什麼不能INT **轉換成const int的**在C++
您好我有下面的代碼,但不能換我周圍爲什麼這頭不起作用 - 我得到一個錯誤,說「不能從int **轉換爲const int **」。但是,如果我將printValues的第一個參數更改爲「const int * const * myArray」,則一切正常。我知道我可能不應該使用下面的那個,但我不明白它爲什麼不能編譯。你可以不用一個指向常量整數的指針而不用在main()中聲明它的常量嗎?
#include <iostream>
int printValues(const int ** myArray, const long nRows, const long nCols)
{
for (long iRow = 0; iRow < nRows; iRow++)
{
for (long iCol = 0; iCol < nCols; iCol++)
{
std::cout << myArray[iRow][iCol] << " ";
}
std::cout << "\n";
}
return 0;
}
int main()
{
const long nRows = 5;
const long nCols = 8;
int** myArray = new int* [nRows];
for (long iRow = 0; iRow < nRows; iRow++)
{
myArray[iRow] = new int [nCols];
}
for (long iRow = 0; iRow < nRows; iRow++)
{
for (long iCol = 0; iCol < nCols; iCol++)
{
myArray[iRow][iCol] = 1;
}
}
printValues(myArray, nRows, nCols);
return 0;
}
請參閱[「爲什麼我的轉換Foo **→Foo常量**」出錯?](http://www.parashift.com/c++-faq-lite/const-correctness.html#faq- 18.17) –
因爲它實際上允許你違反const正確性。我會盡力找到dup。 –
我從來沒有意識到這是一個很受歡迎的問題,在我看到的所有答案中,我感覺[標準之一](http://stackoverflow.com/a/29240053/1708801)是最好的。 –