如何在 C++ 中将常量映射指针初始化为空?

unw*_*guy 1 c++ pointers map

一个简单的问题,我只想将一个映射初始化为空,而不是一个 nullptr。

 const std::map<std::string, std::string>* emptyDictionary;
Run Code Online (Sandbox Code Playgroud)

我试过

const std::map<std::string, std::string>* emptyDictionary = {"", ""};
Run Code Online (Sandbox Code Playgroud)

但显然这是不对的。谢谢你们。

Ker*_* SB 5

你根本忘了制作任何地图——你只是制作了一个指针!您可以使指针指向动态分配的映射:

 const std::map<std::string, std::string>* emptyDictionary
     = new std::map<std::string, std::string>;
Run Code Online (Sandbox Code Playgroud)

这张地图将真正是空的。如果您添加 initializer {{"", ""}},您可能会这样做,那么您实际上没有空映射,而是具有一个将空字符串映射到空字符串的元素的映射。

请注意,您永远无法通过 const 指针修改您的地图,因此您为什么要这样做有点令人怀疑。

还要注意,肆意的动态分配通常是一种糟糕的编程风格。几乎肯定有更好的方法来做您需要做的任何事情,或者,根据您的评论,您只是严重误解了某些事情:获取指针的最佳方法是获取现有对象的地址

std::map<std::string, std::string> m;
foo(&m); // pass address of m as a pointer
Run Code Online (Sandbox Code Playgroud)