當指定一個模板類時,爲什麼要求<>
有一個很好的理由,該模板類具有所有模板參數的默認值?爲什麼在指定一個模板類時需要<>,該模板類具有所有模板參數的默認值?
例如
#include <iostream>
template<typename T = int>
class C {
public:
T obj = 0;
};
int main()
{
C c1; // Error on almost all compilers (see note below)
C<> c2;
std::cout << c1.obj << " " << c2.obj << std::endl;
return 0;
}
這方面的一個例子缺點是,如果你有這已經是在不同的地方使用了類,你以後重構它與它的模板參數默認參數類模板,那麼你就必須添加<>
在所有使用該類的地方。
注意:它看起來像GCC最新HEAD(7.0.1)accepts的語法沒有<>
。早期版本不會,任何版本的Clang都不會。這是最新的GCC HEAD中的錯誤嗎?或者,也許C++ 17的標準現在接受沒有<>
的語法,GCC就在這裏?
'C c1 {};'編譯最新的clang。 –
[This answer](http://stackoverflow.com/a/16015037/598696)解釋了爲什麼你需要'<>' - 簡而言之,它是爲了避免模板和類型之間的不確定性。 –
*「或者,也許C++ 17的標準現在接受沒有<>」*的語法,在C++ 17中有類模板扣除發生在這裏 –