Dan*_*han 1 c++ c++17 stdany stdoptional
出于调试目的,我正在编写一个函数,该函数迭代任何类型的可选变量向量以检查哪些变量已初始化,但对has_value()所有变量的检查都返回了true,尽管尚未为其中某些变量分配任何值。
我很感激任何帮助指出我的误解,因为我是 C++ 新手。代码如下。请注意,当注释行被取消注释时,if 语句会发现该变量没有值。
#include <iostream>
#include <optional>
#include <any>
bool SimpleCheck(std::vector<std::optional<std::any>> toCheck)
{
bool res = false;
for (int i = 0; i < toCheck.size(); ++i)
{
// toCheck[i] = std::nullopt;
if (!toCheck[i].has_value())
{
std::cout << "item at index " << i << " had no value\n";
res = true;
}
}
return res;
}
int main()
{
std::optional<int> i = 5;
std::optional<std::string> str;
std::optional<double> doub = std::nullopt;
bool check = SimpleCheck({i, str, doub});
std::cout << check << "\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的预期输出是:
Run Code Online (Sandbox Code Playgroud)item at index 1 had no value item at index 2 had no value 1
实际输出是:
Run Code Online (Sandbox Code Playgroud)0
如果注释行未被注释,则输出为:
Run Code Online (Sandbox Code Playgroud)item at index 0 had no value item at index 1 had no value item at index 2 had no value 1
和
std::optional<double> doub = std::nullopt;
std::optional<std::any> a = doub; // it is not a copy constructor
Run Code Online (Sandbox Code Playgroud)
a不是空的,但它any是空的std::optional。