正如为什么nullptr_t不是关键字所讨论的那样,最好避免引入新关键字,因为它们可能会破坏向后兼容性.
为什么然后是char16_t和char32_t关键词,当他们可以这样定义?
namespace std {
typedef decltype(u'q') char16_t;
typedef decltype(U'q') char32_t;
}
Run Code Online (Sandbox Code Playgroud)
use*_*267 25
该提案本身解释了原因:允许与基础类型的超载uint_least16_t和uint_least32_t.如果他们被typedef编辑,这是不可能的.
定义
char16_t为一个独特的新类型,具有相同的大小和表示uint_least16_t.同样,定义char32_t为一个独特的新类型,具有相同的大小和表示uint_least32_t.[N1040定义
char16_t和char32_t作为类型定义到uint_least16_t和uint_least32_t,使过载上这些字符是不可能的.]
至于它们不在std命名空间中的原因,这是为了与原始C提议兼容.C++禁止C定义出现在自己的版本中<cuchar>
[c.strings]/3
标头不得定义类型
char16_t,char32_t和wchar_t(2.11).
然后,类型需要是全局typedef,它带有自己的一组问题,例如
typedef decltype(u'q') char16_t;
namespace foo {
typedef int char16_t;
}
Run Code Online (Sandbox Code Playgroud)
std::nullptr_t在您关联的问题中可以找到不是关键字的原因
我们不希望
nullptr_t在实际程序中看到多少直接使用.
nullptr_t在这里做出真正的例外.
| 归档时间: |
|
| 查看次数: |
1872 次 |
| 最近记录: |