C++
这些模板函数都没有
template<typename T> void foo(T par = nullptr) {return;} //#1
template<typename T> void foo(T par = std::nullptr_t(nullptr)) {return;} //#2
template<typename T> void foo(T par = int(0)) {return;} //#3
允许任何具有以下零参数调用的编译:
foo();
foo
尽管使用任何值调用都有效(例如foo(2)
)。
nullptr
有一个特定的类型,即std::nullptr_t
,所以我认为默认参数在#1 中不需要额外的类型限定。默认参数的类型在#2 和#3 中明确提供,所以我认为那里没有任何类型歧义。
这里有什么问题?是否有适当的方法来使用模板函数执行默认参数?