- 主题:今天看见一个完全看不懂的写法
现在是真的编译时
【 在 fanci 的大作中提到: 】
: 感觉现在的 C++ 编译器有点牛逼 :D
: 【 在 z16166 (Netguy) 的大作中提到: 】
: : 你说得对
: ...................
--
FROM 122.224.174.*
配合std::apply, std::visit, parameer pack expanding 用,很好用。
memory aligned 多态
【 在 finlab 的大作中提到: 】
: 大牛,我也看不懂
: 不知道 ... 能这么用
:
--
FROM 115.198.191.*
你把初始化{}当作一个builder函数就很好理解了
【 在 fanci 的大作中提到: 】
: Parameter unpack, 有各种玩法,比如 x+…+0 啥的。
: 不过这段代码我看最奇特的是 类型推导(出花儿来),和 {} 初始化(多个)基类(居然还可以这么玩?!)
--
FROM 122.224.174.*
List-initialization
【 在 ble 的大作中提到: 】
: 模板再怎么用也只是替换,这个地方Overloader没有变参数的构造函数,也没有对应的结构体成员,顶楼代码是不是少写了什么?
: 发自「今日水木 on 钛星」
--
FROM 122.224.174.*
不要迷信clang,现在对c++20支持最全的是msvc
https://en.cppreference.com/w/cpp/compiler_support/20
【 在 ble 的大作中提到: 】
: 是用的20标准,但是xcode14.2(Apple clang 14.0.0)不认
: 发自「今日水木 on 钛星」
--
修改:ziqin FROM 122.224.174.*
FROM 122.224.174.*
这个其实就是定义了一个函数
但是事实上,list initilization和ctor函数或者builder函数还是不一样
list initialization是直接把参数在内存上初始化了,而ctor或者builder,或者任何通过函数来构建object的操作,都会多一次函数指针和参数复制的操作
c++20以前,这种需要通过参数来deduce template parameter,只能通过function template来做,c++20直接允许list initialization来deduce template parameter
【 在 ble 的大作中提到: 】
: 进链接看了,楼主少写了模板推导指引
: template<typename... T>
: Overloader(T...) -> Overloader<T...>;
: ...................
--
FROM 122.224.174.*
还是那句话,你把list initialization当作广义的ctor就很好理解了
我觉得,当初提出list initialization,大概想法就是想给fill class elements这个动作做特殊的编译期优化,但是又需要统一到c++原来的ctor框架里。所以增加了{},然后又要各种完备,使得{}在使用的时候,形式上和ctor一样
【 在 ble 的大作中提到: 】
: 个人觉得,这种推导还是反直观的,list initilization初始化结构体,第一个元素初始化第一个成员,这种是直观的而且延用已久。但是第一个成员的类型推到模板的第一个参数,有点反直观了。
:
--
FROM 115.193.178.*