gpt4 book ai didi

C++ 引用混淆(以及一些复制构造函数)

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

所以我有一个关于通过引用传递的问题。我尝试通过引用将对象传递给成员函数,并让该成员函数使用我作为参数传递的引用调用另一个成员函数。但是,编译器说没有找到调用的成员函数。为什么会这样?下面的代码将以我无法表达的方式描述我的沮丧

    // CODE 1
class someClass {
int data;
public:
someClass(someClass&);
someClass someFunction(const someClass&)
};

someClass::someClass(someClass &obj) {
data = obj.data;
}


someClass someClass::someFunction(const someClass &obj) {
someClass demo(obj); // <- this doesn't work
someClass demo(&obj); // <- neither does this
someClass demo(*obj); // <- or this
someClass demo2(*this); // <- this works though
}

很难理解这一点,它可能看起来微不足道,但我非常感谢我可能得到的所有帮助。此外,xcode 中发生了一些神秘的事情,当我尝试以下(指 CODE 2)时,它起作用了。知道为什么吗?

    // CODE 2
class someClass {
int data;
public:
someClass(someClass&);
void setData(int x) { data = x; }
};

int main() {
someClass first;
setData(10);
someClass second;
second = first;
//Mysteriously, it worked without overloading the '=' operator. Why?
//Also, I mentioned XCode just in case someone might say it's compiler specific

return 0;
}

最佳答案

困难似乎如下:

someClass demo(obj); 

您正试图将常量引​​用传递给需要非常量引用的函数。典型的模式是让复制构造函数采用 const 引用参数,从而避免了这个问题。

someClass demo(&obj); 

在这种情况下,编译器正在寻找一个带有指向某个类的指针的构造函数,但找不到它。 &obj 返回指向 obj 的指针,而不是对 obj 的引用。

someClass demo(*obj); 

在这种情况下,您正试图取消引用 obj,就好像它是一个指针一样,但它是一个引用,而不是一个指针。

someClass demo2(*this); 

这是可行的,因为您正在取消引用 this 指针,它指向 someClass 的一个实例。

关于C++ 引用混淆(以及一些复制构造函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17357387/

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