[英]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.