优化C ++程序

时间:2014-11-26 21:14:08

标签: c++ optimization compiler-optimization

我有给定的程序?主函数的输出可以根据优化器而变化吗?

1)优化器可以在第19行

之后调用'a'的析构函数

2)在第17行,任何优化器都可以优化此行,因为它没有在main中的任何地方引用?或者它是否依赖于类中的静态变量?

3)关于第17行,是否有可能优化器初始化数组对象并直接销毁它们,因为没有使用'b'?

 1.    class Test 
 2.    {
 3.        public:
 4.        static int n;
 5.        Test()
 6.        {
 7.            n++;
 8.        }
 9.        ~Test()
10.        {
11.            n--;
12.        }
13.    } 
14.    int main()
15.    { 
16.        Test a;
17.        Test b[5];                             
18.        Test *c = new Test;
19.        std::cout << a.n << std::endl;         
20.        delete c;
21.        std::cout << Test::n << std::endl;
22.        return 0;
23.    }

1 个答案:

答案 0 :(得分:4)

只要符合(i)遵循标准并且(ii)进行优化没有副作用,优化者就可以做任何事情。

由于析构函数有副作用(n的递减),因此必须在正确的位置调用它。特别是a必须在删除c后销毁。

请注意,在生产中,您希望对n使用 atomic 类型:您目前的代码不是线程安全的。

另请注意,您main的声明不正确。您必须使用int main()或带有命令行参数的版本。从技术上讲,程序的行为是未定义