【发布时间】:2015-10-14 03:39:57
【问题描述】:
在阅读一篇文章时,我遇到了以下功能:
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++11 开始,此功能不在 C++ 标准中。)
-
参见the C standard,第 6.5.2.5 复合文字部分,第 10 点(关于指定的初始值设定项)。
-
我很确定这对纯 C 有效,而 not 对 C++ 有效。
-
@ShafikYaghmour:可能有很多重复项,但被提名的并不是(甚至接近于)重复项——它是在问 为什么 C++ 没有指定的初始化器(答案几乎仅限于为什么的问题)。这是在询问语法 means 的含义,而不是为什么它在 C++ 中不存在。您找到的那个至少相当接近重复(但至少在 IMO,当作为重复关闭时,重要的是不要仅仅关闭,而是要确保指定重复的答案确实回答了所提出的问题在这里)。
-
@Michael:复合文字 需要在
{之前加上括号类型。并且指定的初始值设定项不是标准的 C++(但是 - afaik - gcc 也允许它们作为 C++ 的扩展)。