是语句值 += i;与值 = 值 + i 完全相同
Is the statement value += i; the exact same as value = value + i?
除了编辑器中多余的空间,这两个语句之间有什么区别吗?
编辑:感谢您的回答。我还想知道编译器如何计算每个语句。
否 - 对于 POD 的任何其他内容,运算符可能会过载。
您可能希望任何合理的实现都使这些操作相同,但这取决于开发人员,而不是由编译器强制执行。
当人们超载运算符时,您可以想象更微妙的问题,以至于(A==B)
与(B==A)
不同。
是的,可能会有差异。 某些对象(如前向迭代器)定义了增量运算符(x++
和 ++x
),但不是 operator+=
。 某些对象(如 string
)定义operator+=
但不定义增量。 但是,一般来说,如果x += 1
、++x
和x++
都被定义,它们将做同样的事情。
即使对于 POD,它们也不完全相同; 差异是微不足道的,但你有用的编译器编写者可能会警告你后者,但不会警告你:
char ch = get_a_character();
++ch;
ch = ch + 1; // narrowing conversion
是的,它们是相同的。编译器极有可能为两者生成相同的代码。
当然,除非其中一个或两个运算符都过载。这就是为什么有些人对操作员超载不屑一顾的原因。
相关文章:
- 变量在使用赋值语句赋值后恢复为以前的值
- 有没有办法在C++将字符串与开关语句一起使用?
- 我如何将 OR 与 if 语句一起使用字符串
- 对于单个数据 WORD 的 memcpy 和赋值语句有什么区别?
- 如何使C++编译器遵循与C#在该赋值语句中相同的优先级、关联性和求值顺序
- C++中的键值对:<val1, val2> 键<frequency>与值一样
- C++ 将二维数组索引与条件语句中的函数值进行比较
- std::map::find 的效率是否与值的数据大小有关?
- 如果调用 RtlSetProcessIsCritical,将使用 lstrcmpW 将命令行与值进行比较将使程序崩溃
- 与 IF 语句C++的字符串比较?
- 是否可以将结构与条件语句完全相同的字符串转换为可以读取和操作的语句?
- 在循环中与开关语句有问题
- 为什么常量字符 INITIAL='G' 不是赋值语句?
- 基本赋值语句
- Boost ::与指针与值的混淆
- 是语句值 += i;与值 = 值 + i 完全相同
- 运算符++:引用与值返回和未使用的参数
- 2D数组-将三个元素与if语句进行比较
- 与 ::function 语句混淆
- 什么是成员数据指针的正确赋值语句