【发布时间】:2021-01-07 21:35:09
【问题描述】:
以下指定初始化程序示例在 Visual Studio 2019 中使用 /std:c++latest 有效,但我想知道如何在 Visual Studio 2017 中没有指定初始化程序的情况下完成同样的事情。
我正在使用 C++,并且我意识到有一种面向对象的方法可以做到这一点,但我并不是在问如何使用构造函数在 C++ 中重新创建它。这使得这个问题的标记有点混乱,很抱歉有任何混淆。
我也在为这里的术语而苦苦挣扎。只是为了确认,&(struct Foo) 是复合文字吗?这是实现编译时静态初始化? constexpr 可以在这里以某种方式使用吗?
// Header
struct Foo
{
void (*Bar)();
};
extern struct Foo *FooAPI;
// Source
static void Bar()
{
}
static struct Foo *FooAPI = &(struct Foo) { // Error: Expecting an expression
.Bar = Bar
};
【问题讨论】:
-
你的问题和C有关系吗?如果没有,请删除标签。
-
在某种程度上,是的。
-
.Bar = Bar;-->.Bar = Bar。另外:void *(Bar)();-->void (*Bar)(); -
C 和 C++ 是两种非常不同的语言,所以请不要同时标记这两种语言。您显示的代码不是有效的 C++ 代码,因为是的,它确实使用了复合文字。
标签: c++ c static visual-studio-2017 designated-initializer