移植了一个库,眼睛快要瞎了。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xuegy
V2EX    C++

移植了一个库,眼睛快要瞎了。

  •  
  •   xuegy 2021-03-10 05:50:35 +08:00 via iPhone 6502 次点击
    这是一个创建于 1728 天前的主题,其中的信息可能已经有所发展或是发生改变。
    源代码只支持 gcc 编译,clang 疯狂报错 ambiguous 。一边编译一边对着报错信息改,一共改了四百行,几乎全都是把 xxx A=B; 改成 xxx A(B);
    眼睛都快要瞎了。我是该吐槽 gcc 下限太低什么玩意都给编译呢,还是该吐槽 clang 严格遵守标准过于死板呢?
    第 1 条附言    2021-03-10 10:42:45 +08:00
    给原作者发了一个 pull request,他拒绝了,估计是改了这么多行有歧义代码伤了他的自尊心...
    36 条回复    2021-03-11 22:24:09 +08:00
    codehz
        1
    codehz  
       2021-03-10 06:04:20 +08:00
    哎,不应该改成 xxx A{B}; 吗
    xuegy
        2
    xuegy  
    OP
       2021-03-10 06:08:53 +08:00 via iPhone
    @codehz 圆括号能用为啥要非要上花括号?
    Tony042
        3
    Tony042  
       2021-03-10 06:13:48 +08:00 via iPhone
    @xuegy 两个还是不太一样,花括号是 initializer_list,两个略有区别,我也不太清了,依稀记得花括号会更好一些,可以防止一些歧义。
    Tony042
        4
    Tony042  
       2021-03-10 06:14:21 +08:00 via iPhone
    为啥不写个 operator=直接考虑类型转换
    xuegy
        5
    xuegy  
    OP
       2021-03-10 06:18:01 +08:00 via iPhone
    @Tony042 非要这样写就默认至少 C++11 了吧,兼容性咋办?
    BrettD
        6
    BrettD  
       2021-03-10 07:06:07 +08:00
    禁用 clang 编译警告(-Wno-everything )解千愁(逃
    kokutou
        7
    kokutou  
       2021-03-10 07:19:06 +08:00 via Android
    感觉可以写个脚本批量处理吧。。。
    BrettD
        8
    BrettD  
       2021-03-10 07:23:00 +08:00 via iPhone
    哦没事了,原来是编译错误
    kekxv
        9
    kekxv  
       2021-03-10 07:50:14 +08:00 via iPhone
    永 gcc 编译为动态库或者静态库来用?
    geelaw
        10
    geelaw  
       2021-03-10 07:50:49 +08:00
    @Tony042 #4 这里需要的是 ctor 不是 operator=。

    @xuegy #2 因为 https://en.wikipedia.org/wiki/Most_vexing_parse
    但比较奇怪,一般来说用 = 初始化不会有歧义问题,反而是用函数调用初始化容易有“最烦人的解读”。
    wnpllrzodiac
        11
    wnpllrzodiac  
       2021-03-10 08:12:39 +08:00 via Android
    写个 py 脚本搞?
    wnpllrzodiac
        12
    wnpllrzodiac  
       2021-03-10 08:14:17 +08:00 via Android
    @Tony042 最好都用 花瓜号(侯杰大师发音),比较保险
    feather12315
        13
    feather12315  
       2021-03-10 08:42:54 +08:00 via Android
    sed 一行的事情
    AndyAO
        14
    AndyAO  
       2021-03-10 08:44:54 +08:00
    感觉这种事情应该写个脚本来解决吧,甚至正则表达式,也有可能直接全部解决
    lifanxi
        15
    lifanxi  
       2021-03-10 08:46:56 +08:00
    我没有理解为什么 clang 要报有歧义,如果 xxx 类的构造函数和类型转换函数没有花式作死的话,xxx A=B;就是调用拷贝构造函数通过 B 构造 A,好像没啥歧义啊。
    cominghome
        16
    cominghome  
       2021-03-10 08:58:22 +08:00
    所以说程序员掌握一门脚本语言也是很重要的
    lcdtyph
        17
    lcdtyph  
       2021-03-10 09:02:46 +08:00 via iPhone
    @lifanxi
    不一样,xxx A(B);是 direct initialization,而 xxx A=B;是 copy initialization
    区别是当 AB 类型不同时 copy initialization 会考虑隐士转换,从而引入另一条构造路径导致歧义。
    解决方法之一可以在正确的地方使用 explicit
    mlhadoop
        18
    mlhadoop  
       2021-03-10 09:06:02 +08:00
    还以为做了啥手术 /doge
    nmap
        19
    nmap  
       2021-03-10 09:51:36 +08:00
    还以为你移植了眼睛
    pluxj
        20
    pluxj  
       2021-03-10 10:09:53 +08:00
    用 花括号 {} 好一些,不然可能认为你在声明一个函数
    cyrbuzz
        21
    cyrbuzz  
       2021-03-10 10:49:48 +08:00
    (.+) (.+) = (.+);
    $1 $2($3);
    cyrbuzz
        22
    cyrbuzz  
       2021-03-10 10:50:20 +08:00
    @cyrbuzz
    vscode,单行开正则...
    xuegy
        23
    xuegy  
    OP
       2021-03-10 10:53:11 +08:00
    我也想过写脚本解决,但是很多没错的地方也符合你这种正则表达式...
    xuegy
        24
    xuegy  
    OP
       2021-03-10 10:55:20 +08:00
    @cyrbuzz 反正已经改完了,以后也不用再改第二次。
    cyrbuzz
        25
    cyrbuzz  
       2021-03-10 10:59:08 +08:00
    @xuegy

    好吧~,have a good day~.
    se77en
        26
    se77en  
       2021-03-10 11:34:27 +08:00
    @pluxj 花括号分场合的,不能一概而论,建议读一下 Google 的这个 Tip: https://abseil.io/tips/88
    twor2
        27
    twor2  
       2021-03-10 12:48:31 +08:00
    @wnpllrzodiac 看了几个台湾人节目, 括好像都是发瓜的音,比较常见的词,是 包瓜(包括)
    whee1
        28
    whee1  
       2021-03-10 15:01:42 +08:00 via iPhone
    你太死板了吧,别人的代码,修改编译选项让它过就是了,何必为难自己呢。
    xuegy
        29
    xuegy  
    OP
       2021-03-10 15:47:52 +08:00 via iPhone
    @whee1 我要移植过来自己用,得先把坑填上啊
    whee1
        30
    whee1  
       2021-03-10 16:05:44 +08:00
    @xuegy #29 我昨天也干过类似的事情:给一套代码的析构函数加 19 个 noexcept 。
    linux40
        31
    linux40  
       2021-03-10 17:19:53 +08:00 via Android
    @whee1 析构函数本身默认 noexcept 的,不用手动加。
    jones2000
        32
    jones2000  
       2021-03-10 23:00:53 +08:00
    我 c++库 15 万行,移植到 js, 小程序, py 3 个平台, 移植了 7 个月. 还包括测试.
    https://github.com/jones2000/HQChart
    xuegy
        33
    xuegy  
    OP
       2021-03-11 04:52:56 +08:00 via iPhone
    @jones2000 你这个太狠了,我只是从 Linux 移到到 Mac 。
    pluxj
        34
    pluxj  
       2021-03-11 09:28:32 +08:00
    @se77en get
    whee1
        35
    whee1  
       2021-03-11 09:41:41 +08:00 via iPhone
    @linux40 #31 而我改的代码却是 noexcept(false)。
    levelworm
        36
    levelworm  
       2021-03-11 22:24:09 +08:00
    @Tony042 我记得好像是 initializer list 比 copy constructor 快一点
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     917 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 21:43 PVG 05:43 LAX 13:43 JFK 16:43
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86