// file1.cpp
struct Foo {
virtual void boo() final;
};
// file2.cpp
struct Foo {
virtual void boo();
};这是ODR还是其他违反语言规则的行为?
发布于 2018-05-19 01:59:08
是的,这违反了应用于Foo定义的ODR。
basic.def.odr第6段:
可以有多个类类型的定义.或经常在头文件中定义的其他实体..。在程序中,每个定义都出现在不同的翻译单元中,并提供满足以下要求的定义。如果在多个翻译单元中定义了这样一个名为
D的实体,那么
D的每个定义都由相同的令牌序列组成;因此,在预处理步骤之后,类类型定义之间的任何差异都会给程序带来未定义的行为,甚至更改未使用的函数参数的名称,将unsigned int更改为int unsigned,等等。
https://stackoverflow.com/questions/50421062
复制相似问题