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

标签 c++ reference constructor pass-by-reference

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

    // 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 中发生了一些神秘的事情,当我尝试以下操作(引用代码 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 引用传递给需要非 const 引用的函数。典型的模式是让复制构造函数采用 const 引用参数,这可以避免此问题。

someClass demo(&obj); 

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

someClass demo(*obj); 

在本例中,您尝试取消引用 obj,就好像它是一个指针一样,但它是一个引用,而不是一个指针。

someClass demo2(*this); 

这之所以有效,是因为您取消引用 this 指针,该指针指向 someClass 的实例。

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

相关文章:

c# - 在C#Windows应用程序中使用C++ DLL:获取错误 “Entry point not found”

c++ - 返回包含 std::map 的 std::unique_ptr

C++ 错误 : conflicting return type specified for. .. 模板化子类

c# - 基于常量的 Visual Studio 条件项目引用

c++ - 多个对象联网的问题

inheritance - 如何在 Qt Creator 中使用父类(super class)构造函数?

c++ - 如何通过cout将字符输出为整数?

java - 在 Java 中存储对单个 SecureRandom 的引用?

constructor - Dart Factory构造函数-与 “const”构造函数有何不同

javascript - 如何在自定义对象上指定 .constructor.name?