• Create Account

### #ActualAmeise

Posted 29 June 2012 - 10:23 AM

-Browser is being stupid, double post.-

### #1Ameise

Posted 29 June 2012 - 10:21 AM

However, it then will execute [true | false] | "weapon". "weapon" is not going to be nullptr, therefor, you are bitwise ORing a [true | false] (generally represented as 0x1 and 0x0) against a guaranteed non-nullptr value, giving you a value that is guaranteed to NOT be 0. You then do it again with "the weapon".

Those are logical OR, not bitwise OR. The compiler determines that "weapon" is a non-null pointer, so you have [some boolean] || true, which evaluates to true, short circuiting the final condition.

Whoops. Looked like single-pipes on my screen.

However, judging by the the set of strings, I wouldn't be surprised if one could get away with

if (attack.find("weapon") != std::string::npos)


To nitpick, the user could type something ambiguous, like: "a magical weapon". In this case the program would behave differently if it checked for the presence of "weapon" or "magic" first.

I think your code behaves reasonably for this, but it is nice to be aware of such edge cases.

Well, I was aware of edge cases, hence "get away with". It depends on what his actual source inputs are and what he expects from them, something which he hasn't detailed.

PARTNERS