【问题标题】:Wide character and character in assignment and equality operators赋值和相等运算符中的宽字符和字符
【发布时间】:2013-04-11 23:57:53
【问题描述】:

假设wcwchar_tcchar
1) 这两个作业有什么不同吗?

c = 'a';
wc = L'a';

2) 是否有任何规则强制 cwc 对于 ASCII 值相等? wc == c 对编译器究竟意味着什么?

【问题讨论】:

  • charwchar_t 都是整数类型。适用通常的积分促销规则。
  • @KerrekSB 谢谢。那个'L'呢?如果它们是两个整数,那么'a'L'a' 没有区别。也是真的吗?
  • @KerrekSB 这里是推广还是转化? (我会说这是转换。)

标签: c++ char widechar


【解决方案1】:

不——标准保证基本执行字符集和基本宽执行字符集都包含“a”,但不保证两者的值相同。

§2.3/3 给出了一些限制(例如,数字应该是连续的),这些都不适用于这里,还有一个结尾:“执行字符集的成员和附加成员集的值是语言环境-具体的。”

因此,不仅不能保证,而且至少在理论上,当/如果您更改语言环境时,它甚至可能会改变。

【讨论】:

  • Kerrek 的评论怎么样?因此,两者都不可分割,不会导致这个问题的答案吗?
  • @JalalJaberi:这只会影响类型,而不影响值。您可以比较它们,但不能保证结果。
  • 比较它们确实比较了它们的整数值,然后,没有任何保证!谢谢你。 charwchar_t 关系还不是很友好! :)
  • @JalalJaberi:我想这是允许(例如)EBCDIC 作为基本执行字符集,Unicode/ISO 10646 作为宽字符集。在典型使用中,您不太可能遇到差异(EBCDIC 实际上是唯一一个不包含大部分 ASCII 作为子集的字符集)。
猜你喜欢
  • 2012-11-02
  • 2015-04-10
  • 2011-11-16
  • 2016-04-01
  • 2010-12-17
  • 2013-06-28
  • 1970-01-01
  • 2013-02-08
  • 1970-01-01
相关资源
最近更新 更多