0
#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”条件和“else”部分后打印“i”的值。

请做必要的事,请向我提交任何修改的感谢 Arun.D

非常感谢您的帮助..在此先感谢

4

5 回答 5

4

int i尚未明确初始化。如果i == 0然后返回 nil (默认 boost::optional),当你打印时你会得到 0。

于 2011-01-24T14:16:33.553 回答
3

你还没有初始化i。该程序的行为未定义。将其显式设置为非零值。

于 2011-01-24T14:16:07.827 回答
2

在 main() 你还没有初始化i. 而在test_func()你永远也达不到return (i);

于 2011-01-24T14:17:33.110 回答
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;

阅读文档并查看示例以获取更多信息

于 2011-01-24T14:46:05.283 回答
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);
于 2012-01-31T09:27:01.307 回答