微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 {} 和 () 进行结构初始化

如何解决使用 {} 和 () 进行结构初始化

我有一个结构

   struct Point
    {
    int x;
    int y;
    int z;
    }

为什么可以写

Point p = {10,20,30};
Point p0 {10,30};
auto p1 = Point{10,30};

使用 {}。但是我不能用 () 写

Point p(10,10,10);
auto p1 = Point(10,10);

错误

Error   C2440   'initializing': cannot convert from 'initializer list' to 'Point '  

解决方法

从 C++20 开始,您可以使用括号初始化程序执行 aggregate-initialization

        function onEdit(e) {
          const row = e.range.getRow();
          const col = e.range.getColumn();
          const as = e.source.getActiveSheet();
          const lc = as.getLastColumn();
          if(as.getName() == "Sheet1" && col == 1  && row > 1 && as.getRange(row,col).getValue() == 'All Picked') {
            const row_new = as.getRange(row,1,lc);
            row_new.copyTo(as.getRange(as.getLastRow() + 1,lc));
            as.deleteRow(row);
          } else if(as.getName() == "Sheet1" && col == 2  && row > 1 && as.getRange(row,col).getValue() == 'HOLD'){
            as.insertRowAfter(1);
            const row_new = as.getRange(row + 1,lc);
            row_new.copyTo(as.getRange(2,lc));
            as.deleteRow(row + 1);
          }
       }

在 C++20 之前,T object (arg1,arg2,...); (5) (since C++20) 应该调用 Point p(10,10,10); 的构造函数,需要 3 个 Point,但是 int 没有这样的构造函数。正如您所展示的,您必须使用花括号初始化器来执行聚合初始化,或者为 Point 提供这样的构造函数,那么您可以同时使用括号和花括号初始化器。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。