我知道这是一种不好的形式,并且应该在声明中指定默认值,但是如果您愿意的话,请纵容我一下……为什么会编译?究竟发生了什么?
#include <iostream>
using namespace std;
class test
{
public:
test(int n);
};
test::test(int n = 666)
{
cout << n;
}
int main()
{
test t;
cin.sync();
cin.ignore();
return 0;
}
Output: 666
.. 模板如何影响同一段代码?
template <class T>
class test
{
public:
test(int n);
};
template <class T>
test<T>::test(int n = 666)
{
cout << n;
}
int main()
{
test<int> t;
cin.sync();
cin.ignore();
return 0;
}
Error:没有合适的默认构造函数可用
感谢您的时间!
看起来C++规范专门允许第一种情况而不允许第二种情况!
引用 C++ 规范 (§8.3.6/4):
对于非模板函数,可以在同一范围内的函数的后续声明中添加默认参数。
所以看起来对于非模板函数,您确实可以稍后引入默认参数。但不知道为什么这不适用于模板!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)