我不知道C和C ++允许multicharacter literal:不是'c'(在C中为int类型,在C ++中为char),而是'tralivali'(为int类型!)

enum
{
    ActionLeft = 'left',
    ActionRight = 'right',
    ActionForward = 'forward',
    ActionBackward = 'backward'
};


标准说:


  C99 6.4.4.4p10:“
  包含的整数字符常量
  多个字符(例如'ab'),
  或包含角色或转义符
  没有映射到一个序列
  单字节执行字符是
  实施定义。”


我发现它们在C4 engine中被广泛使用。但是我想当我们谈论与平台无关的序列化时,它们并不安全。 Thay也会令人困惑,因为看起来像字符串。那么多字符文字的使用范围是什么,它们对某些东西有用吗?它们使用C ++仅仅是为了与C代码兼容吗?作为goto运算符,它们是否被视为不好的功能?

最佳答案

我不知道这种用法的使用范围,但是“实现定义”对我来说是一个很大的危险信号。据我所知,这可能意味着该实现可以选择忽略您的字符名称,并在需要时仅分配常规的增量值。它可能做些“更小”的事情,但是您不能依赖于整个编译器(甚至编译器版本)的行为。至少“ goto”具有可预测的(如果不希望的话)行为...

那是我的2c。

编辑:在“实现定义”上:

Bjarne Stroustrup's C++ Glossary


  实现的定义-一个方面
  为以下目的定义的C ++语义
  每个实现而不是
  标准中规定的每个
  实施。一个例子是大小
  一个int(必须至少为16
  位,但可以更长)。避免
  实现定义的行为
  只要有可能。也可以看看:
  未定义。 TC ++ PL C.2。


也...


  未定义-C ++的一个方面
  没有合理意义的语义
  行为是必需的。一个例子是
  用值解引用指针
  零。避免未定义的行为。看到
  还:实现定义。 TC ++ PL
  C.2。


我认为这意味着该评论是正确的:尽管未指定其他内容,但至少应将其编译。还要注意定义中的建议。

关于c++ - C++多字 rune 字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24424798/

10-09 01:11