This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: g++ member function .at() for arrays
- From: James Dennett <james dot dennett at gmail dot com>
- To: Robin Whittle <rw at firstpr dot com dot au>
- Cc: "gcc at gcc dot gnu dot org" <gcc at gcc dot gnu dot org>
- Date: Fri, 8 Mar 2013 01:11:44 -0800
- Subject: Re: g++ member function .at() for arrays
- References: <5139A463.4050706@firstpr.com.au>
On Fri, Mar 8, 2013 at 12:42 AM, Robin Whittle <rw@firstpr.com.au> wrote:
> I am a newbie to this list. Thanks for GCC, g++ the C++ standard
> library and GDB! Apologies in advance if I have missed a web page where
> this question is answered. Perhaps this question belongs on the
> libstdc++ list.
It doesn't belong to gcc@gcc.gnu.org, which is for discussion of the
development of the compiler. The user support list is
gcc-help@gcc.gnu.org. As your question is really more about C++ than
about GCC, you might also try a generic C++ forum.
> With g++ 4:4.7.2-1 and libstdc++6 4.7.2-4, installed on 64 bit Debian,
> using the -std=c++11 compiler option, I attempted to compile code such as:
>
> aa1.at(1) = aa1.at(2) + aa1.at(3);
> cout << aa1.size() << endl;
>
> where aa1 is an array of ints. The error message was:
>
> error: request for member 'at' in 'aa1', which is of
> non-class type 'int [4]'.
>
> Yet these lines for vectors and deques:
>
> vv1.at(1) = vv1.at(2) + vv1.at(3);
> dd1.at(1) = dd1.at(2) + dd1.at(3);
>
> compiled and worked fine. Both of these lines were implemented with
> bounds checking.
>
> According to my understanding of the near-final draft standard
> n3242-1.pdf, page 729, in the last item of Table 101, the member
> function at() should provide bounds checked access to:
>
> basic_string, string, array, deque and vector.
>
> As far as I can tell, this does not work for arrays in 4.7.2. Am I
> missing a compiler option?
No, but you do need to read about the difference between (buiilt-in)
arrays and instances of std::array types. std::array has at; built-in
arrays such as int[4] do not have member functions (only classes do).
-- James