0

我有一個默認參數的C++函數。 (A)用戶調用這個函數沒有爲這個參數提供一個值,因此默認值被賦值(B)用戶爲該參數提供了默認值。如何找出用戶是否爲默認參數指定了一個值?

我需要能夠區分這兩種情況。這樣做的最好方法是什麼?

+5

使用兩種不同的重載函數。 –

+1

這會解決什麼問題?你想要完全解決什麼問題? – Nelfeal

+0

默認值的正確選擇取決於上下文,如果用戶沒有指定值,我需要根據上下文明智地選擇默認值。但是,如果價值來自用戶,我打算使用它而不用擔心上下文。 – user2524261

回答

3

AFAIK,編譯器會在調用站點替換默認參數。沒有辦法將它與提供完全相同參數的用戶區分開來。

您可以使用兩種不同的函數來區分兩種情況:一種具有您想要指定默認參數的參數,另一種不具有參數。

-2
class A 
{ 
private: 
    const int _defaultValue = 0; 

public: 
    void function(int userValue = _defaultValue) 
    { 
     if (userValue != _defaultValue) 
     ....; 
     else 
     ....; 
.... 

相同的功能:

namespace { const int defaultValue = 0; } 
void function(int userValue = defaultValue); 
+3

如果用戶提供0作爲參數,他仍然無法區分默認或用戶提供的參數。 –

+0

好吧,在這種情況下只重載:'void function()'和'void function(int userValue);' – fgrdn

0

使用重載函數。

void do_great() 
{ 
    // default operation 
} 

void do_great(int value) 
{ 
    // non-default operation 
} 
相關問題