需要帮助C ++ boost :: optional

时间:2011-01-24 14:07:59

标签: c++ boost boost-optional

#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

非常感谢帮助..提前感谢

5 个答案:

答案 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}}