gpt4 book ai didi

c++ - 使用全局引用调用函数时发生访问冲突

转载 作者:太空狗 更新时间:2023-10-29 22:56:10 25 4
gpt4 key购买 nike

我正在测试多种存储和使用名为 foo 的函数的函数引用的方法。

#include <iostream>

using Function = void (&)(void); // Reference to Function

void foo(void)
{
std::cout << "Foo called succesfully" << std::endl;
}

首先,我尝试在 Holder 类的静态成员中存储对 foo 的直接引用:

class Holder {
public:
static const Function class_foo;
};

Function Holder::class_foo = foo;

其次,我尝试将对 foo 的直接引用存储在全局变量中:

Function global_foo1 = foo;

第三,我尝试在 Holder 类中存储对其静态引用的引用:

const Function& global_foo2 = Holder::class_foo;

第四,我尝试在 Holder 类中存储其静态引用的拷贝:

Function global_foo3 = Holder::class_foo;

尝试使用第 3 种 (global_foo2) 和第 4 种 (global_foo3) 情况执行 foo 时发生访问冲突异常。

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;
}

知道我做错了什么吗?可能是因为我对编译步骤缺乏了解。

Obs:只需按顺序复制每个代码块即可执行完整代码。我的编译器是 Microsoft Visual Studio 15.5.2。还尝试了最新版本 15.5.6。仍然无法在 15.9.4 版中使用。异常证明是herehere .

最佳答案

代码可以使用 GCC 正确编译和执行。它必须是 MSVC 编译器错误或错误的编译器配置。

关于c++ - 使用全局引用调用函数时发生访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48816971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com