<?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[obj.Length == 0 or obj.Length() == 0]]></title><description><![CDATA[<p>z.B. ich benutze eine Methode aus irgendeiner String Class(nicht STL), hier Length()<br />
es sollte mir einen Int-wert zurückliefern, dann von aussen checke ich ob es null ist, etwa so:</p>
<pre><code class="language-cpp">if (obj.Length() == 0)
{
   ...
}
else
{
   ...
}
</code></pre>
<p>aus Versehen habe ich die beiden Klammen vergessen, aber der Compiler(nicht unbedingt ms c++ Compiler) gibt keine Warning und Error aus.<br />
ich habe mal rumgefragt, jemand hat mir erklärt, weil die Funktion keine Paramether besitzt, dann kann man auch so schreiben, weil obj.Length ist eben eine Funktionspointer, was auf Length() zeigt, ist es so? und ist diese Schreibweise Compiler abhängig? ist es überhaupt c++ standard?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/158820/obj-length-0-or-obj-length-0</link><generator>RSS for Node</generator><lastBuildDate>Thu, 10 Sep 2026 03:15:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/158820.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 08 Sep 2006 18:37:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to obj.Length == 0 or obj.Length() == 0 on Fri, 08 Sep 2006 18:37:07 GMT]]></title><description><![CDATA[<p>z.B. ich benutze eine Methode aus irgendeiner String Class(nicht STL), hier Length()<br />
es sollte mir einen Int-wert zurückliefern, dann von aussen checke ich ob es null ist, etwa so:</p>
<pre><code class="language-cpp">if (obj.Length() == 0)
{
   ...
}
else
{
   ...
}
</code></pre>
<p>aus Versehen habe ich die beiden Klammen vergessen, aber der Compiler(nicht unbedingt ms c++ Compiler) gibt keine Warning und Error aus.<br />
ich habe mal rumgefragt, jemand hat mir erklärt, weil die Funktion keine Paramether besitzt, dann kann man auch so schreiben, weil obj.Length ist eben eine Funktionspointer, was auf Length() zeigt, ist es so? und ist diese Schreibweise Compiler abhängig? ist es überhaupt c++ standard?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1133882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1133882</guid><dc:creator><![CDATA[netrobot]]></dc:creator><pubDate>Fri, 08 Sep 2006 18:37:07 GMT</pubDate></item><item><title><![CDATA[Reply to obj.Length == 0 or obj.Length() == 0 on Fri, 08 Sep 2006 18:41:59 GMT]]></title><description><![CDATA[<p>obj.Length ist tatsächlich ein Funktionspointer (hmm oder nennt man das in dem Fall einen Methodenpointer?). Naja auf jeden Fall rufst du hier nicht wie aus manch anderen Programmiersprachen gewohnt Length() auf - dein Ergebnis ist ohne Klammern nicht das Gewünschte.</p>
<p>Edit: Es sei denn diese String-Klasse von dir besitzt ein Public-Attribut &quot;Length&quot;. Das glaube ich dann aber doch nicht. Falls Length eine Methode ist, ist das auszuschließen imho.</p>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1133883</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1133883</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Fri, 08 Sep 2006 18:41:59 GMT</pubDate></item><item><title><![CDATA[Reply to obj.Length == 0 or obj.Length() == 0 on Fri, 08 Sep 2006 18:46:13 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>also beim GNU-Compiler kommt bei sowas die Fehlermeldung : <em>invalid use of member</em>.<br />
Aber selbst wenn es kompiliert macht es bestimmt nicht was du erwartest, nämlich die Methode ausführen. Wenn Length ein Funktionspointer wäre, wäre das ja noch korrekt, aber einer Methode an sich kann kein Wert zugewiesen werden.<br />
Die Klammern gehören einfach syntaktisch dahin.</p>
<p>/Edit : zu langsam... Test hat zu lange gedauert.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1133887</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1133887</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Fri, 08 Sep 2006 18:46:13 GMT</pubDate></item><item><title><![CDATA[Reply to obj.Length == 0 or obj.Length() == 0 on Fri, 08 Sep 2006 19:07:26 GMT]]></title><description><![CDATA[<blockquote>
<p>obj.Length ist tatsächlich ein Funktionspointer...<br />
dein Ergebnis ist ohne Klammern nicht das Gewünschte.</p>
</blockquote>
<blockquote>
<p>Wenn Length ein Funktionspointer wäre, wäre das ja noch korrekt</p>
</blockquote>
<p>?????</p>
<blockquote>
<p>Edit: Es sei denn diese String-Klasse von dir besitzt ein Public-Attribut &quot;Length&quot;. Das glaube ich dann aber doch nicht. Falls Length eine Methode ist, ist das auszuschließen ...</p>
</blockquote>
<p>es gibt kein Attribute &quot;Length&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1133906</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1133906</guid><dc:creator><![CDATA[netrobot]]></dc:creator><pubDate>Fri, 08 Sep 2006 19:07:26 GMT</pubDate></item><item><title><![CDATA[Reply to obj.Length == 0 or obj.Length() == 0 on Fri, 08 Sep 2006 19:12:33 GMT]]></title><description><![CDATA[<p>Korrekt im Sinne von &quot;die Syntax ist korrekt&quot;. Es wird getestet ob die Adresse der Funktion Length == 0x0 ist. Allerdings wird die Funktion Length nicht aufgerufen.</p>
<p>Syntax ok.<br />
Semantik falsch.</p>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1133915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1133915</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Fri, 08 Sep 2006 19:12:33 GMT</pubDate></item><item><title><![CDATA[Reply to obj.Length == 0 or obj.Length() == 0 on Fri, 08 Sep 2006 19:14:41 GMT]]></title><description><![CDATA[<p>dann habe ich wieder was getestet</p>
<pre><code class="language-cpp">int a = (int)obj.Length;
</code></pre>
<p>es klappt nicht, wieso?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1133919</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1133919</guid><dc:creator><![CDATA[netrobot]]></dc:creator><pubDate>Fri, 08 Sep 2006 19:14:41 GMT</pubDate></item><item><title><![CDATA[Reply to obj.Length == 0 or obj.Length() == 0 on Fri, 08 Sep 2006 19:16:09 GMT]]></title><description><![CDATA[<p>und</p>
<pre><code class="language-cpp">if (obj.Length == 0)
</code></pre>
<p>es wird ja niemals erfüllt, nicht wahr?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1133921</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1133921</guid><dc:creator><![CDATA[netrobot]]></dc:creator><pubDate>Fri, 08 Sep 2006 19:16:09 GMT</pubDate></item><item><title><![CDATA[Reply to obj.Length == 0 or obj.Length() == 0 on Fri, 08 Sep 2006 19:25:00 GMT]]></title><description><![CDATA[<p>zu 1. Weil sich Pointer-to-Member niemals in integrale Typen casten lassen.<br />
zu 2. Ja.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1133931</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1133931</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 08 Sep 2006 19:25:00 GMT</pubDate></item><item><title><![CDATA[Reply to obj.Length == 0 or obj.Length() == 0 on Fri, 08 Sep 2006 19:36:12 GMT]]></title><description><![CDATA[<p>aber wenn obj.Length nur eine Adresse ist, wieso kann es nicht zu einem Int gecastet werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1133944</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1133944</guid><dc:creator><![CDATA[netrobot]]></dc:creator><pubDate>Fri, 08 Sep 2006 19:36:12 GMT</pubDate></item><item><title><![CDATA[Reply to obj.Length == 0 or obj.Length() == 0 on Fri, 08 Sep 2006 22:38:23 GMT]]></title><description><![CDATA[<p>netrobot schrieb:</p>
<blockquote>
<p>und</p>
<pre><code class="language-cpp">if (obj.Length == 0)
</code></pre>
<p>es wird ja niemals erfüllt, nicht wahr?</p>
</blockquote>
<p>Naja, wenn du Length als rein virtuelle Methode definierst (was hier ja keinen Sinn macht...ist auch nur hypotetisch) und sie statisch wär (also die Klasse in der Length definiert wär, abstrakt wär), schon.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1134020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1134020</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Fri, 08 Sep 2006 22:38:23 GMT</pubDate></item><item><title><![CDATA[Reply to obj.Length == 0 or obj.Length() == 0 on Fri, 08 Sep 2006 23:55:09 GMT]]></title><description><![CDATA[<p>CodeFinder schrieb:</p>
<blockquote>
<p>netrobot schrieb:</p>
<blockquote>
<p>und</p>
<pre><code class="language-cpp">if (obj.Length == 0)
</code></pre>
<p>es wird ja niemals erfüllt, nicht wahr?</p>
</blockquote>
<p>Naja, wenn du Length als rein virtuelle Methode definierst (was hier ja keinen Sinn macht...ist auch nur hypotetisch) und sie statisch wär (also die Klasse in der Length definiert wär, abstrakt wär), schon.</p>
</blockquote>
<pre><code class="language-cpp">class Base
{
  public:
        void foo() = 0;
};
class Derived : public Base
{
   public:
      void foo(){};
}

Base *B = new Derived; //or Derived *D = new Derived;
B-&gt;foo(); //or D-&gt;foo();
</code></pre>
<p>hier foo ist nicht 0</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1134058</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1134058</guid><dc:creator><![CDATA[netrobot]]></dc:creator><pubDate>Fri, 08 Sep 2006 23:55:09 GMT</pubDate></item><item><title><![CDATA[Reply to obj.Length == 0 or obj.Length() == 0 on Fri, 08 Sep 2006 23:59:38 GMT]]></title><description><![CDATA[<p>hier gehts eigentlich nicht um virtuale funktionen,sondern wieso</p>
<pre><code class="language-cpp">int a = (int)obj.Length;
</code></pre>
<p>klappt nicht, wenn obj.Length ist ein Funktionszeiger(Adress), kann ich natürlich auch zu int casten, die sind alle 32 bits lang</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1134062</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1134062</guid><dc:creator><![CDATA[netrobot]]></dc:creator><pubDate>Fri, 08 Sep 2006 23:59:38 GMT</pubDate></item><item><title><![CDATA[Reply to obj.Length == 0 or obj.Length() == 0 on Sat, 09 Sep 2006 09:09:17 GMT]]></title><description><![CDATA[<p>netrobot schrieb:</p>
<blockquote>
<p>z.B. ich benutze eine Methode aus irgendeiner String Class(nicht STL), hier Length()<br />
es sollte mir einen Int-wert zurückliefern, dann von aussen checke ich ob es null ist, etwa so:</p>
<pre><code class="language-cpp">if (obj.Length() == 0)
{
   ...
}
else
{
   ...
}
</code></pre>
<p>aus Versehen habe ich die beiden Klammen vergessen, aber der Compiler(nicht unbedingt ms c++ Compiler) gibt keine Warning und Error aus.<br />
ich habe mal rumgefragt, jemand hat mir erklärt, weil die Funktion keine Paramether besitzt, dann kann man auch so schreiben, weil obj.Length ist eben eine Funktionspointer, was auf Length() zeigt, ist es so? und ist diese Schreibweise Compiler abhängig? ist es überhaupt c++ standard?</p>
</blockquote>
<p>nur wenn Length eine statische memberfunktion ist, kann obj.Length so verwendet werden. in diesem falle bewirkt der == operator zunächst eine konvertierung in einen funktionspointer, und der folgende vergleich mit 0 wird natürlich niemals wahr sein. falls Length nicht statisch ist (und davon kann man wohl ausgehen), dann ist der ausdruck obj.Length ein rvalue (eines im standard spezifizierten typs, was uns aber nicht interessieren muss, dann diesen typ kann man nicht selbst deklarieren). dieser ausdruck darf nur dazu benutzt werden, um einen funktionsaufruf (per () ) durchzuführen. jede andere verwendung ist nicht standardkonform (5.2.5/4).<br />
verschiedene compiler besitzen hier spracherweiterungen - ms vc++ bis version 7.1 behandeln diesen ausdruck wie einen pointer (einen korrekten aufruf könnte man wohl aber nur mittels assembler realisieren). auch der borland compiler besitzt meines wissens eine vergleichbare erweiterung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1134117</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1134117</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 09 Sep 2006 09:09:17 GMT</pubDate></item><item><title><![CDATA[Reply to obj.Length == 0 or obj.Length() == 0 on Sat, 09 Sep 2006 11:08:14 GMT]]></title><description><![CDATA[<p>netrobot schrieb:</p>
<blockquote>
<p>CodeFinder schrieb:</p>
<blockquote>
<p>netrobot schrieb:</p>
<blockquote>
<p>und</p>
<pre><code class="language-cpp">if (obj.Length == 0)
</code></pre>
<p>es wird ja niemals erfüllt, nicht wahr?</p>
</blockquote>
<p>Naja, wenn du Length als rein virtuelle Methode definierst (was hier ja keinen Sinn macht...ist auch nur hypotetisch) und sie statisch wär (also die Klasse in der Length definiert wär, abstrakt wär), schon.</p>
</blockquote>
<pre><code class="language-cpp">class Base
{
  public:
        void foo() = 0;
};
class Derived : public Base
{
   public:
      void foo(){};
}

Base *B = new Derived; //or Derived *D = new Derived;
B-&gt;foo(); //or D-&gt;foo();
</code></pre>
<p>hier foo ist nicht 0</p>
</blockquote>
<p>Ach ne....hast du meinen Post überhaupt gelesen ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1134167</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1134167</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Sat, 09 Sep 2006 11:08:14 GMT</pubDate></item><item><title><![CDATA[Reply to obj.Length == 0 or obj.Length() == 0 on Sat, 09 Sep 2006 13:31:52 GMT]]></title><description><![CDATA[<blockquote>
<p>Naja, wenn du Length als rein virtuelle Methode definierst (was hier ja keinen Sinn macht...ist auch nur hypotetisch) und sie statisch wär (also die Klasse in der Length definiert wär, abstrakt wär), schon.</p>
</blockquote>
<p>virtuelle methode kann bei der Benutzung auch nicht 0 sein</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1134227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1134227</guid><dc:creator><![CDATA[netrobot]]></dc:creator><pubDate>Sat, 09 Sep 2006 13:31:52 GMT</pubDate></item></channel></rss>