我正在阅读Meyers编写的"Effective C++",并且遇到了"翻译单元"一词.
有人可以给我一个解释:
1)究竟是什么
2)在使用C++编程时,我应该何时考虑使用它
3)如果它只与C++有关,或者它可以与其他编程语言一起使用
我可能已经在不知道术语的情况下使用它了....
我很清楚类和结构之间的区别,但是我很难权威地说这是否定义得很好:
// declare foo (struct)
struct foo;
// define foo (class)
class foo {
};
// instance of foo, claiming to be a struct again! Well defined?
struct foo bar;
// mixing class and struct like this upsets at least one compiler (names are mangled differently)
const foo& test() {
return bar;
}
int main() {
test();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果这是未定义的行为,有人可以指向权威(即ISO的章节和经文)参考的方向吗?
处理这个问题的编译器(Carbide 2.7)相对较旧,我尝试过的所有其他编译器对此都非常满意,但显然没有任何证据.
我的直觉是这应该是未定义的行为,但我找不到任何证实这一点,我很惊讶没有GCC版本或Comeau这么多警告它.
我想获得GCC产生的警告时,发现已被宣布与这两个名字是VisualStudio的生产class和struct.(警告4099)这通常来自前向声明,例如:
struct Base;
...
class Base { ... };
Run Code Online (Sandbox Code Playgroud)
VS在这种情况下实际上无法链接,因此我已将警告提升为错误.由于这个项目是跨平台的,我想在使用GCC编译时也发现这个问题 - 否则我可能会意外地检查在VS中不起作用的代码.
是否有任何开关或方法让GCC也拒绝或警告这样的类/结构声明不匹配?
注意:从评论中不确定此警告是否合法.对于我的问题它是不相关的,因为条件导致VisualStudio中的链接失败(我不能忽略警告).因此,我只想使用GCC识别问题,以便我的Windows编译不会突然停止工作.
答案:似乎没有解决方案.