做网站怎样使图片自由移动,个人免费建网站,网站注册费,wordpress页面无法编辑器目录定义1、用于原生数组的结构化绑定声明2、用于std::array的结构化绑定声明3、用于对象数据成员的结构化绑定声明定义
结构化绑定声明是一个声明语句#xff0c;意味着声明了一些标识符并对标识符做了初始化。将指定的一些名字绑定到初始化器的子对象或者元素上。 对于初始… 目录定义1、用于原生数组的结构化绑定声明2、用于std::array的结构化绑定声明3、用于对象数据成员的结构化绑定声明 定义
结构化绑定声明是一个声明语句意味着声明了一些标识符并对标识符做了初始化。将指定的一些名字绑定到初始化器的子对象或者元素上。 对于初始化器赋值的理解
1、用于原生数组的结构化绑定声明
若初始化表达式为数组类型则标识符列表中的名字绑定到数组元素。 标识符数量必须等于数组元素数量 标识符类型与数组元素类型一致int main() {int priArr [] {42, 21, 7};// ai/bi/ci 的基本类型都是int只是cv标识或引用标识不同auto [a1, a2, a3] priArr; // a1 是 priArr[0] 的拷贝a2, a3类推const auto [b1, b2, b3] (priArr); // b1 是 priArr[0] 的只读拷贝b2, b3类推auto [c1, c2, c3] {priArr}; // c1 是 priArr[0] 的引用c2, c3类推c3 14; // priArr[2]的值变为14return 0;
}2、用于std::array的结构化绑定声明
若初始化表达式为数组类型则标识符列表中的名字绑定到数组元素 标识符数量必须等于std::array数组中的元素数量 标识符类型与std::array中的数组元素类型一致int main() {// std::array stdArr {a,b,c}; c17std::arraychar,3 stdArr {a,b,c};auto [d1, d2, d3] {stdArr}; return 0;
}3、用于对象数据成员的结构化绑定声明
若初始化表达式为类/结构体类型则标识符列表中的名字绑定到类/结构体的非静态数据成员上。 数据成员必须为公有成员 标识符数量必须等于数据成员的数量 标识符类型与数据成员类型一致class C { // 可以改用 struct C然后去掉下面的public属性说明
public:int i { 420 }; // 就地初始化char ca[ 3 ] { O, K, ! };
};
int main() {C c;auto [a1, a2] {c}; // a1是int类型a2是char[]类型std::cout c.i: a1 c.ca: b2 std::endl;
}auto后跟则标识符是数据成员的引用。 auto前可放置const表明标识符是只读的。
int main() {C c; // c.i: 420; c.ca: O,K,!auto [a1, a2] {c}; // a1是c.i的拷贝a2是char[]类型auto [b1, b2] {c}; // b1是int类型是c.i的引用// b2是char()[3]类型(数组的引用)是c.ca的引用a1 100;std::cout c.i: c.i std::endl; // 输出420改a1不影响c.ib1 200;std::cout c.i: c.i std::endl; // 输出200通过b1修改了c.i}注意C中对class中的两个数据类型没有private、public声明则认为是私有的。 例如下面的代码就是错误的因为两个变量是私有的。
class C{int a{0};int b{1};
};
int main() {C c;auto [ x, y] {c};
}