C++ 元组布尔值不变

C++ 元组布尔值不变,c++,class,tuples,C++,Class,Tuples,我有一个小问题,改变元组布尔值。有人知道布尔值是如何保持不变的吗?函数setState()查找搜索的键!非常感谢你的帮助 keyManager.h class keyManager { private: std::vector<std::tuple<std::string, bool>> productKeys; public: void addProductKey(std::string key); std::tuple<std::str

我有一个小问题,改变元组布尔值。有人知道布尔值是如何保持不变的吗?函数
setState()
查找搜索的键!非常感谢你的帮助

keyManager.h

class keyManager
{
private:
    std::vector<std::tuple<std::string, bool>> productKeys;

public:
    void addProductKey(std::string key);
    std::tuple<std::string, bool> getProductKey(int index);
    void setState(std::string searchKey, bool state);


    keyManager();
    ~keyManager();
};
类密钥管理器
{
私人:
std::vector productkey;
公众:
void addProductKey(标准::字符串键);
std::元组getProductKey(int索引);
void setState(std::string searchKey,bool state);
keyManager();
~keyManager();
};
keyManager.cpp

void keyManager::addProductKey(std::string key)
{
    productKeys.emplace_back(key, false);
}

std::tuple<std::string, bool> keyManager::getProductKey(int index)
{
    return productKeys[index];
}

void keyManager::setState(std::string searchKey, bool state)
{
    for (int x = 0; x < productKeys.size(); x++)
    {
        auto t = productKeys[x];
        if (std::get<std::string>(t) == searchKey)
        {
            std::get<bool>(t) = state;
        }
    }
}
void keyManager::addProductKey(std::string key)
{
productKeys.emplace_back(key,false);
}
std::tuple keyManager::getProductKey(int索引)
{
返回productKeys[索引];
}
void keyManager::setState(std::string searchKey,bool状态)
{
对于(int x=0;x
main()

keyManager-kManager;
kManager.addProductKey(KEY_1);
kManager.setState(KEY_1,true);
auto t=kManager.getProductKey(0);

std::cout在
keyManager::setState
行中

auto t = productKeys[x];
复制、使用

auto& t = productKeys[x];
auto& t = productKeys[x];

而是在
keyManager::setState
行中获取对
productKeys[x]
的引用

auto t = productKeys[x];
复制、使用

auto& t = productKeys[x];
auto& t = productKeys[x];

相反,为了获取对
productKeys[x]

的引用,此行将复制您的
元组

auto t = productKeys[x];
切换到引用

auto& t = productKeys[x];

此行将复制您的
元组

auto t = productKeys[x];
切换到引用

auto& t = productKeys[x];

问题出在这一行:

auto t = productKeys[x];
t
被推断为
std::tuple
类型,
=
触发tuple的copy assignment操作符,该操作符实际使
t
a复制
productkey[x]

t
上执行的所有操作仅影响
t
。 您应该强制编译器推断
t
作为引用(使用类型
std::tuple&
),如下所示:


问题出在这一行:

auto t = productKeys[x];
t
被推断为
std::tuple
类型,
=
触发tuple的copy assignment操作符,该操作符实际使
t
a复制
productkey[x]

t
上执行的所有操作仅影响
t
。 您应该强制编译器推断
t
作为引用(使用类型
std::tuple&
),如下所示: