Fle*_*exo 17 c++ struct class undefined-behavior
我很清楚类和结构之间的区别,但是我很难权威地说这是否定义得很好:
// 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这么多警告它.
Jer*_*fin 11
它看起来像是它定义的行为.特别是,§9.1/ 2说:
单独
class-key identifier ;
包含的声明是对当前作用域中名称的重新声明或作为类名称的标识符的前向声明.它将类名引入当前范围.
该标准区分使用之间class
,struct
或union
当定义一个类,但在这里,谈论的声明,没有这样的区分是由-使用一个class-key
等同于其他任何.
归档时间: |
|
查看次数: |
2951 次 |
最近记录: |