如何从方法返回静态 const int std::array?
Posted
技术标签:
【中文标题】如何从方法返回静态 const int std::array?【英文标题】:How to return a static const int std::array from a method? 【发布时间】:2018-03-19 19:50:17 【问题描述】:我试图从一个函数返回一个常量 int std::array,但我遇到了错误,我不知道如何修复它们。
这些来自refmatrix
的值永远不应更改。这就是我使用常量 int 的原因。
reference.h
#include <array>
#include <iostream>
using namespace std;
class Reference
public:
static const size_t NCOLS = 3;
static const size_t NBITS = 4;
static const size_t NROWS = 4;
private:
static array<array<array<const int, NBITS>, NCOLS>, NROWS> refmatrix;
public:
Reference();
~Reference();
array<const int, NBITS> smaller(int *arry);
;
reference.cpp
#include "reference.h"
array<array<array<const int, Reference::NBITS>, Reference::NCOLS>, Reference::NROWS> Reference::refmatrix = 0, 1, 2, 6, 6, 4, 1, 7, 6, 7, 8, 3,
7, 0, 5, 2, 1, 6, 9, 3, 1, 4, 8, 0,
9, 3, 4, 6, 0, 7, 2, 8, 5, 3, 9, 4,
8, 9, 1, 4, 7, 2, 6, 0, 4, 0, 3, 7;
Reference::Reference()
Reference::~Reference()
array<const int, Reference::NBITS> Reference::smaller(int *arry)
int j;
for(int i=0; i < NROWS; i++)
for(j=0; j < NCOLS; j++)
if(refmatrix[i][0][j] != arry[j])
j = (NCOLS + 1);
if(j == NCOLS)
return refmatrix[i][1];
main.cpp
#include "reference.h"
int main()
Reference r;
int arr[3] = 0, 1, 2;
array<const int, Reference::NBITS> resp;
resp = r.smaller( arr );
// After get these values I will write it in a file.
return 0;
main.cpp:在函数“int main()”中:
main.cpp:6:37:错误:使用已删除的函数“std::array【问题讨论】:
阅读错误消息并查看它指向的代码。问题与返回数组无关。 您不能稍后将const int
分配给std::array
元素,就像您不能将const int i; i = 123;
一样
如果我将 main.cpp 更改为 array该错误与返回std::array
无关。这与分配给const
有关。
您需要通过调用初始化resp
,而不是默认初始化然后分配。
int main()
Reference r;
int arr[3] = 0, 1, 2;
array<const int, Reference::NBITS> resp = r.smaller( arr );
// After get these values I will write it in a file.
return 0;
See it live
【讨论】:
以上是关于如何从方法返回静态 const int std::array?的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有编译器警告的情况下返回对空字符串的 const 引用?
返回 const std::string& 的方法应该返回 const std::string_view 吗?