我不知道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/