c++ - 为什么 auto 关键字不能与指向函数的指针的初始化列表一起使用?

标签 c++ c++11 function-pointers auto

我最近一直在试用 C++11,特别是 auto 关键字,事实证明它非常有趣且有用。

但是,由于某些原因,它不适用于函数指针的初始化列表。 首先,我在我的书中寻找答案,我发现“auto 关键字仅适用于单个初始化值而不适用于初始化列表”,但是当我尝试时:

auto foo = { "bar", "bar", "bar" };
std::cout << *(foo.begin());

它工作得很好,但是当我尝试这样做时:

// bar is a simple void bar() function
auto foo = { bar, bar, bar };

Visual Studio 编译器吐出:

error C1001: An internal error has occurred in the compiler.

虽然这有效:

auto foo = bar;

因此,我决定上网浏览一下,以获取有关 std::initializer_list 的更多信息,在那里我了解到它实际上与 std::vector< 非常相似。那么,我为什么不试试呢?

std::vector<void (*)()> foo = { bar, bar, bar };
(*foo.begin())();

完美工作。从那时起我就被困住了,我不知道为什么 auto 关键字不能与函数指针的初始化列表一起使用。为什么它会出现问题,尤其是在指向函数的指针方面?最重要的是,C++ 标准对此有何规定?

编辑:

我也使用 GCC 尝试过同样的事情,是的,它有效,因此看起来你们是对的,MSVC 编译器有一个错误。我想我需要等到他们修复它,同时我将只使用 GCC。

最佳答案

看来这只是MS VC++的一个bug。至少这段代码

auto foo = { bar, bar, bar };

其中 bar 是使用 GCC 成功编译的某个函数。

关于c++ - 为什么 auto 关键字不能与指向函数的指针的初始化列表一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22074608/

相关文章:

c++ - 库设计: allow user to decide between "header-only" and dynamically linked?

c++在给定类中创建函数指针 vector ,函数是不同类的成员

c++ - 在 clang 中强制使用 `const char[]` 字符串文字

c++ - 具有零参数的模板说明符

c++ - 将 lambda 传递给函数模板

c - 函数指针不兼容的指针类型 void (*)(void *) from void (my_type *)

c++ - 在 Visual Studio C++ 构建中打印日期和时间?

c++ - 成员值是否在构造函数初始化列表执行之前初始化?

c++ - 函数模板和私有(private)继承

c++ - Gtkglextmm 和 Gtkmm3