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 == 0nil (デフォルトの 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))。多分あなたは書くつもりだった

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 に答える