Q:

c++ nonconst-const-overloaded method choosing

I have const-overloaded methods in my class:
class A{
  public:
     typedef int data[10];

           data& operator[](int index);
     const data& operator[](int index) const;
}

This class is implementing copy-on-write for its internal data.  I figured that since i am allowing to access data directly, i must create copy of shared data (if it is shared obviously) on every use of operator[], but not operator[] const.  However, even if code is using operator[] for reading data, but object itself is not declared as const, it will still cause creating copy, as operator[] will be used.  Is there any syntax that would let me allow to choose which of those operators i am calling? 

A:

Yes: const_cast<A const&>(anAObj)[5].