<?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[code standardgemäs?]]></title><description><![CDATA[<p>hi</p>
<p>kann sich irgend ein erfahrener user diesen code anschauen?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
class container
{
  float val;
  public:
    container(float value):val(value){}
    operator float&amp;()
    {return val;}
    operator float() const
    {return val;}
};
class access;
access foo(container&amp;);
const access foo(const container&amp;);
class access
{
  friend access foo(container&amp;);
  friend const access foo(const container&amp;);
  explicit access(float&amp; target, float mult = 1.0f)
  : target(target)
  {
    this-&gt;mult = mult;
  }
  float&amp; target;
  float mult;
  public:
    access&amp; operator= (float value)
    {
      target = value * mult;
      return *this;
    }
    operator float&amp;()
    {
      return target;
    }
    operator const float() const
    {
      return target / mult;
    }
};
access foo(container&amp; data)
{
  return access(static_cast&lt;float&amp;&gt;(data), 10.0f);
}
const access foo(const container&amp; data)
{
  return access(static_cast&lt;float&amp;&gt;(const_cast&lt;container&amp;&gt;(data)), 10.0f);
}
int main()
{
  container data = 3.0f;
  foo(data) = 0.5f; //data sollte nun 50 sein
  std::cout &lt;&lt; foo(data); //sollte 5 ausgeben
}
</code></pre>
<p>ich versuchte ihn bei vier compilern:<br />
gcc 4.3.4 fail<br />
codegear c++ builder fail<br />
visual c++ 2008 good<br />
comeau c++ 4.3.9 good</p>
<p>bitte helft mir<br />
danke im vorraus<br />
mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/289106/code-standardgemäs</link><generator>RSS for Node</generator><lastBuildDate>Wed, 19 Aug 2026 08:53:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/289106.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 28 Jun 2011 18:26:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to code standardgemäs? on Tue, 28 Jun 2011 18:26:01 GMT]]></title><description><![CDATA[<p>hi</p>
<p>kann sich irgend ein erfahrener user diesen code anschauen?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
class container
{
  float val;
  public:
    container(float value):val(value){}
    operator float&amp;()
    {return val;}
    operator float() const
    {return val;}
};
class access;
access foo(container&amp;);
const access foo(const container&amp;);
class access
{
  friend access foo(container&amp;);
  friend const access foo(const container&amp;);
  explicit access(float&amp; target, float mult = 1.0f)
  : target(target)
  {
    this-&gt;mult = mult;
  }
  float&amp; target;
  float mult;
  public:
    access&amp; operator= (float value)
    {
      target = value * mult;
      return *this;
    }
    operator float&amp;()
    {
      return target;
    }
    operator const float() const
    {
      return target / mult;
    }
};
access foo(container&amp; data)
{
  return access(static_cast&lt;float&amp;&gt;(data), 10.0f);
}
const access foo(const container&amp; data)
{
  return access(static_cast&lt;float&amp;&gt;(const_cast&lt;container&amp;&gt;(data)), 10.0f);
}
int main()
{
  container data = 3.0f;
  foo(data) = 0.5f; //data sollte nun 50 sein
  std::cout &lt;&lt; foo(data); //sollte 5 ausgeben
}
</code></pre>
<p>ich versuchte ihn bei vier compilern:<br />
gcc 4.3.4 fail<br />
codegear c++ builder fail<br />
visual c++ 2008 good<br />
comeau c++ 4.3.9 good</p>
<p>bitte helft mir<br />
danke im vorraus<br />
mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2085617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2085617</guid><dc:creator><![CDATA[lol_of_lolcraft]]></dc:creator><pubDate>Tue, 28 Jun 2011 18:26:01 GMT</pubDate></item><item><title><![CDATA[Reply to code standardgemäs? on Tue, 28 Jun 2011 18:45:18 GMT]]></title><description><![CDATA[<p>lol_of_lolcraft schrieb:</p>
<blockquote>
<p>hi</p>
<p>kann sich irgend ein erfahrener user diesen code anschauen?</p>
</blockquote>
<p>Klar. Erledigt.</p>
<p>Vielleicht fehlt noch eine Frage deinerseits, und die Compilerfehlermeldung an Stelle eines &quot;fail&quot; wäre klasse. Siehe auch Link in meiner Signatur.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2085633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2085633</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 28 Jun 2011 18:45:18 GMT</pubDate></item><item><title><![CDATA[Reply to code standardgemäs? on Tue, 28 Jun 2011 18:56:49 GMT]]></title><description><![CDATA[<p>na ist der code nun standardgemäs?<br />
gcc mault:</p>
<blockquote>
<p>prog.cpp:13: error: ‘access’ does not name a type<br />
prog.cpp:14: error: ‘access’ does not name a type<br />
prog.cpp:41: error: ‘access’ does not name a type<br />
prog.cpp:45: error: ‘access’ does not name a type<br />
prog.cpp: In function ‘int main()’:<br />
prog.cpp:52: error: ‘foo’ was not declared in this scope</p>
</blockquote>
<p>und codegear mault wegen mehrdeutigkeit in zeile 53.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2085638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2085638</guid><dc:creator><![CDATA[lol_of_lolcraft]]></dc:creator><pubDate>Tue, 28 Jun 2011 18:56:49 GMT</pubDate></item><item><title><![CDATA[Reply to code standardgemäs? on Tue, 28 Jun 2011 18:59:21 GMT]]></title><description><![CDATA[<p>So komisch das klingen mag: Wenn ich die Klasse anders nenne funktioniert es. Aber frag mich nicht warum, ich kenne kein Schlüsselwort, das so heißt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2085641</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2085641</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 28 Jun 2011 18:59:21 GMT</pubDate></item><item><title><![CDATA[Reply to code standardgemäs? on Tue, 28 Jun 2011 19:01:30 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> Mann, was läuft denn da ab?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2085644</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2085644</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Tue, 28 Jun 2011 19:01:30 GMT</pubDate></item><item><title><![CDATA[Reply to code standardgemäs? on Tue, 28 Jun 2011 19:11:00 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>So komisch das klingen mag: Wenn ich die Klasse anders nenne funktioniert es. Aber frag mich nicht warum, ich kenne kein Schlüsselwort, das so heißt.</p>
</blockquote>
<p>Scheint so, als gäbs das Problem <a href="http://bytes.com/topic/c/answers/439743-close-reserved-word-c" rel="nofollow">schon länger</a>. In deinem Fall wahrscheinlich ein Problem mit <a href="http://www.manpagez.com/man/2/access/" rel="nofollow">access()</a>, das aus einem Header automatisch eingebunden und in den globalen Namensraum gestellt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2085658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2085658</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 28 Jun 2011 19:11:00 GMT</pubDate></item><item><title><![CDATA[Reply to code standardgemäs? on Tue, 28 Jun 2011 19:17:08 GMT]]></title><description><![CDATA[<p>Für das gibt's namespaces.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2085663</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2085663</guid><dc:creator><![CDATA[guy]]></dc:creator><pubDate>Tue, 28 Jun 2011 19:17:08 GMT</pubDate></item><item><title><![CDATA[Reply to code standardgemäs? on Tue, 28 Jun 2011 19:23:04 GMT]]></title><description><![CDATA[<p>und wieso gibt codegear c++ builder einen fehler aus? er kann sich nicht zwischen den beiden ausgabeoperatoren (double, long double) entscheiden. wenn ich den konstanten konvertierungsoperator entferne gehts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2085669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2085669</guid><dc:creator><![CDATA[lol_of_lolcraft]]></dc:creator><pubDate>Tue, 28 Jun 2011 19:23:04 GMT</pubDate></item><item><title><![CDATA[Reply to code standardgemäs? on Tue, 28 Jun 2011 19:28:16 GMT]]></title><description><![CDATA[<p>lol_of_lolcraft schrieb:</p>
<blockquote>
<p>und wieso gibt codegear c++ builder einen fehler aus? er kann sich nicht zwischen den beiden ausgabeoperatoren (double, long double) entscheiden. wenn ich den konstanten konvertierungsoperator entferne gehts.</p>
</blockquote>
<p>Welche doubles und long doubles denn jetzt? Ich sehe überall nur floats. Und was sagt er genau?</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>So komisch das klingen mag: Wenn ich die Klasse anders nenne funktioniert es. Aber frag mich nicht warum, ich kenne kein Schlüsselwort, das so heißt.</p>
</blockquote>
<p>Scheint so, als gäbs das Problem <a href="http://bytes.com/topic/c/answers/439743-close-reserved-word-c" rel="nofollow">schon länger</a>. In deinem Fall wahrscheinlich ein Problem mit <a href="http://www.manpagez.com/man/2/access/" rel="nofollow">access()</a>, das aus einem Header automatisch eingebunden und in den globalen Namensraum gestellt wird.</p>
</blockquote>
<p>Ach nö. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /> Das ist ja wohl nicht wahr. Ist das eigentlich vom Standard erlaubt, dass die Implementierung den globalen Namensraum verseucht (Abgesehen von reservierten Bezeichnern)? Und dazu dann noch so eine unklare Fehlermeldung. Ein Fehler der auf eine widersprüchliche Deklaration hinweist hätte alles sofort klar gemacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2085674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2085674</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 28 Jun 2011 19:28:16 GMT</pubDate></item><item><title><![CDATA[Reply to code standardgemäs? on Tue, 28 Jun 2011 22:38:54 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>lol_of_lolcraft schrieb:</p>
<blockquote>
<p>und wieso gibt codegear c++ builder einen fehler aus? er kann sich nicht zwischen den beiden ausgabeoperatoren (double, long double) entscheiden. wenn ich den konstanten konvertierungsoperator entferne gehts.</p>
</blockquote>
<p>Welche doubles und long doubles denn jetzt? Ich sehe überall nur floats. Und was sagt er genau?</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>So komisch das klingen mag: Wenn ich die Klasse anders nenne funktioniert es. Aber frag mich nicht warum, ich kenne kein Schlüsselwort, das so heißt.</p>
</blockquote>
<p>Scheint so, als gäbs das Problem <a href="http://bytes.com/topic/c/answers/439743-close-reserved-word-c" rel="nofollow">schon länger</a>. In deinem Fall wahrscheinlich ein Problem mit <a href="http://www.manpagez.com/man/2/access/" rel="nofollow">access()</a>, das aus einem Header automatisch eingebunden und in den globalen Namensraum gestellt wird.</p>
</blockquote>
<p>Ach nö. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /> Das ist ja wohl nicht wahr. Ist das eigentlich vom Standard erlaubt, dass die Implementierung den globalen Namensraum verseucht (Abgesehen von reservierten Bezeichnern)? Und dazu dann noch so eine unklare Fehlermeldung. Ein Fehler der auf eine widersprüchliche Deklaration hinweist hätte alles sofort klar gemacht.</p>
</blockquote>
<p>Mit C++0x wird es vermutlich besser werden, ich denke genau aus diesem Grund ist der Namensraum posix dann reserviert (hab mir das paper dazu aber nicht angesehen). Dann soll offenbar der Ganze posix Kram in diesn Namensraum wandern. Bevor es soweit ist, werden wir wohl mit derartigen Verschmutzungen rechnen müssen... aber der globale Namensraum war da ja schon immer anfällig. Das Ganze im gcc von jetzt auf gleich zu korrigieren dürfte vermutlich mit einem Mal eine gewaltige Menge an Code kaputtmachen, also vermute ich mal, dass das nach und nach passiert, so wie in der Vergangenheit die Standardheader mit jeder Version mehr entrümpelt wurden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2085788</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2085788</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 28 Jun 2011 22:38:54 GMT</pubDate></item><item><title><![CDATA[Reply to code standardgemäs? on Wed, 29 Jun 2011 07:41:26 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Ach nö. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /> Das ist ja wohl nicht wahr. Ist das eigentlich vom Standard erlaubt, dass die Implementierung den globalen Namensraum verseucht (Abgesehen von reservierten Bezeichnern)? Und dazu dann noch so eine unklare Fehlermeldung. Ein Fehler der auf eine widersprüchliche Deklaration hinweist hätte alles sofort klar gemacht.</p>
</blockquote>
<p>Der Standard enthält dazu keine explizite Regelung, man kann höchstens aus der Existenz reservierter Bezeichner herauslesen, dass solche Verschmutzung nicht gewollt ist. In der Praxis muss man allerdings damit rechnen, dass so etwas passiert bzw. man ein paar Schrauben drehen muss, um es zu verhindern.</p>
<p>Konkret versucht gcc, es zu verhindern, wenn auf der Kommandozeile -ansi übergeben wird; das führt dazu, dass verschiedene __USE-Makros nicht definiert werden und glibc große Teile von Headerdateien auslässt. Ich vermute, dass es in diesem konkreten Fall das Problem lösen dürfte.</p>
<p>Trotzdem wäre die Benutzung eines eigenen Namensraumes eine gute Idee.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2085850</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2085850</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Wed, 29 Jun 2011 07:41:26 GMT</pubDate></item></channel></rss>