xuegy
V2EX  ›  C++

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

  •  
  •   xuegy · Mar 10, 2021 via iPhone · 7364 views
    This topic created in 2065 days ago, the information mentioned may be changed or developed.
    源代码只支持 gcc 编译,clang 疯狂报错 ambiguous 。一边编译一边对着报错信息改,一共改了四百行,几乎全都是把 xxx A=B; 改成 xxx A(B);
    眼睛都快要瞎了。我是该吐槽 gcc 下限太低什么玩意都给编译呢,还是该吐槽 clang 严格遵守标准过于死板呢?
    Supplement 1  ·  Mar 10, 2021
    给原作者发了一个 pull request,他拒绝了,估计是改了这么多行有歧义代码伤了他的自尊心...
    36 replies  •  2021-03-11 22:24:09 +08:00
    codehz
    codehz
    Mar 10, 2021
    1
    哎,不应该改成 xxx A{B}; 吗
    xuegy
    xuegy
    OP
    Mar 10, 2021 via iPhone
    2
    @codehz 圆括号能用为啥要非要上花括号?
    Tony042
    Tony042
    Mar 10, 2021 via iPhone
    3
    @xuegy 两个还是不太一样,花括号是 initializer_list,两个略有区别,我也不太清了,依稀记得花括号会更好一些,可以防止一些歧义。
    Tony042
    Tony042
    Mar 10, 2021 via iPhone
    4
    为啥不写个 operator=直接考虑类型转换
    xuegy
    xuegy
    OP
    Mar 10, 2021 via iPhone
    5
    @Tony042 非要这样写就默认至少 C++11 了吧,兼容性咋办?
    BrettD
    BrettD
    Mar 10, 2021
    6
    禁用 clang 编译警告(-Wno-everything )解千愁(逃
    kokutou
    kokutou
    Mar 10, 2021 via Android
    7
    感觉可以写个脚本批量处理吧。。。
    BrettD
    BrettD
    Mar 10, 2021 via iPhone
    8
    哦没事了,原来是编译错误
    kekxv
    kekxv
    Mar 10, 2021 via iPhone
    9
    永 gcc 编译为动态库或者静态库来用?
    geelaw
    geelaw
    Mar 10, 2021
    10
    @Tony042 #4 这里需要的是 ctor 不是 operator=。

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

    好吧~,have a good day~.
    se77en
    se77en
    Mar 10, 2021
    26
    @pluxj 花括号分场合的,不能一概而论,建议读一下 Google 的这个 Tip: https://abseil.io/tips/88
    twor2
    twor2
    Mar 10, 2021
    27
    @wnpllrzodiac 看了几个台湾人节目, 括好像都是发瓜的音,比较常见的词,是 包瓜(包括)
    whee1
    whee1
    Mar 10, 2021 via iPhone
    28
    你太死板了吧,别人的代码,修改编译选项让它过就是了,何必为难自己呢。
    xuegy
    xuegy
    OP
    Mar 10, 2021 via iPhone
    29
    @whee1 我要移植过来自己用,得先把坑填上啊
    whee1
    whee1
    Mar 10, 2021
    30
    @xuegy #29 我昨天也干过类似的事情:给一套代码的析构函数加 19 个 noexcept 。
    linux40
    linux40
    Mar 10, 2021 via Android
    31
    @whee1 析构函数本身默认 noexcept 的,不用手动加。
    jones2000
    jones2000
    Mar 10, 2021
    32
    我 c++库 15 万行,移植到 js, 小程序, py 3 个平台, 移植了 7 个月. 还包括测试.
    https://github.com/jones2000/HQChart
    xuegy
    xuegy
    OP
    Mar 11, 2021 via iPhone
    33
    @jones2000 你这个太狠了,我只是从 Linux 移到到 Mac 。
    pluxj
    pluxj
    Mar 11, 2021
    34
    @se77en get
    whee1
    whee1
    Mar 11, 2021 via iPhone
    35
    @linux40 #31 而我改的代码却是 noexcept(false)。
    levelworm
    levelworm
    Mar 11, 2021
    36
    @Tony042 我记得好像是 initializer list 比 copy constructor 快一点
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1398 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 112ms · UTC 20:16 · PVG 04:16 · LAX 12:16 · JFK 15:16
    ♥ Do have faith in what you're doing.