onunix 2024-04-29 08:01 采纳率: 77.8%
浏览 2

构造函数这样调用是什么语法


class MyClass {
public:
    MyClass(int value = 0) : value_(value) {}

    // 修改为返回值,而非引用
    MyClass operator+(const MyClass& other) const {
        // 考虑了自增,但实际逻辑未变,仅为示例
        return MyClass(value_ + other.value_);
    }

    // 为了打印或查看value_,可以添加一个简单的输出方法
    void printValue() const { std::cout << "Value: " << value_ << std::endl; }

private:
    int value_;
};

请问这句return MyClass(value_ + other.value_);是什么语法,构造函数这样调用是什么语法? 一般都是 new MyClass(5) 或者 MyClass a(5);这个和这2种 调用方法有联系吗?和后者类似吗?

  • 写回答

7条回答 默认 最新

  • 关注

    return MyClass(value_ + other.value_); 等价于:

    MyClass a(value_ + other.value_);  //先声明一个MyClass类的变量,跟你说的 MyClass a(5);是一样的。
    return a; //返回这个变量
    

    这种方法返回的是一个MyClass类型的变量。这种方法申请的变量内存位于栈区。

    而 new MyClass(5) 则是申请一块MyClass类大小的内存,并用5来初始化这个MyClass变量,并返回一个指向该MyClass变量的指针,这种方式申请的变量内存位于堆区。等价于:

    
    MyClass* p = new MyClass(5); //注意,这里p是一个指针
    return p; //这里如果返回p的话,返回的是一个MyClass指针
    
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月29日