我正在测试存储和使用名为#include <iostream>
using Function = void (&)(void); // Reference to Function
void foo(void)
{
std::cout << "Foo called succesfully" << std::endl;
}
的函数的函数引用的多种方式。
foo
首先,我尝试在Holder类的静态成员中存储对class Holder {
public:
static const Function class_foo;
};
Function Holder::class_foo = foo;
的直接引用:
foo
其次,我尝试在全局变量中存储对Function global_foo1 = foo;
的直接引用:
const Function& global_foo2 = Holder::class_foo;
第三,我试图在Holder类中存储对其静态引用的引用:
Function global_foo3 = Holder::class_foo;
第四,我试图在Holder类中存储其静态引用的副本:
foo
尝试使用第3(global_foo2
)和第4(global_foo3
)个案件执行int main(void)
{
const Function& local_foo = Holder::class_foo;
local_foo(); // Executes Properly
Holder::class_foo(); // Executes Properly
global_foo1(); // Executes Properly
global_foo2(); // Throws Exception -> Access Violation when Executing
global_foo3(); // Throws Exception -> Access Violation when Executing
return 0;
}
时发生访问冲突异常。
{{1}}
知道我做错了什么吗?可能是因为我对编译步骤缺乏了解。
Obs:只需按顺序复制每个代码块即可执行完整代码。我的编译器是Microsoft Visual Studio 15.5.2。还尝试了最新版本15.5.6。仍然无法在15.9.4版中运行。例外证明为here或here。
答案 0 :(得分:1)
代码使用GCC正确编译和执行。它必须是MSVC编译器错误或错误的编译器配置。