简单的问题,我只是想将地图初始化为空,而不是nullptr。
const std::map<std::string, std::string>* emptyDictionary;
我试过
const std::map<std::string, std::string>* emptyDictionary = {"", ""};
但显然这不对。 谢谢你们。
答案 0 :(得分:4)
你忘了制作任何地图 - 你只是做了一个指针!您可以使指针指向动态分配的映射:
const std::map<std::string, std::string>* emptyDictionary
= new std::map<std::string, std::string>;
这张地图真的是空的。如果您添加初始化程序{{"", ""}}
(您可能会这样做),那么您实际上没有空映射,而是具有一个元素的映射,该元素将空字符串映射为空字符串。
请注意,你永远不能通过const指针修改你的地图,所以你想要这样做有点可疑。
另请注意,肆意动态分配通常是一种糟糕的编程风格。几乎可以肯定有更好的方法来做你需要做的事情,或者根据你的评论,你只是误解了一些东西:获得指针的最好方法是采用地址现有对象:
std::map<std::string, std::string> m;
foo(&m); // pass address of m as a pointer
答案 1 :(得分:2)
const std::map<std::string, std::string>* emptyDictionary
= new std::map<std::string, std::string>();
答案 2 :(得分:1)
map的默认(空)构造函数将创建一个空映射http://www.cplusplus.com/reference/stl/map/map/。 只需编写
,即可在堆栈上声明自动分配地图std::map<std::string, std::string> emptyDictionary();
使用addres-off运算符将其发送到您的函数
yourfunction(&emptyDictionary);
但是,如果字典会比创建它的实例更长,则需要动态分配它,以避免调用它的析构函数。
const std::map<std::string, std::string>* emptyDictionary = new std::map<std::string, std::string>();
然后在调用函数时不需要address-of运算符。
yourfunction(emptyDictionary);
但是,解除分配的责任将由您自己承担。当您不再需要该对象时,您需要使用delete语句删除该对象。
delete emptyDictionary;