根据一个定义规则(ODR),我不能有一个功能
void function()
{
}
Run Code Online (Sandbox Code Playgroud)
在一个可执行文件中定义了多个 - 链接器将对象.但是,内联函数会忽略ODR:
inline void function()
{
}
Run Code Online (Sandbox Code Playgroud)
可以在头文件中定义#included到多个.cpp文件中,因此当结果.obj文件链接在一起时,链接器会看到该函数的几个实例并故意忽略它.它假设它是完全相同的函数,只使用其中一个实例.由于程序行为得以保留,没有人关心.
但是如果由于任何原因,包括使用预处理器,那些实例碰巧有不同的实现,链接器将再次选择其中一个函数,开发人员甚至不知道哪个被选中,直到他彻底测试他的程序.
当链接器选择其中一个函数并且碰巧有不同的实现分类后,后一种情况如何?这是未定义的行为还是其他任何情况?