C++ 使用std::experimental::optional给出编译错误
我是第一次使用可选功能,如果知道这段代码有什么问题,我希望从存储在C++ 使用std::experimental::optional给出编译错误,c++,c++11,boost-optional,C++,C++11,Boost Optional,我是第一次使用可选功能,如果知道这段代码有什么问题,我希望从存储在retCode #include <iostream> #include <experimental/optional> std::experimental::optional<std::tuple<uint16_t, uint32_t, uint32_t>> addEntity(); std::experimental::optional<std::tuple<u
retCode
#include <iostream>
#include <experimental/optional>
std::experimental::optional<std::tuple<uint16_t, uint32_t, uint32_t>> addEntity();
std::experimental::optional<std::tuple<uint16_t, uint32_t, uint32_t>> addEntity() {
uint32_t ipR = 1111;
uint32_t ipU = 2222;
uint16_t entityId = 0;
return std::make_tuple(entityId, ipR, ipU);
}
int main()
{
auto retCode = addEntity();
std::cout<<std::get<0>(retCode)<<std::endl;
return 0;
}
#包括
#包括
std::实验::可选加法();
std::实验::可选加法(){
uint32_t ipR=1111;
uint32_t ipU=2222;
uint16_t entityId=0;
返回std::make_tuple(entityId、ipR、ipU);
}
int main()
{
自动重新编码=加法();
std::cout没有从可选
到T
的隐式转换,您需要提取值
int main()
{
auto retCode = addEntity();
std::cout<<std::get<0>(retCode.value())<<std::endl; // can throw std::bad_optional_access
return 0;
}
intmain()
{
自动重新编码=加法();
std::cout#include
缺失,如果您可以使用C++17,您将直接使用std::optional
。看起来std::tuple
的析构函数只能从C++17中进行很小的销毁,您使用的是哪个GCC版本?它必须支持C++17的std::tuple
。您是否设置了编译器标志-std=C++17
?@BJovkestd::tuple
是C++11源代码:是的,因为可选的不是一个tuple。但您可以通过value()
从中获取一个tuple。
int main()
{
auto retCode = addEntity();
std::cout<<std::get<0>(retCode.value())<<std::endl; // can throw std::bad_optional_access
return 0;
}