C++ C++;字符减法

C++ C++;字符减法,c++,C++,所以我意识到,假设ascii编码会给你带来麻烦,但我不确定减法字符会有多麻烦。我想知道哪些相对常见的场景会导致以下任何一种评估为错误 鉴于: std::string test = "B"; char m = 'M'; A) (m-'A')==12 B) (测试[0]-'D')==-2 此外,小写值的答案是否会改变(将77更改为109ofc) 编辑:回答这个关于字符数字的问题,说标准说'2'-'0'==2必须适用于所有数字0-9,但我想知道它是否适用于a-z和a-z,我在阅读中不清楚标准的2.3

所以我意识到,假设ascii编码会给你带来麻烦,但我不确定减法字符会有多麻烦。我想知道哪些相对常见的场景会导致以下任何一种评估为错误

鉴于:

std::string test = "B";
char m = 'M';
A)
(m-'A')==12

B)
(测试[0]-'D')==-2

此外,小写值的答案是否会改变(将
77
更改为
109
ofc)

编辑:回答这个关于字符数字的问题,说标准说
'2'-'0'==2
必须适用于所有数字
0-9
,但我想知道它是否适用于
a-z
a-z
,我在阅读中不清楚标准的
2.3

编辑2:删除ASCII特定内容,以更清晰地聚焦问题(抱歉@πάντα-ῥεῖ 对于内容更改编辑,但我觉得这是必要的)。基本上,该标准似乎暗示了基本集合中字符的某种顺序,但某些编码并不保持这种顺序,那么最重要的原则是什么

换句话说,C/C++中的字符何时不存储在ASCII中

C或C++语言对目标系统所使用的实际字符编码表没有任何概念。唯一的约定是像

'A'
这样的字符文本与当前编码匹配


您也可以处理编码字符,代码看起来与ASCII字符相同。

Downvotes/close votes是否要评论?不是重复的imho,因为它引用的标准仅适用于数字。如果
char
未签名怎么办?@DavidSchwartz很好,但我的示例都已签名。如果执行
(测试[0]-“D”),您认为会发生什么情况
char
未签名的平台上?@DavidSchwartz没有意识到char可以是未签名的,而不是声明为
未签名的char
。在这种情况下,B)可能有问题。很高兴知道!(对于像我这样的其他人:)所以不能保证基本字母表是连续的吗?也就是说,标准保证了
'2'-'0'==2
,但没有保证
'C'-'A'
?@AdamMartin好吧,这些应该用一个健全的字符编码表来保证,类似
m==77
的东西是不行的。我意识到
m==77
是行不通的,但在EBCDIC中,例如,
A-Z
不是顺序的。我不应该编辑你引用的关于ASCII的那行,我试图将问题归结为一个问题,但我做得过火了,因为我对答案/材料不够了解。@AdamMartin你在评论中回答了自己的问题。