1
的大小靜態斷言我試圖把一個靜態斷言靜態常量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
}
爲什麼可能的陣列,而不是地圖?據我所知,arrarys沒有構造函數,但我可以用一對<字符串,字符串>的陣列,並且它會工作過.. – SPMP
因爲既不陣列,也不對分配內存 - 所以它們的構造可以被宣佈'constexpr '。顯然,內置數組本身沒有構造函數 - 但它們仍然隱含地表現爲constexpr。 – SergeyA
@ user2308211你可以有constexpr陣列和雙,但他們不能包含'的std :: string'。所以一對的數組將不起作用。 –
interjay