Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么可以';我有模板和默认参数吗?_C++_Templates_Default Parameters - Fatal编程技术网

C++ 为什么可以';我有模板和默认参数吗?

C++ 为什么可以';我有模板和默认参数吗?,c++,templates,default-parameters,C++,Templates,Default Parameters,我在函数中更改了参数表,以使用模板接受任何类型的对象,但我不能将其与其他默认参数结合使用,是否缺少某些内容 #include <string> #include <iostream> class MyClass { public: std::wstring msg = L"hey"; MyClass(){}; }; class MyClass2{ public: template<class T> MyClass2(

我在函数中更改了参数表,以使用模板接受任何类型的对象,但我不能将其与其他默认参数结合使用,是否缺少某些内容

#include <string>
#include <iostream>

class MyClass {
    public:
    std::wstring msg = L"hey";
    MyClass(){};
};

class MyClass2{
    public:
    template<class T> MyClass2(T* t, int i);
};
template<class T>
MyClass2::MyClass2(T* t,int i=0){ std::wcout << t->msg << std::endl; }

int main(int argc, char **argv)
{
    MyClass mc;
    MyClass2 mc2(&mc);
    return 0;
}
我认为在模板中不使用默认值是合理的,但其他参数是否有原因?

您当然可以;将默认参数放在声明上,而不是定义上。

将默认值放在定义的参数列表而不是声明的参数列表中是一个额外的选项,对于函数模板不可用:

[C++14:8.3.6/4]:
对于非模板函数,可以在同一范围内函数的后续声明中添加默认参数。[……]

我真的不知道为什么会有这样的限制

类似规则:

[C++14:8.3.6/6]:
除了类模板的成员函数外,出现在类定义之外的成员函数定义中的默认参数将添加到类定义[…]中的成员函数声明提供的默认参数集中

practice.cpp:16:32: error: redeclaration of 'MyClass2::MyClass2(T*, int)' may not have default arguments [-fpermissive]