【发布时间】:2016-11-30 14:38:25
【问题描述】:
我试图为此通读 C/C++ 标准,但找不到答案。
假设你有以下sn-p:
int8_t m;
int64_t n;
在某些时候你执行m + n,加法本身是一个二元运算符,我认为在这种情况下最有可能发生的情况是:
- 将
m加宽到n的大小,调用加宽结果m_prime - 执行
m_prime + n - 返回
int64_t类型的结果
我试图理解,但是如果我不执行 m+n 而不是执行 n+m,结果会改变(因为可能会有缩小操作而不是扩大操作)。
我找不到标准中阐明这一点的部分(我理解这可能听起来微不足道)。
谁能指出我可以在标准中找到这个的地方吗?或者在我暴露的那种情况下一般会发生什么?
就我个人而言,我一直在查看“加法运算符”部分,但在我看来并没有解释会发生什么,指针算术被涵盖了一点,但没有提及隐式应用的某些强制转换规则。
您可以假设我说的是 C++11,但我猜任何其他标准都会应用相同的规则。
【问题讨论】:
-
没有
C/C++标准。有一个C标准,一个C++标准。两者是非常不同的文件。 -
C 基本上几乎是 C++ 的真正子集,至少 ANSI C89 是。是的,无论较小的整数是在 + 号的左侧还是右侧,您都会变宽。
-
“C 基本上几乎是 C++ 的真正子集,至少 ANSI C89 是” - 恐怕这不是真的。
-
@StoryTeller,我认为限制在我所要求的范围内可以被认为是相同的。我不明白为什么这个特定部分应该改变。
-
@StoryTeller。是真的。请注意,我说的是“几乎”。所有 K&R 书籍示例(ANSI C89 版本)都使用 C++ 编译器进行编译。我所知道的其他两种语言都没有如此密切相关的。