ere*_*eOn 8 c++ undefined-behavior visual-c++
我有以下代码(为简单起见省略了包含保护):
= foo.hpp=
struct FOO
{
int not_used_in_this_sample;
int not_used_in_this_sample2;
};
Run Code Online (Sandbox Code Playgroud)
= main.cpp=
#include "foo_generator.hpp"
#include "foo.hpp"
int main()
{
FOO foo = FooGenerator::createFoo(0xDEADBEEF, 0x12345678);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
= foo_generator.hpp=
struct FOO; // FOO is only forward-declared
class FooGenerator
{
public:
// Note: we return a FOO, not a FOO&
static FOO createFoo(size_t a, size_t b);
};
Run Code Online (Sandbox Code Playgroud)
= foo_generator.cpp=
#include "foo_generator.hpp"
#include "foo.hpp"
FOO FooGenerator::createFoo(size_t a, size_t b)
{
std::cout << std::hex << a << ", " << b << std::endl;
return FOO();
}
Run Code Online (Sandbox Code Playgroud)
这个代码,就目前而言,编译完全没有任何警告.如果我的理解是正确的,它应该输出:
deadbeef, 12345678
Run Code Online (Sandbox Code Playgroud)
但相反,它会随机显示:
12345678, 32fb23a1
Run Code Online (Sandbox Code Playgroud)
或者只是崩溃.
如果我更换FOO的前瞻性声明foo_generator.hpp有#include "foo.hpp",那么它的工作原理.
所以这是我的问题:返回一个前向声明的结构会导致未定义的行为吗?或者什么可能出错?
使用的编译器:MSVC 9.0和10.0(都显示问题)