我有一个小问题来改变元组bool值。有谁知道bool值是如何变化的?函数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();
};
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;
}
}
}
主要()
keyManager kManager;
kManager.addProductKey(KEY_1);
kManager.setState(KEY_1, true);
auto t = kManager.getProductKey(0);
std::cout << std::get<bool>(t) << std::endl;
输出 0
程序执行没有错误,因此我假设我在某处发生了错误。
答案 0 :(得分:3)
在keyManager::setState
行
auto t = productKeys[x];
制作副本,使用
auto& t = productKeys[x];
代替获取对productKeys[x]
的引用。
答案 1 :(得分:1)
此行会复制您的double
tuple
切换到参考
auto t = productKeys[x];
答案 2 :(得分:0)
问题出在这一行:
auto t = productKeys[x];
t
被推断为类型为std::tuple<std::string, bool>
,而=
会触发元组的副本分配运算符,这实际上会使t
成为副本 productKeys[x]
。
您在t
上执行的所有操作仅影响t
。
您应该强制编译器推导出t
作为引用(类型为std::tuple<std::string, bool>&
),如下所示:
auto& t = productKeys[x];