我试图对 static const unordered_map 成员的大小进行静态断言。但我收到一条错误消息,指出静态断言的非常量条件。有人可以帮忙吗?
#include<unordered_map>
#include<string>
using namespace std;
class A{
public:
static const unordered_map<string,string> strMap;
};
const unordered_map<string,string> A::strMap ={{"key","value"}};
int main() {
static_assert(A::strMap.size() == 1, "sizes don't match");
}
编辑:根据评论,我想澄清一下,以下代码工作正常(它使用数组而不是 map ):
#include<unordered_map>
#include<string>
using namespace std;
class A{
public:
static const pair<string,string> strMap[];
};
const pair<string,string> A::strMap[] ={{"key","value"}};
int main() {
//static_assert(sizeof(A::strMap)/sizeof(A::strMap[0]) == 2, "sizes don't match"); Fails to compile
static_assert(sizeof(A::strMap)/sizeof(A::strMap[0]) == 1, "sizes don't match"); //Compiles fine
}
最佳答案
不能这样做。为此,您需要 constexpr std::unordered_map,但这是不可能的,因为它的构造函数不是 constexpr。当然,没有分配内存的类(unordered_map
就是这种类型)可以声明它的构造函数 constexpr。
关于c++11 - 对静态常量成员大小的静态断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33899984/