优化C++程序

Optimization of C++ program

本文关键字:程序 C++ 优化      更新时间:2023-10-16

我有给定的程序?主函数的输出会因优化器而异吗?

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.    }

只要 (i) 遵循标准和 (ii) 在进行优化时没有副作用,优化器就可以做任何事情。

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

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

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