在visual studio中,您可以为各个cpp文件设置不同的编译器选项.例如:在"代码生成"下,我们可以在调试模式下启用基本运行时检查.或者我们可以改变浮点模型(精确/严格/快速).这些只是一些例子.有很多不同的旗帜.
只要定义相同,就可以在程序中多次定义内联函数.我们将此函数放入标题中并将其包含在多个翻译单元中.现在,如果不同的cpp文件中的不同编译器选项导致该函数的编译代码略有不同,会发生什么?然后他们确实不同,我们有不确定的行为?你可以使函数静态(或将它放入一个未命名的命名空间)但是更进一步,直接在类中定义的每个成员函数都是隐式内联的.这意味着如果这些cpp文件共享相同的编译器标志,我们可能只包含不同cpp文件中的类.我无法想象这是真的,因为这基本上是容易出错.
我们在未定义行为的土地上真的那么快吗?还是编译器会处理这种情况?
c++ one-definition-rule inline-functions language-lawyer translation-unit