You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FlatBuffers创建表时能否内联调用CreateString?

FlatBuffers两种创建Person表的写法是否都合规?

首先给出FlatBuffers中的Person表定义:

table Person {
  id:int32;
  name:string;
  age:int16;
  location:string;
}

针对这个表定义,以下两种C++实现方式是否都正确?

方式一:内联调用CreateString

// 内联调用CreateString
auto person = CreatePerson(builder,
                           10,
                           builder.CreateString(name),
                           25,
                           builder.CreateString("New York"));

方式二:先存储字符串偏移再创建表

auto name = builder.CreateString("John");
auto loc = builder.CreateString("New York");

auto person = CreatePerson(builder, 10, name, 25, loc);

两种写法都是完全合规且正确的。

FlatBuffers的核心规则是「在创建表之前,必须先完成所有嵌套对象或字符串的构建」,而内联调用builder.CreateString()的本质是:在调用CreatePerson()之前,就已经执行了字符串的创建逻辑,生成了对应的偏移量,完全符合先构建嵌套元素再创建表的要求。

builder.CreateString()会立即将字符串数据写入FlatBuffer的缓冲区,并返回对应的偏移值。不管是把偏移值先存入变量,还是直接作为参数传入CreatePerson(),底层执行顺序都是先创建所有字符串,再创建Person表,最终生成的FlatBuffer数据完全一致。


内容的提问来源于stack exchange,提问作者tunafish24

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 14:22:01