title: What is the definition of const-correctness?
body: <p>I thought the concept of "const-correctness" was pretty well defined, but when I talked to other people about it, it seemed we had different ideas of what it means.  Some people say it's about a program having the "const" annotations in as many places as possible.  Others define a program as const-correct if and only if there are no violations of constness where the const annotation is used (ie. it's a property that the compiler checks for you).</p>
  
  <p>So I'd like to know, which of these functions are const correct:</p>
  
  <pre><code>struct Person {
      string getName1() const { return _name; }
      string getName2() { return _name; }
      string getName3() const { _name = "John"; return _name; }
      string getName4() { _name = "John"; return _name; }
  
      string _name;
  };
  </code></pre>
  
  <p>I've searched on the Internet for definitions but couldn't really find definite answer, and I also have suspicions that there might be a case of <a href="http://xkcd.com/978/" rel="noreferrer">citogenesis</a> at play.  So could anyone provide any solid citation for a definition?</p>