问题描述
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
提供这样的构造函数,那么您可以同时使用括号和花括号初始化器。