gpt4 book ai didi

c++ - 为什么内存函数的默认模板参数应该明确定义为非法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:36:54 27 4
gpt4 key购买 nike

N3126 (Warning: very large PDF) 14.1/9,有两个说法让我很困惑:

#1: “可以在模板声明中指定默认模板参数。”

#2: “不应在出现在成员类之外的类模板成员定义的模板参数列表中指定默认模板参数”

#1 表示下面的代码是合法的:

template <class T = int>
void f(T = T())
{}

int main()
{
int n = f(); // equivalent to f<int>() or f(0);
return 0;
}

#2 表示下面的代码是非法的:

template <class T>
struct X
{
template <class U = T>
void f(U a = U())
{}
};

int main()
{
X<int> x;
x.f(); // illegal, though I think it should be equivalent to x.f<int>() or x.f(0)
return 0;
}

我只是想知道为什么后者应该被标准明确定义为非法?

理由是什么?

最佳答案

我可能错了,但我对 #2 的理解是它使以下内容成为非法:

template<class T>
struct A
{
void foo();
};

template<class T = int>
void A<T>::foo() { /* ... */ }

关于c++ - 为什么内存函数的默认模板参数应该明确定义为非法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4366585/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com