so, i suppose if i had (incorrectly) not defined the argument as a const object, i would not have needed the const bracket operator?
Yes, this is true, but it only makes the need/error trickle down another level. Some unsuspecting programmer would then try to use your class like such:
void a_fancy_function(const spectrum &s1, const spectrum &s2)
   // ...
   spectrum combined;
   combined = s1 + s2;
   // ...
Since both s1 and s2 in this example are const, we must call a operator + that is roughly defined as:
operator +(const spectrum &) const
If you had, as you mention, incorrectly defined the argument as a nonconst, the above example would fail to compile. (It just basically moved the error message from the class to the usage of the class)