2011-01-24 91 views
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; 
} 

任何機構請告訴我我是我得到我的價值爲0,我想要做的是我想輸入後打印「我」的值「if」條件&也在「其他」部分。需要幫助C++ boost ::可選

請做要緊,請參閱我的任何修改的 感謝 Arun.D

幫助是極大的讚賞..謝謝提前

+1

能否請你格式化你的源代碼,使其可讀? –

+1

@丹,已經這樣做了,只是等待某人批准編輯:) –

回答

3

您還沒有初始化i。這個程序的行爲是未定義的。明確地將其設置爲非零值。

4

int i尚未明確初始化。如果i == 0則返回nil(默認boost :: optional),當你打印時你會得到0.

2

在main()中你還沒有初始化i。而在test_func(),你永遠不會達到return (i);

+0

if(i) retun boost ::可選(1234);但爲什麼至少這沒有回報價值。我想要做的是我想模擬Boost :: Optional –

+0

的功能,如果(i) retun boost ::可選(1234);但爲什麼至少這沒有回報價值。我想要做的是我想模擬Boost的操作:: Optional pls help –

1

其他已經評論:你正在使用我沒有初始化,它是默認初始化爲0. 但也許你想知道爲什麼你看不到1234:這是因爲你丟棄返回值(硬編碼提升::可選(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瞭解更多信息

+0

std :: cout << test_func(1234)<< endl;現在這個打印只有1,你可以修改我上面的代碼片段..這將是很大的幫助,謝謝一噸。 –

+0

@阿倫達巴爾:現在應該更清楚了。 – Francesco

0

除了未初始化i並沒有達到return i;其他已經提到:

您打印boost::optionalbool conversion 。如果可選包含值,則打印1,如果可選不包含值,則打印0

我想你的意思是這樣的:

boost::optional<int> result(test_func(i)); 
if (result) 
{ 
    std::cout << *result; 
} 
else 
{ 
    std::cout << "*not set*"; 
} 

,而不是

std::cout << test_func(i);