[英]Odd syntax in C++: return { .name=value, … }
在阅读文章时,我遇到了以下功能:
SolidColor::SolidColor(unsigned width, Pixel color)
: _width(width),
_color(color) {}
__attribute__((section(".ramcode")))
Rasterizer::RasterInfo SolidColor::rasterize(unsigned, Pixel *target) {
*target = _color;
return {
.offset = 0,
.length = 1,
.stretch_cycles = (_width - 1) * 4,
.repeat_lines = 1000,
};
}
作者用return语句做了什么? 我之前没有见过这样的东西,我不知道如何搜索它...它对普通C也有效吗?
编辑: 链接到原始文章
这不是有效的C ++。
它是(某种程度上)使用C中的一些特性,称为“复合文字”和“指定初始化器”,一些C ++编译器支持它作为扩展。 “有点”来自于这样一个事实:要成为一个合法的C复合文字,它应该具有看起来像一个演员的语法,所以你有类似的东西:
return (RasterInfo) {
.offset = 0,
.length = 1,
.stretch_cycles = (_width - 1) * 4,
.repeat_lines = 1000,
};
然而,无论语法有何不同,它基本上都是创建一个临时结构,其成员按块中的指定进行初始化,因此大致相当于:
// A possible definition of RasterInfo
// (but the real one might have more members or different order).
struct RasterInfo {
int offset;
int length;
int stretch_cycles;
int repeat_lines;
};
RasterInfo rasterize(unsigned, Pixel *target) {
*target = color;
RasterInfo r { 0, 1, (_width-1)*4, 1000};
return r;
}
最大的区别(如您所见)是指定的初始化程序允许您使用成员名称来指定初始化程序转到哪个成员,而不是仅仅依赖于顺序/位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.