gpt4 book ai didi

C++ 模板 : Byval/Reference interfering with eachother

转载 作者:太空宇宙 更新时间:2023-11-04 16:31:43 25 4
gpt4 key购买 nike

这是我的问题的简化版本。我有一个属性类。它有像 has_initalized 这样的数据,我在这个例子中删除了这些数据。

当我调用一个使用 T 的函数时,它很好。但是 T& 不是,所以我决定编写它的 T& 版本。但这会导致所有使用纯 T 的函数都出现编译错误。为什么 T& 会干扰它?对于这个例子,我如何在不改变 main() 的情况下让两个函数(Q 和 W)工作?

template <class T>
class Property {
T v;
Property(Property&p) { }
public:
Property() {}
T operator=(T src) { v = src; return v; }
operator T() const { return v; }
operator T&() const{ return v; }
T operator->() { return v; }
};

class A{};

void Q(A s){}
void W(A& s){}

int main(){
Property<A> a;
Q(a);
W(a);
}

最佳答案

C++ 的重载规则中没有任何内容允许编译器在调用 Q 时在 operatorT()operatorT&() 之间进行选择。因此删除

operator T() const { return v; }

也将消除歧义。但是你会遇到问题,因为在 const 函数中返回对成员的非 const 引用是不可能的。

关于C++ 模板 : Byval/Reference interfering with eachother,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6159955/

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