#include </usr/include/boost/optional.hpp>
#include <iostream>
using namespace std;
boost::optional<int> test_func(int i)
{
if(i)
return boost::optional<int>(1234);
else
return boost::optional<int>();
return (i);
}
int main()
{
int i;
test_func(1234);
std::cout<< test_func(i) << endl;
return 0;
}
任何身体都可以告诉我,我将i的值变为0,我想要做的是我想在进入“if”条件&amp;之后打印“i”的值。也在“其他”部分。
请做必要的,请参考我的任何修改 谢谢 Arun.D
非常感谢帮助..提前感谢
答案 0 :(得分:4)
int i
尚未明确初始化。如果i == 0
然后返回nil(默认的boost :: optional),那么在打印时你会得到0。
答案 1 :(得分:3)
您尚未初始化i
。该程序的行为未定义。将其明确设置为非零值。
答案 2 :(得分:2)
在main()中,您尚未初始化i
。在test_func()
中,您永远不会到达return (i);
。
答案 3 :(得分:1)
其他已经评论过:您正在使用i而不进行初始化,默认情况下初始化为0。 但也许你想知道为什么你没有看到1234:这是因为你丢弃了返回值(硬编码为boost :: optional(1234))。 也许你打算写
std::cout << *test_func(1234) << endl; // by using operator* you are not discarding the return value any more
std::cout<< test_func(i) << endl;
阅读the documentation并查看examples了解详情
答案 4 :(得分:0)
除了已经提到的单一化i
并且未达到return i;
其他已提及的内容:
您正在打印boost::optional
1
。当可选项包含值时,它会打印0
,当可选项不包含值时,它会打印boost::optional<int> result(test_func(i));
if (result)
{
std::cout << *result;
}
else
{
std::cout << "*not set*";
}
。
我认为你的意思是:
std::cout << test_func(i);
而不是
{{1}}