我正在尝试使用 std::map 的 emplace 函数,但它似乎没有实现(但我读到它是在 4.8 中实现的)
以下代码:
std::map<std::string, double> maps;
maps.emplace("Test", 1.0);
造成:
class std::map<std::basic_string<char>, double>' has no member named 'emplace'
有人可以澄清 emplace 函数是在哪个 gcc 版本中实现的吗?
最佳答案
这是一些源代码:
#include <map>
#include <string>
int main()
{
std::map<std::string, double> maps;
maps.emplace("Test", 1.0);
}
让我们尝试编译它:
[9:34am][wlynch@apple /tmp] /opt/gcc/4.8.2/bin/g++ -std=c++98 foo.cc
foo.cc: In function ‘int main()’:
foo.cc:7:10: error: ‘class std::map<std::basic_string<char>, double>’ has no member named ‘emplace’
maps.emplace("Test", 1.0);
^
[9:34am][wlynch@apple /tmp] /opt/gcc/4.8.2/bin/g++ -std=c++11 foo.cc
[9:34am][wlynch@apple /tmp]
请注意,当我们使用
-std=c++11
时有用。这是因为 std::map::emplace()
是 2011 C++ 标准中添加的一项功能。此外,我可以验证:
std::map::emplace()
. std::map::emplace()
. 关于c++11 - std::map emplace gcc 4.8.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24389014/