【发布时间】:2011-07-18 15:40:06
【问题描述】:
我正在从缓冲区读取字节。但有时我正在阅读的是一个单词或更长的内容。
// assume buffer is of type unsigned char *
read_ptr(buffer+(position++))
这很好,但我怎样才能将位置增加 2 或 4?我无法让+= 运算符进行后增量,是吗?
原因是,我想要评估这个可怕的大表达式,同时增加位置变量。
我想我想出了自己的解决方案。我很确定它有效。但是每个人都会讨厌它,因为这不是可读的代码。
read_ptr(buffer+(position+=4)-4)
我会在对其进行一些测试以确保它在做正确的事情后将其制成一个宏。
结论:
不要这样做。这只是一个坏主意,因为这种事情会产生不可维护的代码。但是......将任何预递增运算符转换为后递增运算符确实非常容易。
【问题讨论】:
-
不要那样做。编写代码清晰易读。像这样滥用操作符只会让你在应用崩溃时哭泣。
-
请注意,增加指针并不一定意味着指针的新值相差 1 个字节。
-
而且,更重要的是,如果我们必须保持这种怪物,它会让 我们 哭泣。您应该始终假设继承您的代码的人是一个知道您住在哪里的精神病患者:-)
-
在所有回复之后,看到那个编辑让我面对。 =(
-
感谢大家的优秀cmets。在这个网站上,当人们对我提出的任何问题挑剔每一个潜在问题时,有时感觉就像是错过了。然后我意识到所有阅读这个网站的人都会从中受益,而不仅仅是我。这就是 SO 规则的原因。
标签: c++ c operators post-increment