<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[const-correctness 2-dim member array]]></title><description><![CDATA[<p>Hallo alle,</p>
<p>bin leider C++ Kackb00n, wollte mir aus Jux aber doch mal eine billo Matrixklasse basteln. Ich weiß, dass es a) dafür etliche Bibliotheken und b) mit std::vector / std::array weniger Tränen gibt; mir geht es hier konkret um grundsätzliches Verständnis.</p>
<pre><code>#include &lt;cstddef&gt;
#include &lt;iostream&gt;

using std::cout;
using std::size_t;

template &lt;typename T, size_t N&gt;
struct Matrix
{
    T data[N][N];

    T const (&amp;(operator[])(size_t idx))[N] /*const*/
    {
        return data[idx];
    }
};

int main() 
{ 
    Matrix&lt;int, 3&gt; e = {1, 0, 0, 0, 1, 0, 0, 0, 1};

    cout &lt;&lt; e[0][0]; // ok

    const auto&amp; ce = e;
    //cout &lt;&lt; ce[0][0]; // error
}
</code></pre>
<p>Kann ich operator[] als const markieren? Wenn ich es so mache, wie im code angedeutet, bekomme ich folgenden Fehler:</p>
<pre><code>12:42: error: expected ‘;’ at end of member declaration
     T const (&amp;(operator[])(size_t idx))[N] const
                                          ^
13:5: error: expected unqualified-id before ‘{’ token
</code></pre>
<p>Ich vermute, dass durch die mehrfache Indirektion das const irgendwo verloren geht. Geht das grundsätzlich nicht oder habe ich bloß syntaktisch daneben gehauen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/327310/const-correctness-2-dim-member-array</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Jul 2026 11:43:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/327310.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 03 Aug 2014 16:04:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to const-correctness 2-dim member array on Sun, 03 Aug 2014 16:04:51 GMT]]></title><description><![CDATA[<p>Hallo alle,</p>
<p>bin leider C++ Kackb00n, wollte mir aus Jux aber doch mal eine billo Matrixklasse basteln. Ich weiß, dass es a) dafür etliche Bibliotheken und b) mit std::vector / std::array weniger Tränen gibt; mir geht es hier konkret um grundsätzliches Verständnis.</p>
<pre><code>#include &lt;cstddef&gt;
#include &lt;iostream&gt;

using std::cout;
using std::size_t;

template &lt;typename T, size_t N&gt;
struct Matrix
{
    T data[N][N];

    T const (&amp;(operator[])(size_t idx))[N] /*const*/
    {
        return data[idx];
    }
};

int main() 
{ 
    Matrix&lt;int, 3&gt; e = {1, 0, 0, 0, 1, 0, 0, 0, 1};

    cout &lt;&lt; e[0][0]; // ok

    const auto&amp; ce = e;
    //cout &lt;&lt; ce[0][0]; // error
}
</code></pre>
<p>Kann ich operator[] als const markieren? Wenn ich es so mache, wie im code angedeutet, bekomme ich folgenden Fehler:</p>
<pre><code>12:42: error: expected ‘;’ at end of member declaration
     T const (&amp;(operator[])(size_t idx))[N] const
                                          ^
13:5: error: expected unqualified-id before ‘{’ token
</code></pre>
<p>Ich vermute, dass durch die mehrfache Indirektion das const irgendwo verloren geht. Geht das grundsätzlich nicht oder habe ich bloß syntaktisch daneben gehauen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411776</guid><dc:creator><![CDATA[Monty aus Alberta]]></dc:creator><pubDate>Sun, 03 Aug 2014 16:04:51 GMT</pubDate></item><item><title><![CDATA[Reply to const-correctness 2-dim member array on Sun, 03 Aug 2014 16:06:54 GMT]]></title><description><![CDATA[<p>Was soll das werden?<br />
Ueberlade doch viel lieber den () operator oder biete gleich eine Memberfunktion an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411777</guid><dc:creator><![CDATA[Marthog]]></dc:creator><pubDate>Sun, 03 Aug 2014 16:06:54 GMT</pubDate></item><item><title><![CDATA[Reply to const-correctness 2-dim member array on Sun, 03 Aug 2014 16:10:44 GMT]]></title><description><![CDATA[<pre><code>T const (&amp;(operator[])(size_t idx))[N] const
</code></pre>
<p>-&gt;</p>
<pre><code>T const (&amp;(operator[])(size_t idx) const)[N]
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2411778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411778</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Sun, 03 Aug 2014 16:10:44 GMT</pubDate></item><item><title><![CDATA[Reply to const-correctness 2-dim member array on Sun, 03 Aug 2014 16:21:48 GMT]]></title><description><![CDATA[<p>Kellerautomat schrieb:</p>
<blockquote>
<pre><code>T const (&amp;(operator[])(size_t idx))[N] const
</code></pre>
<p>-&gt;</p>
<pre><code>T const (&amp;(operator[])(size_t idx) const)[N]
</code></pre>
</blockquote>
<p>Danke, lieber Kellerautomat, das habe ich gesucht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411782</guid><dc:creator><![CDATA[Monty aus Alberta]]></dc:creator><pubDate>Sun, 03 Aug 2014 16:21:48 GMT</pubDate></item><item><title><![CDATA[Reply to const-correctness 2-dim member array on Sun, 03 Aug 2014 17:15:50 GMT]]></title><description><![CDATA[<p>Warum nicht</p>
<pre><code>auto operator[]( std::size_t idx ) const -&gt; decltype((*data))
{
	return data[idx];
}
</code></pre>
<p>(Hier zeigt sich übrigens wieder eine Stärke von <code>AUTO_RETURN</code> - dass es nämlich Wertkategorien beachtet)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411784</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411784</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sun, 03 Aug 2014 17:15:50 GMT</pubDate></item></channel></rss>