以 .(点)需要解释
Struct variable name prefixed with a .(dot) need explaination
这是 GitHub 下 OBS Studio 的代码摘录。我未能理解以下内容:
1) struct 关键字后跟结构名称 (obs_encoder_info) 和标签 (opus_encoder_info) 吗?
2) 结构变量如何以 .(点) ?它是另一个结构的成员变量吗?
struct obs_encoder_info opus_encoder_info = {
.id = "ffmpeg_opus",
.type = OBS_ENCODER_AUDIO,
.codec = "opus",
.get_name = opus_getname,
.create = opus_create,
.destroy = enc_destroy
};
这是指定的初始值设定项(自 C++20 起)。
因此,它声明一个名为opus_encoder_info
的对象,类型为obs_encoder_info
,其数据成员id
用值"ffmpeg_opus"
初始化,type
用值OBS_ENCODER_AUDIO
初始化,依此类推。
struct 关键字后跟结构名称 (obs_encoder_info) 和标签 (opus_encoder_info) 吗?
几乎。struct
关键字后跟结构名称,但之后是变量(不是标记)名称。此行声明(并初始化)opus_encoder_info
作为类型为struct obs_encoder_info
的变量。(在C++中,struct
关键字不是必需的,但在 C 中是必需的。
2) 结构变量如何以 .(点) ?它是另一个结构的成员变量吗?
您的术语在这里有点不对劲,因为结构变量是opus_encoder_info
的,而以点为前缀的东西是结构成员。无论如何,一个struct obs_encoder_info
显然有名为id
、type
等的成员,并且opus_encoder_info
变量的这些字段是通过指示符的初始化来初始化的,这是C99的新功能。(简而言之,成员x
通过在大括号内写入.x = a
来初始化为值a
。
是的,我的回答好像代码是用 C 编写的,即使这个问题被标记为"C++"。我证明这一点是因为我有理由相信有问题的代码是C。首先,在声明变量时使用struct
关键字 – 在 C 中是必需的,但在C++中是多余的。其次,代码来自扩展名为".c"而不是"的文件。C"(大写)或".cpp"或任何其他表示C++源文件的扩展名。第三,这种代码在 2014 年的文件中就存在(2017 年有过一次名称更改),使用 C++20 功能还为时过早,更不用说在生产代码中使用了。
所以我得出的结论是,这个问题被错误地标记了。但是,答案(以及可接受的答案)的存在意味着修复问题的标签可能会导致比解决的更多的混乱。
- 请解释"函数1(p1,p2,p3);"的输出
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 被解释为低级别const的const对象的地址
- 计算每个节点的树高,帮助我解释这个代码解决方案
- MSVC将仅移动结构参数解释为指针
- 内联程序集printf将整数解释为地址
- 有人能解释一下为什么下界是这样工作的吗C++的
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 我是c ++的新手,你能解释一下在这种情况下的指针吗
- 有人能为我解释一下C++代码吗
- 你能解释一下什么运行时错误是如何解决它的吗?
- 请解释字谜的代码,我看不懂计数器数组,每个值已经是0
- 有人可以向我解释为什么控制台输出 0 吗?
- 有人可以解释一下这段代码如何能够反转字符串
- 在 C++ 中解释多维向量的语句时感到困惑
- 解释一下 for (char c : str) 的作用?
- 确切地说,如何解释 std::getline(stream, string) 函数在C++中填充的字符串
- 隐式重新解释引用时强制转换,没有警告/错误
- 有人可以在 c++ 中解释数组的这种输入
- 有人可以解释一下这个矩阵幂函数是如何工作的吗?