我最近一直在试用 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/