代码之家  ›  专栏  ›  技术社区  ›  palm3D

C++的语法风格

  •  29
  • palm3D  · 技术社区  · 18 年前

    与……有关的问题 Regular cast vs. static_cast vs. dynamic_cast :

    C++中你更喜欢什么语法风格?

    • C样式转换语法: (int)foo
    • C++风格的强制转换语法: static_cast<int>(foo)
    • 构造函数语法: int(foo)

    它们可能不会翻译成完全相同的指令(是吗?),但它们的效果应该是相同的(对吗?)。

    如果只是在内置数字类型之间进行转换,我发现C++风格的转换语法太冗长。作为以前的java程序员,我倾向于使用C++风格的CAST语法,但我的本地C++ Guuru坚持使用构造函数语法。

    你怎么认为?

    10 回复  |  直到 9 年前
        1
  •  57
  •   Andrew    10 年前

    这是最好的做法 从不 使用C样式转换有三个主要原因:

    • 新演员有意在视觉上引人注目。由于强制转换经常暴露代码中的弱点,因此有人认为使强制转换在代码中可见是一件好事。
    • 如果使用自动工具搜索类型转换,则尤其如此。几乎不可能可靠地找到C样式转换。

    正如palm3D所指出的:

    我发现C++风格的强制转换语法太冗长。

    出于上述原因,这是故意的。

    相同的

    void f(auto_ptr<int> x);
    
    f(static_cast<auto_ptr<int> >(new int(5))); // GOOD
    f(auto_ptr<int>(new int(5));                // BAD
    

    这个 static_cast auto_ptr 构造器。

        2
  •  15
  •   hometoast    18 年前

    根据 Stroustrup

    引入了“新型演员阵容” 给程序员一个陈述的机会 他们的意图更加明确和明确

    所以实际上,这是为了安全,因为它需要额外的编译时检查。

        3
  •  7
  •   Jérôme    18 年前

    关于这个问题,我遵循 Scott Meyers ( More Effective C++ ,第2项:首选C++样式转换)。

    我同意C++风格的演员是冗长的,但是这就是我喜欢的:它们很容易被发现,而且它们使代码更容易阅读(比写作更重要)。

    他们还迫使你考虑你需要什么样的演员阵容,并选择正确的演员阵容,以减少出错的风险。它们还将帮助您在编译时而不是在运行时检测错误。

        4
  •  3
  •   Bill the Lizard    18 年前

    1. 很明显发生了什么。我读了一遍就意识到有演员在演。使用C型石膏,你的眼睛可以不停地从上面掠过。
    2. 很容易在我的代码中搜索我要铸造的每个地方。
        5
  •  3
  •   Ben Collins    18 年前

    绝对是C++风格。额外的输入将有助于防止您在不应该的情况下施放:-)

        6
  •  3
  •   QBziZ    9 年前

    构造函数语法。C++是OO,构造函数存在,我使用它们。 如果您觉得有必要对这些转换向量进行注释,那么您应该对每种类型进行注释,而不仅仅是内置类型。可能您对转换构造函数使用“explicit”关键字,但客户端语法与内置类型的构造函数语法完全相同。 不管怎么说,这是一场艰苦的战斗,因为很多时候你甚至没有意识到自己会皈依。 对于向下投射指针,我确实使用静态的_投射,因为默认情况下不存在这样做的ctor。

        7
  •  1
  •   CiNN    18 年前

    C样式转换语法,不进行错误检查。 C++风格的强制转换语法,进行一些检查。 当使用static_cast时,即使它不进行检查,至少您知道在这里应该小心。

        8
  •  1
  •   DrPizza    18 年前

    C型演员是最糟糕的方式。它更难看到,不可报告,合并了不应该合并的不同操作,并且不能做C++风格的强制转换所能做的一切。他们真的应该从语言中删除C风格的强制转换。

        9
  •  1
  •   Community Mohan Dere    9 年前

    casting question ,我现在看到了使用static_cast的优势,如果没有其他原因的话,那就是“greppable”(我喜欢这个术语)。我可能会开始使用它。

    我不喜欢C++风格;它看起来太像函数调用了。

        10
  •  1
  •   CAH    14 年前

    如果你想掌握跟踪运行时错误的艺术,不要用C++风格。