我有一個默認參數的C++函數。 (A)用戶調用這個函數沒有爲這個參數提供一個值,因此默認值被賦值(B)用戶爲該參數提供了默認值。如何找出用戶是否爲默認參數指定了一個值?
我需要能夠區分這兩種情況。這樣做的最好方法是什麼?
我有一個默認參數的C++函數。 (A)用戶調用這個函數沒有爲這個參數提供一個值,因此默認值被賦值(B)用戶爲該參數提供了默認值。如何找出用戶是否爲默認參數指定了一個值?
我需要能夠區分這兩種情況。這樣做的最好方法是什麼?
AFAIK,編譯器會在調用站點替換默認參數。沒有辦法將它與提供完全相同參數的用戶區分開來。
您可以使用兩種不同的函數來區分兩種情況:一種具有您想要指定默認參數的參數,另一種不具有參數。
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);
如果用戶提供0作爲參數,他仍然無法區分默認或用戶提供的參數。 –
好吧,在這種情況下只重載:'void function()'和'void function(int userValue);' – fgrdn
使用重載函數。
void do_great()
{
// default operation
}
void do_great(int value)
{
// non-default operation
}
使用兩種不同的重載函數。 –
這會解決什麼問題?你想要完全解決什麼問題? – Nelfeal
默認值的正確選擇取決於上下文,如果用戶沒有指定值,我需要根據上下文明智地選擇默認值。但是,如果價值來自用戶,我打算使用它而不用擔心上下文。 – user2524261