你为什么要施放作业的lhs?

时间:2009-04-03 18:40:04

标签: c++

我遇到了一些可归结为以下内容的代码:

enum BAR { /* enum values omitted */ }

class Foo{
public:
  void set(const BAR& bar);
private:
  uint32_t bits;
};

void Foo::set(const BAR& bar)
{
 (uint32_t&)bits = bits | bar;
}

我不明白Foo :: set中赋值的c风格转换点。你为什么要施放作业的lhs?我疯了,还是有目的?

6 个答案:

答案 0 :(得分:8)

在这种情况下,我看不出任何投射的原因,因为投射的东西与演员阵容的类型相同。通常,它可以用来强制使用特定的分配操作符。

我现在将重复我的口头禅:如果你的代码包含强制转换,那么代码或设计可能有问题,你应该检查两者以便删除强制转换。

答案 1 :(得分:2)

我同意Neil Butterworth的观点,在这种情况下演员不是必需的,而且这是一个明确的“代码味道”。

答案 2 :(得分:0)

据我所知,它什么都不做,即使BAR定义的值超出了uint32范围。看起来像是噪音。

答案 3 :(得分:0)

我不能肯定地说不知道背景,但看起来有人可能已经采用了一些现有的C代码并将其包装在C ++类中。演员表可能是c代码的剩余部分。

答案 4 :(得分:0)

我不确定这是否合法。演员阵容不是左值......

无论哪种方式,它看起来都毫无意义。

答案 5 :(得分:-1)

如果你只想允许分配某个值(例如,对分配的检查就像根据演员表那样输入变量一样,而不是像让你加宽rhs一样让任何东西都通过)。 / p>