2014-04-14 13 views
2

初始化一個未命名的C++參數有什麼意義?例如:初始化一個未命名的C++參數有什麼意義?

void foo(int = 0) {} 
+0

有沒有價值做這是一個愚蠢的賭注,否則它將會或不會編譯(假設大多數人會拒絕相信這樣的無用構造會編譯)。 – mah

+0

這裏真的沒有意義。你在哪裏看到它?如果編譯器不警告,我感到非常驚訝。 – lpapp

+0

我現在在函數參數中使用'std :: enable_if'時看到了一個很好的例子。從[這裏](http://en.cppreference.com/w/cpp/types/enable_if):'template T foo2(T t,typename std :: enable_if :: value> ::鍵入* = 0){return t; }' – user2023370

回答

1

我可以在回調的上下文中想象的結構可能是有用的:

#include <iostream> 

// Please assume the callback is an external library: 
typedef void (*callback_function)(int); 
callback_function callback; 

void foo(int = 0) { 
    std::cout << "Hello\n"; 
} 

int main() { 
    callback = foo; 
    callback(1); 
    foo(); 
} 
+0

謝謝。但爲什麼我沒有:'typedef void(* callback_function0)(); callback_function0 callback0; void foo0(){std :: cout <<「Hello \ n」; ''? – user2023370

+1

@ user2023370假設回調是外部庫 –

1

它將作爲默認參數值。它屬於函數聲明。

+0

如果代碼找不到值(因爲沒有名稱可以訪問它),那麼默認值就沒用了,不幸的是,在_does_ compile問題中的代碼行。 – mah

+3

@Tyler:從什麼時候禁用定義中的未命名參數?我經常使用它們來避免*未使用的變量* - 警告。 – Deduplicator

2

的聲明沒有必要參數的名字。但是,定義確實如此。另外,定義中不能重複默認參數。下面是工作的一個小程序(但我不知道你爲什麼會想要做這樣的事情,真是......):

#include <iostream> 

void foo(int = 5); 

int main() { 
    foo(); 
    foo(3); 

    return 0; 
} 

void foo(int i) { 
    std::cout << i << std::endl; 
} 

輸出是

5 
3 
相關問題