gpt4 book ai didi

c++ - 是否允许将空值插入 C++ std::map?

转载 作者:太空狗 更新时间:2023-10-29 23:45:55 26 4
gpt4 key购买 nike

我正在考虑棋盘设计,并想按照以下方式做一些事情:

typedef std::map <std::string, CheckerPiece> MapType;
MapType CheckerBoard;

CheckerBoard.insert({"a1", null});

这是允许的,还是有办法做类似的事情?这个想法是我想保持棋盘状态,同时将 CheckerPiece 对象从一个位置移动到另一个位置。

编辑:同样,是否可以执行以下操作:

CheckerBoard.insert({"a1", new CheckerPiece()});

最佳答案

您的 map 不包含 CheckerPiece 指针,因此您尝试做的事情甚至无法编译,除非您有一个隐式的 CheckerPrice 构造函数,它需要一个指针作为参数。这忽略了 nullC++ 中没有任何意义这一事实。假设您的意思是 NULLnullptr,您不能插入其中任何一个,也不能插入

的结果
new CheckerPiece()

进入你的 map ,期间。上面的表达式返回指向 CheckerPiece 的指针。

C++ 没有类型空值的概念(除非您专门设计一个)。一种解决方法是使用为您提供可选语义的包装器类型,即允许您检查是否已“设置”某些内容。一个例子是 boost::optional .

这是一个未经测试的例子:

#include <boost/optional.hpp>

boost::optional<CheckerPiece> piece;

if (piece) {
// piece is not set, we should never get here
}

piece.reset(CheckerPiece( constructor arguments...));

if (piece) {
// piece is set, use it!
piece.move();
}

关于c++ - 是否允许将空值插入 C++ std::map?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14988185/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com