繁体   English   中英

C++ 是否优化了对象创建?

[英]C++ Is Object creation optimized out?

如果我有一个包含两个构造函数的类:

class Test {

    public:

        Test(int x) {
            _num = x;
        }

        Test() {
            _num = 0;
        }

    private:

        int _num;
};

我想根据这样的条件创建一个堆栈对象:

    Test test;
    if (someCondition() == 23) {
        test = Test(42);
    }

在这种情况下,我是否会产生两次创建 Test 对象并调用两个构造函数的开销? 或者这会在总体上得到优化吗? 这被认为是好的做法吗?

编译器资源管理器中的玩具示例通过内联进行了大量优化,没有留下明显的构造函数调用。 所以我不是很清楚。

编写代码来表达意图。

您不想两次调用构造函数。 不要两次调用构造函数:

Test test = (someCondition() == 23) ? Test() : Test(42);

编译器可以优化您的代码以仅构造一个Test吗?

是的。 编译器优化必须遵循所谓的“as-if rule” 简而言之:在您的代码中创建两个、一个、一个或一个或 100 个实例都没有明显的效果。 编译器可以注意到这一点并生成一个没有创建实例的程序。

编译器会优化您的代码以仅构造一个Test吗?

除非您尝试(或者您是编译器编写者并且您的大脑能够完成编译器的工作……然后您无需尝试就可以知道),否则您无法分辨。 这就是为什么编写代码来表达意图很重要。 你写的代码不是给CPU的指令,而是让编译器生成给CPU的指令的指令。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM