繁体   English   中英

在C ++中使用复合文字

[英]Using compound literals in C++

我想使用compound literal初始化Matrix4类型的变量。 我的构造函数期望float*

所以这是我的初始化行:

const Matrix4 Matrix4::identity ( (float[16]) { 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f } );

这似乎应该起作用,但是Visual Studio表示它是“非标准显式类型转换”。 但是我想保留“单行初始化”,除非确实有更方便的方法。

您已经使用无关的静态成员详细信息使问题复杂化了。 实际上,该问题可以很容易地重现为:

void foo(float* );

void k() {
    foo((float[4]){1, 2, 3, 4});
}

您在这里拥有的是为C99定义的“复合文字”。 按照标准,它在C ++中不可用,但是某些编译器具有支持此功能的扩展。 从问题本身来看,MSVC似乎也支持此扩展-它在消息中提到了此扩展-但不允许使用代码。 可能有一种方法可以在MSVC上显式启用它,但是我对此并不熟练。

在这种情况下,我真的看不出编写不符合要求的代码的原因,因此我建议不要这样做。

编辑后回答问题,实际上有几种方法可以实现单线通话。 可以使函数接受std::initializer_list<float>作为可变数量的参数, std::array<float, 16>作为固定数量的参数,或者接受gsl::span

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM