在 c++ 中将对象分配给一个值时会发生啥 [关闭]

Posted

技术标签:

【中文标题】在 c++ 中将对象分配给一个值时会发生啥 [关闭]【英文标题】:What happens when an object is assigned to a value in c++ [closed]在 c++ 中将对象分配给一个值时会发生什么 [关闭] 【发布时间】:2018-02-13 13:56:14 【问题描述】:

检查以下代码:

#include<iostream>
using namespace std;

class example

    public:
    int number;

    example()
    
        cout<<"1";
        number = 1;
    

    example(int value)
    
        cout<<"2";
        number = value;
    

    int getNumber()
    
        cout<<"3";
        return number;
    
;

int main()

    example e;
    e = 10;
    cout<<e.getNumber();
    return 0;

以上代码的输出是什么。另外,我想知道当一个对象直接赋值给一个值时会发生什么。编译器将如何解释它?

【问题讨论】:

"上面代码的输出是什么" - 试过运行吗? 是的,输出是:12310 但我想知道遇到“e = 10”时会发生什么。 学习使用 C++ 不是通过请求 SO 辅导来完成的。 Pick a good book 并遵循。 e = 10; 导致调用example(int value) 隐式构造函数,构造example 的临时实例并使用编译器生成的赋值运算符将其分配给e。避免这种行为的一个好习惯是将默认和复制/移动之外的所有构造函数标记为explicit 使用调试器。 @艾伦理查兹 【参考方案1】:

首先你输入了

example e;

所以调用了第一个构造函数并打印了1

example()

    cout<<"1";
    number = 1;

输出:

1

然后你输入: e=10 等于 e = example(10); 所以另一个构造函数称为:

example(int value) /// beacause you used example(10)

    cout<<"2";
    number = value;

所以你的输出是:

12

number2 终于进去了:

cout<<e.getNumber();


3 is couted but in the other hand value is `10`    

因为number = value 你的number10 所以最后你的输出是:

12310

感谢@StoryTeller 编辑解释

【讨论】:

以上是关于在 c++ 中将对象分配给一个值时会发生啥 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

打开/关闭手柄时会发生啥?

当我们在 JavaScript 中将原语视为对象时会发生啥?

关闭 C++ 控制台应用程序时会发生啥

分配生成器功能时会发生啥? [关闭]

c++ 当在一个线程中写入并在第二个线程中读取同一个对象时会发生啥? (它安全吗?)[重复]

在硬件级别的“for循环”中会发生啥?内存是自动分配的吗? (C++)[关闭]