我在CCArmatureDataManager.cpp 253行查看此代码。 RelativeData是一个结构。在这里,将堆栈参数放入映射中。为什么,没问题??有人向我解释吗?谢谢!!!

struct RelativeData
{
    std::vector<std::string> plistFiles;
    std::vector<std::string> armatures;
    std::vector<std::string> animations;
    std::vector<std::string> textures;
};

void CCArmatureDataManager::addRelativeData(const std::string& configFilePath)
{
    if (_relativeDatas.find(configFilePath) == _relativeDatas.end())
    {
        _relativeDatas[configFilePath] = RelativeData();
    }
}

最佳答案

在表达中

_relativeDatas[configFilePath] = RelativeData()


RelativeData()部分创建一个临时的默认构造的对象。

_relativeDatas[configFilePath]部分调用std::map::operator[],该引用返回对对象的引用。

赋值从临时对象复制到[]运算符返回其引用的对象。换句话说,RelativeData copy assignment operator被调用(如果没有,编译器在大多数情况下会为您创建一个)。

如果没有键configFilePath的元素,则映射将默认构造一个,并返回对其的引用。

因此,您的代码要做的是创建两个RelativeData类型的默认构造的对象,并将内容从一个复制到另一个。用也许不是那么客气的话来说,它几乎是无用的。

关于c++ - 在 map 上放置堆栈参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34806607/

10-10 00:44