gpt4 book ai didi

c++ - 为什么我不能用 C++ 中的模板版本覆盖默认的复制构造函数和赋值运算符

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

我问了this question关于使用模板版本重载复制构造函数和赋值运算符并考虑围绕该问题涉及的混淆(因为它似乎是一个编译器错误),我想我会尝试仅使用模板复制构造函数和模板赋值运算符看看会发生什么。但是它们被编译器完全忽略了。

struct BaseClass
{
public:
BaseClass() {}

template<typename T>
BaseClass(const T& a_other)
{
int i = 0; // for break point which is not hit
}

template<typename T>
BaseClass& operator= (const T& a_other)
{
int i = 0; // for break point which is not hit
return *this;
}

};

struct MyClass : public BaseClass
{
};

int main()
{
MyClass i, j;
i = j;

return 0;
}

为什么我不能用模板版本覆盖默认值(我怀疑答案是默认值更匹配但我希望模板版本也作为默认值) ?我能做些什么来确保调用模板版本而不是默认版本吗?

最佳答案

template<typename T>
BaseClass(const T& a_other)

首先,这不是拷贝构造函数。它更像是一个模板化构造函数。

复制构造函数应该是这样的:

BaseClass(const BaseClass & a_other)

注意到区别了吗?

请注意,模板化 构造函数未定义复制构造函数。编译器会为您生成默认的复制构造函数,而不是实例化模板化构造函数。

复制赋值的相同参数。

关于c++ - 为什么我不能用 C++ 中的模板版本覆盖默认的复制构造函数和赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9487821/

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