相关疑难解决方法(0)

什么是C++中的"翻译单元"

我正在阅读Meyers编写的"Effective C++",并且遇到了"翻译单元"一词.

有人可以给我一个解释:

1)究竟是什么

2)在使用C++编程时,我应该何时考虑使用它

3)如果它只与C++有关,或者它可以与其他编程语言一起使用

我可能已经在不知道术语的情况下使用它了....

c++

221
推荐指数
6
解决办法
6万
查看次数

混合类和结构

我很清楚类和结构之间区别,但是我很难权威地说这是否定义得很好:

// 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这么多警告它.

c++ struct class undefined-behavior

17
推荐指数
2
解决办法
2951
查看次数

GCC可以产生像VS这样的结构/类名称不匹配吗?

我想获得GCC产生的警告时,发现已被宣布与这两个名字是VisualStudio的生产classstruct.(警告4099)这通常来自前向声明,例如:

struct Base;
...
class Base { ... };
Run Code Online (Sandbox Code Playgroud)

VS在这种情况下实际上无法链接,因此我已将警告提升为错误.由于这个项目是跨平台的,我想在使用GCC编译时也发现这个问题 - 否则我可能会意外地检查在VS中不起作用的代码.

是否有任何开关或方法让GCC也拒绝或警告这样的类/结构声明不匹配?

注意:从评论中不确定此警告是否合法.对于我的问题它是不相关的,因为条件导致VisualStudio中的链接失败(我不能忽略警告).因此,我只想使用GCC识别问题,以便我的Windows编译不会突然停止工作.


答案:似乎没有解决方案.

c++ gcc visual-studio

7
推荐指数
2
解决办法
1122
查看次数

标签 统计

c++ ×3

class ×1

gcc ×1

struct ×1

undefined-behavior ×1

visual-studio ×1