将c++;当标题中的17个内联变量不是';t参考 在C++前17,如果在执行之前达到in>代码>()/c>代码,我在编译单元中使用静态全局(.cpp文件),我从需要初始化的类中使用它,所以如果没有使用这些类,静态init将被链接器优化,因为它没有引用它们。 < C++ >现在,在C++ 17附带了内联变量之后,我可以将许多小的变量和全局变量移到头文件上,并且一切都很好,直到我用一个小的线程池来处理异步的IO操作,这些操作是从AsiNC IO函数< /P>引用的。

将c++;当标题中的17个内联变量不是';t参考 在C++前17,如果在执行之前达到in>代码>()/c>代码,我在编译单元中使用静态全局(.cpp文件),我从需要初始化的类中使用它,所以如果没有使用这些类,静态init将被链接器优化,因为它没有引用它们。 < C++ >现在,在C++ 17附带了内联变量之后,我可以将许多小的变量和全局变量移到头文件上,并且一切都很好,直到我用一个小的线程池来处理异步的IO操作,这些操作是从AsiNC IO函数< /P>引用的。,c++,optimization,c++17,inline,C++,Optimization,C++17,Inline,因此,如果库的用户不使用任何异步io,线程池是否会被优化,或者它仍然会运行并启动其线程?最好在一些编译器上尝试它……在尝试之前,最好先看看标准对此有何规定,因为如果它不能保证这方面的任何内容,那么它将是特定于编译器的甚至可以通过许多优化从一个版本更改为另一个版本,这可能是“好像”的规则适用。也就是说,如果编译器可以证明其效果无法在该程序中观察到,则可以自由进行优化(不包括查看反汇编或测量性能等内容)。使用vs 2017进行测试,它不会得到优化!我并没有证据,但若编译器能够进行优化,我会感到惊讶。

因此,如果库的用户不使用任何异步io,线程池是否会被优化,或者它仍然会运行并启动其线程?

最好在一些编译器上尝试它……在尝试之前,最好先看看标准对此有何规定,因为如果它不能保证这方面的任何内容,那么它将是特定于编译器的甚至可以通过许多优化从一个版本更改为另一个版本,这可能是“好像”的规则适用。也就是说,如果编译器可以证明其效果无法在该程序中观察到,则可以自由进行优化(不包括查看反汇编或测量性能等内容)。使用vs 2017进行测试,它不会得到优化!我并没有证据,但若编译器能够进行优化,我会感到惊讶。除非它看到了整个代码,否则只有链接器才能决定不使用它。