<?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[Frage zu generischen Standartwert...]]></title><description><![CDATA[<p>Hallo,</p>
<p>folgende Frage die sich mir stellte...</p>
<p>Wenn ich z.B. eine Funktion hab wie</p>
<pre><code class="language-cpp">T&amp; Test::operator[](int idx){
   if(idx&lt;=size)
      return daten[idx];
}
</code></pre>
<p>Und ich im falle eines zu hohen Index einen Dummy zurück geben will alla:</p>
<pre><code class="language-cpp">T&amp; Test::operator[](int idx){
   static T dummy;
   if(idx&lt;=size)
      return daten[idx];

   return dummy;
}
</code></pre>
<p>sollte man ihn dann, da static, un-initialisiert lassen oder kann/sollte man ihn irgendwie initialisieren? Mein Ansatz war in diesem Falle</p>
<pre><code class="language-cpp">T&amp; Test::operator[](int idx){
   static T dummy = T();
   if(idx&lt;=size)
      return daten[idx];

   return dummy;
}
</code></pre>
<p>wobei ich davon Ausgehe, dass ein Standardkonstruktor für das zu haltende Element existert... (Es soll leider keine Exception geworfen werden, daher kein OutOfBound Exception Fall o.ä....)</p>
<p>Jetzt allerdings die Frage, ist für Standard Datentypen überhaupt IMMER ein &quot;Konstruktor&quot; definiert oder klappt das ganze nur mit Compilern, die mit sowas klar komme, wie z.B. gcc?</p>
<p>Hoffe auf eine Antwort und hoffe auch dass die Frage nicht allzu &quot;dumm&quot; klingt...</p>
<p>MFG<br />
Blackskyliner</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/267185/frage-zu-generischen-standartwert</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 11:53:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/267185.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 20 May 2010 08:51:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu generischen Standartwert... on Thu, 20 May 2010 08:51:59 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>folgende Frage die sich mir stellte...</p>
<p>Wenn ich z.B. eine Funktion hab wie</p>
<pre><code class="language-cpp">T&amp; Test::operator[](int idx){
   if(idx&lt;=size)
      return daten[idx];
}
</code></pre>
<p>Und ich im falle eines zu hohen Index einen Dummy zurück geben will alla:</p>
<pre><code class="language-cpp">T&amp; Test::operator[](int idx){
   static T dummy;
   if(idx&lt;=size)
      return daten[idx];

   return dummy;
}
</code></pre>
<p>sollte man ihn dann, da static, un-initialisiert lassen oder kann/sollte man ihn irgendwie initialisieren? Mein Ansatz war in diesem Falle</p>
<pre><code class="language-cpp">T&amp; Test::operator[](int idx){
   static T dummy = T();
   if(idx&lt;=size)
      return daten[idx];

   return dummy;
}
</code></pre>
<p>wobei ich davon Ausgehe, dass ein Standardkonstruktor für das zu haltende Element existert... (Es soll leider keine Exception geworfen werden, daher kein OutOfBound Exception Fall o.ä....)</p>
<p>Jetzt allerdings die Frage, ist für Standard Datentypen überhaupt IMMER ein &quot;Konstruktor&quot; definiert oder klappt das ganze nur mit Compilern, die mit sowas klar komme, wie z.B. gcc?</p>
<p>Hoffe auf eine Antwort und hoffe auch dass die Frage nicht allzu &quot;dumm&quot; klingt...</p>
<p>MFG<br />
Blackskyliner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1900033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1900033</guid><dc:creator><![CDATA[Blackskyliner]]></dc:creator><pubDate>Thu, 20 May 2010 08:51:59 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu generischen Standartwert... on Thu, 20 May 2010 09:03:17 GMT]]></title><description><![CDATA[<p>Das macht nur Sinn, wenn es einen Wert für dummy gibt, der sonst garantiert nicht als Datum vorkommt. Wenn es den nicht gibt, solltest du hier ein assert einbauen.</p>
<p>Und ja, der &quot;Standardkonstruktor&quot; der eingebauten Typen initialisieren die Variable mit 0. Das ist vom Standard garantiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1900042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1900042</guid><dc:creator><![CDATA[Athar]]></dc:creator><pubDate>Thu, 20 May 2010 09:03:17 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu generischen Standartwert... on Thu, 20 May 2010 18:26:58 GMT]]></title><description><![CDATA[<p>Das halte ich generell für eine schlechte Idee. Die Konvention, dass ein defaultkonstruierter (bzw. bei PODs null-initialisierter) Wert einem Dummy entspricht, kannst du nicht konsistent durchziehen. Schliesslich gibt es eine grosse Menge an Datentypen, deren Standardwert ein gültiger Wert repräsentiert.</p>
<p>Überhaupt würde ich vorsichtig sein. Ein falscher Index ist oft ein Programmierfehler; ein Fortfahren des Programms verschlimmert Logikfehler nur. Überlege dir gut, ob nicht <code>assert</code> eine Möglichkeit wäre.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1900364</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1900364</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 20 May 2010 18:26:58 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu generischen Standartwert... on Tue, 25 May 2010 18:35:30 GMT]]></title><description><![CDATA[<p>Wie gesagt... Es ist halt so vorgegeben, dass man es so zurück geben soll, daher die Frage gewesen wie man den Dummy am gescheitesten generisch definiert.</p>
<p>Danke für die Antworten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1902447</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902447</guid><dc:creator><![CDATA[Blackskyliner]]></dc:creator><pubDate>Tue, 25 May 2010 18:35:30 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu generischen Standartwert... on Tue, 25 May 2010 22:19:14 GMT]]></title><description><![CDATA[<p>Nimm einen Pointer anstelle eines Objektes und gib im &quot;Fehlerfall&quot; NULL zurück.</p>
<pre><code class="language-cpp">T* Test::operator[](int idx){
  if (idx &lt;= size)
    return &amp;daten[idx];

  return NULL;
}
</code></pre>
<p>Wenn es aber Objekte sein sollen dann entweder wirklich ein Objekt mit einem ungültigen Wert zurückgeben, boost::optional, std::pair&lt; bool, T &gt; (wobei first true wenn gültig, sonst false, und second der rückgabewert) oder Exception werfen (gibt in diesem Falle aber nix zurück, wäre aber imho die beste Lösung da sowas bekanntlich ein std::out_of_range wäre (siehe std::vector&lt; T &gt; Implementierung)).</p>
<p>Gut Schuß<br />
VuuRWerK <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1902536</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902536</guid><dc:creator><![CDATA[VuuRWerK]]></dc:creator><pubDate>Tue, 25 May 2010 22:19:14 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu generischen Standartwert... on Tue, 25 May 2010 22:23:30 GMT]]></title><description><![CDATA[<p>Static wäre mir zu heiß. Wenn es denn unbedingt sein müßte, würde ich vielleicht ein Element mehr allokieren.</p>
<pre><code class="language-cpp">T&amp; Test::operator[](int idx){
   if(idx&lt;size)
      return daten[idx];
   else
      return daten[size];
}
</code></pre>
<p>Aber ich kann's mir auch nicht vorstellen, daß das sinnvoll ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1902537</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902537</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 25 May 2010 22:23:30 GMT</pubDate></item></channel></rss>