C++ C++;-在模板中定义复制构造函数
我是模板编码的初学者,在模板中定义构造函数时遇到困难,我只是在寻找关于这个问题的答案,但找不到相关的问题 基本上,类/structC++ C++;-在模板中定义复制构造函数,c++,templates,C++,Templates,我是模板编码的初学者,在模板中定义构造函数时遇到困难,我只是在寻找关于这个问题的答案,但找不到相关的问题 基本上,类/structxpair类似于pair,它有first和second template <typename First, typename Second> struct xpair { First first{}; Second second{}; xpair(){} xpair (const First& first, const S
xpair
类似于pair
,它有first
和second
template <typename First, typename Second>
struct xpair {
First first{};
Second second{};
xpair(){}
xpair (const First& first, const Second& second):
first(first), second(second) {}
xpair& operator() (const First& first_, const Second& second_) {
return new xpair (first_, second_);
}
xpair& operator= (const xpair& that) {
return new xpair (that.first, that.second);
}
};
到
返回新对(const_cast(that.first)、const_cast(that.second));
但它不起作用。哪里出了问题?放下
新的。这不是Java
<> > C++ > <代码> < < /> >是动态分配(对指针进行评估)的关键字,而不是使用。
在返回对局部变量的引用时,还必须重新考虑引用返回语义。这是一个悬而未决的参考
事实上,你的语义学在我看来很奇怪。例如,为什么operator=
不实际修改分配给的对象?您应该从将该
分配给*此
的成员,然后返回对*此
的引用(或者至少返回无效
)
我不知道你的操作符()
应该做什么-那应该是一个构造函数吗?嗯,不,你已经有一个了…:(
我强烈建议大家看看一些操作符重载的例子,以便更好地了解C++的结构和约束,以及我们的习惯用法和首选语义。删除新的
。这不是Java
<> > C++ > <代码> < < /> >是动态分配(对指针进行评估)的关键字,而不是使用。
在返回对局部变量的引用时,您还必须重新考虑引用返回语义。这会导致引用悬空
事实上,你的语义在我看来很奇怪。例如,为什么操作符=
实际上没有修改分配给它的对象?你应该从将该分配给*此的成员,然后返回对*此的引用(或者至少返回无效)
我不知道你的操作符()
应该做什么-那应该是一个构造函数吗?嗯,不,你已经有一个了…:(
我强烈建议看一些操作符重载的例子,以便更好地了解C++的结构和约束,以及我们的习惯用法和首选语义
xpair<string, string> a, b;
a = b;
non-const lvalue reference to type
'xpair<std::__1::basic_string<char>, std::__1::basic_string<char> >'
cannot bind to a temporary of type 'xpair<std::__1::basic_string<char>,
std::__1::basic_string<char> > *'
return new xpair (that.first, that.second);
return new pair (const_cast<First&>(that.first), const_cast<First&>(that.second));