【发布时间】:2020-04-21 15:14:32
【问题描述】:
我有一个属于该类的大小变量。我想将它用作 std::array 的大小,但我无法做到这一点。我发现了一些提到 constexpr 的文章,但到目前为止没有任何用处。你能帮帮我吗?
#include<array>
#include<iostream>
class MyClass{
private:
int size; //variable I need to copy the content and make it constant.
void calculateSize(int x){
size = 2 * x;
}
public:
MyClass(){}
void createArray(int val){
calculateSize(val);
std::cout << "the size is: " << size << std::endl;
std::array<int, size> myArray; // error
}
};
int main(){
MyClass c;
c.createArray(5);
return 0;
}
错误:
main.cpp:在成员函数‘void MyClass::createArray(int)’中: main.cpp:20:19:错误:在常量表达式中使用“this” std::array myArray;
【问题讨论】:
-
这就是
std::vector的用途。你为什么不为此使用std::vector? -
std::vector 是个好主意,但我也想使用其他容器。在这种情况下,我在声明之前已经提前知道了容器的大小。
-
至于错误,即使你没有在任何地方显式使用
this,它在访问成员变量时也被隐式使用:array< int, this->size > -
有许多不同的容器可用是有原因的。它们的存在不仅仅是为了使用不同的名称。它们中的每一个都有其最适合的特定优势和情况,而在其他情况下则不是最佳的。在这种情况下,
std::array不是合适的选择或选择,但std::vector是。这就是它的用途。