- 主题:C(x),C{x},C({x}),C={x},C=x的语义竟然都不完全一样
其实很简单,{}提示编译器不用呼叫函数,也就是说不用通过函数指针跳转,复制形参实参哪些,()是一个彻底的函数呼叫。
--
FROM 60.191.0.*
{}本身数学上定义就是集合,所以{}的构造基本就是把一堆数直接扔到内存位置填充,所以{}对class有定义要求。
--
FROM 60.191.0.*
这些对class的具体要求,本质上是为了template programming的时候兼容{}和(),因为某个类可能需要使用{},或者需要使用(),采用传统的if constexpr type_traits太丑陋,所以在编译器层面把调用{}或者()语法化
但是{}的本质,是ctor的direct placement
对于很多会被高频构造的数据struct,{}和构造函数能相差一个数量级的速度
【 在 finlab 的大作中提到: 】
: 这个说法不太准确。
: 对于没有定义构造函数的pod类型,是你说的这样。
: 对于定义了构造函数的类型,编译器要找匹配的构造函数。
: ...................
--
FROM 115.205.236.*
G家standard说的比较明确,除非自己在写template,否则一般使用中,除非是fill data struct/container的操作,其他都应该明确使用()而不是{},这样让读代码的人知道这个构造函数中干了别的复杂的事
--
FROM 115.205.236.*