C++ 节俭转换可选为默认或必需

C++ 节俭转换可选为默认或必需,c++,thrift,C++,Thrift,我有一个节俭的结构 struct Message { 1: optional int userID; ... } 将其更改为默认值是否安全 struct Message { 1: int userID; ... } 如果我知道它总是固定的?那么“必需”呢?如中所述,节俭有三种程度的(所谓的)必需性: 必需:必须在读取时存在,必须在写入时设置 可选:可以设置也可以不设置,完全可选 “默认”:读时可能不存在,总是写的(除非它是null指针) 回答以下问题:

我有一个节俭的结构

struct Message {
    1: optional int userID;
    ...
} 
将其更改为默认值是否安全

struct Message {
    1: int userID;
    ...
} 
如果我知道它总是固定的?那么“必需”呢?

如中所述,节俭有三种程度的(所谓的)必需性:

  • 必需
    :必须在读取时存在,必须在写入时设置
  • 可选
    :可以设置也可以不设置,完全可选
  • “默认”:读时可能不存在,总是写的(除非它是
    null
    指针)
回答以下问题:

  • 可以安全地将
    optional
    更改为默认值(即删除
    optional
    关键字)

  • 可选
    更改为
    必需
    可能会破坏兼容性。除非您确保所有客户端/服务器都相应更新,否则旧端可能不会为此类字段提供值。在这种情况下,另一端将拒绝不完整的传入请求或响应,因为接收到的数据中缺少
    required
    字段


  • 关于这一主题的进一步阅读,您可能需要查阅Diwaker Gupta高度推荐的《为什么?》

    可能的副本?我的问题正好相反:从可选到默认。你读过答案了吗?不,你确定吗?我有一个可选字段,我只是删除了可选字段(设为默认值),你认为它不安全吗?你能举一个它将在哪里中断的例子吗?关于默认与可选的一些非常有用的上下文: