对静态 const 成员的大小进行静态断言
Static assert on size of static const member
我正在尝试对静态常量 unordered_map 成员的大小进行静态断言。但是我收到一条错误消息,指出静态断言的非 const 条件。有人可以帮忙吗?
#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");
}
编辑:根据评论,我想澄清一下,以下代码工作正常(它使用数组而不是映射):
#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。当然,没有 class 分配内存(unordered_map
属于这种类型)可以声明它是构造函数 constexpr。
我正在尝试对静态常量 unordered_map 成员的大小进行静态断言。但是我收到一条错误消息,指出静态断言的非 const 条件。有人可以帮忙吗?
#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");
}
编辑:根据评论,我想澄清一下,以下代码工作正常(它使用数组而不是映射):
#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。当然,没有 class 分配内存(unordered_map
属于这种类型)可以声明它是构造函数 constexpr。