【发布时间】:2018-08-21 18:00:04
【问题描述】:
如何从函数返回二维常量值数组? 我需要返回这样的东西:
//I don't even know if this is the best way to do 2d arrays in c++.
const int matrix[4][2] = {
{10,11},
{12,13},
{14,15},
{16,17}
};
这是我尝试过的:
#include <iostream>
using namespace std;
int** createMatrix();
int main(){
int **m = createMatrix();
return 0;
}
const int** createMatrix(){
const int **matrix = new const int*[4];
matrix[0] = new const int[2] = {10,11};
matrix[1] = new const int[2] = {12,13};
matrix[2] = new const int[2] = {14,15};
matrix[3] = new const int[2] = {16,17};
return matrix;
}
我得到的输出:
main.cpp:在函数“const int** createMatrix()”中: main.cpp:12:13:错误:混淆了“const int** createMatrix()”的新声明 const int** createMatrix(){ ^~~~~~~~~~~~~~~
main.cpp:5:7: 注意:旧声明‘int** createMatrix()’ int** createMatrix(); ^~~~~~~~~~~~~~~
main.cpp:15:29:错误:“const int”的“new”中未初始化 const 矩阵[0] = 新常量 int[2] = {10,11}; ^
main.cpp:16:29:错误:“const int”的“new”中未初始化 const 矩阵[1] = 新常量 int[2] = {12,13}; ^
main.cpp:17:29:错误:“const int”的“new”中未初始化 const 矩阵[2] = 新常量 int[2] = {14,15}; ^
main.cpp:18:29: error: uninitialized const in ‘new’ of ‘const int’ 矩阵[3] = new const int[2] = {16,17};
【问题讨论】:
-
函数有两种不同的类型 iint** createMatrix();和 const int** createMatrix(){
-
一个常量值数组到底有什么意义呢?每次调用都会创建一个新的数组副本,所以谁在乎一个调用者是否更改了他的副本?这不会影响其他调用者。