<?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[Grundsätzlich: Strings als Übergebeparameter]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich quäle mich zur Zeit mit der Frage, welche Variante sinnvoller ist, ein String als Parameter an eine Methode zu übergeben.</p>
<p>Angenommen, man möchte Attribute von Objekten setzten, wie z.B. ein Pfad zu einer Datei etc., so könnte man folgende Varianten verwenden (ich benutze mal die UNICODE-Varianten):</p>
<pre><code class="language-cpp">class Config{

public:

    Config();
    ~Config();

    void SetFilename1(LPCWSTR fileName);
    void SetFilename2(const std::wstring&amp; fileName);
    void SetFilename3(const std::wstring fileName);

private:

    std::wstring cfgFileName;
}

void Config::SetFilename1(LPCWSTR fileName){

    cfgFileName = fileName;
}

void Config::SetFilename2(const std::wstring&amp; fileName){

    cfgFileName = fileName;
}

void Config::SetFilename2(const std::wstring fileName){

    cfgFileName = fileName;
}
</code></pre>
<p>Welche Variante würdet Ihr nehmen (eine von den obigen oder eine weitere Variante)?</p>
<p>Gruß Roger</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/233219/grundsätzlich-strings-als-übergebeparameter</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 02:17:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/233219.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 02 Feb 2009 10:56:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Grundsätzlich: Strings als Übergebeparameter on Mon, 02 Feb 2009 10:56:01 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich quäle mich zur Zeit mit der Frage, welche Variante sinnvoller ist, ein String als Parameter an eine Methode zu übergeben.</p>
<p>Angenommen, man möchte Attribute von Objekten setzten, wie z.B. ein Pfad zu einer Datei etc., so könnte man folgende Varianten verwenden (ich benutze mal die UNICODE-Varianten):</p>
<pre><code class="language-cpp">class Config{

public:

    Config();
    ~Config();

    void SetFilename1(LPCWSTR fileName);
    void SetFilename2(const std::wstring&amp; fileName);
    void SetFilename3(const std::wstring fileName);

private:

    std::wstring cfgFileName;
}

void Config::SetFilename1(LPCWSTR fileName){

    cfgFileName = fileName;
}

void Config::SetFilename2(const std::wstring&amp; fileName){

    cfgFileName = fileName;
}

void Config::SetFilename2(const std::wstring fileName){

    cfgFileName = fileName;
}
</code></pre>
<p>Welche Variante würdet Ihr nehmen (eine von den obigen oder eine weitere Variante)?</p>
<p>Gruß Roger</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656413</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656413</guid><dc:creator><![CDATA[Roger Wilco]]></dc:creator><pubDate>Mon, 02 Feb 2009 10:56:01 GMT</pubDate></item><item><title><![CDATA[Reply to Grundsätzlich: Strings als Übergebeparameter on Mon, 02 Feb 2009 11:03:40 GMT]]></title><description><![CDATA[<p>Roger Wilco schrieb:</p>
<blockquote>
<pre><code class="language-cpp">void SetFilename2(const std::wstring&amp; fileName);
</code></pre>
</blockquote>
<p>die da, weil sie keine unnötigen kopien erzeugt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656419</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656419</guid><dc:creator><![CDATA[alfonso]]></dc:creator><pubDate>Mon, 02 Feb 2009 11:03:40 GMT</pubDate></item><item><title><![CDATA[Reply to Grundsätzlich: Strings als Übergebeparameter on Mon, 02 Feb 2009 11:05:02 GMT]]></title><description><![CDATA[<p>Ich würde const reference übergeben.<br />
Grund<br />
v1) was ist ein LPCWSTR? (wstring ist glaub ich so ein windows-unicode-string, oder?)<br />
v2) übergibt nur eine Referenz auf einen String, per Zuweisungsoperator setzt du einmal den Wert.<br />
v3) Du übergibst eine Kopie eines wstrings, dann weist du den Wert per operator= zu, macht also 2x Werte kopieren, im Gegensatz zu 1x bei v2.</p>
<p>Grüße<br />
Franz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656420</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656420</guid><dc:creator><![CDATA[franz]]></dc:creator><pubDate>Mon, 02 Feb 2009 11:05:02 GMT</pubDate></item><item><title><![CDATA[Reply to Grundsätzlich: Strings als Übergebeparameter on Mon, 02 Feb 2009 11:10:56 GMT]]></title><description><![CDATA[<p>franz schrieb:</p>
<blockquote>
<p>v1) was ist ein LPCWSTR? (wstring ist glaub ich so ein windows-unicode-string, oder?)</p>
</blockquote>
<p>Long Pointer to Constant Wide STRing. elendes windows-geraffel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656423</guid><dc:creator><![CDATA[alfonso]]></dc:creator><pubDate>Mon, 02 Feb 2009 11:10:56 GMT</pubDate></item><item><title><![CDATA[Reply to Grundsätzlich: Strings als Übergebeparameter on Mon, 02 Feb 2009 11:15:38 GMT]]></title><description><![CDATA[<p>alfonso schrieb:</p>
<blockquote>
<p>franz schrieb:</p>
<blockquote>
<p>v1) was ist ein LPCWSTR? (wstring ist glaub ich so ein windows-unicode-string, oder?)</p>
</blockquote>
<p>Long Pointer to Constant Wide STRing. elendes windows-geraffel.</p>
</blockquote>
<p>Danke, gut zu wissen <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="😃"
    /><br />
Aus dem Namen geht hervor, dass das wohl ein Pointer ist, somit wär das vllt. auch eine Alternative, da bei der Parameterübergabe an die Funktion kein Kopieren statfindet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656425</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656425</guid><dc:creator><![CDATA[franz]]></dc:creator><pubDate>Mon, 02 Feb 2009 11:15:38 GMT</pubDate></item><item><title><![CDATA[Reply to Grundsätzlich: Strings als Übergebeparameter on Mon, 02 Feb 2009 11:20:06 GMT]]></title><description><![CDATA[<p>franz schrieb:</p>
<blockquote>
<p>somit wär das vllt. auch eine Alternative, da bei der Parameterübergabe an die Funktion kein Kopieren statfindet.</p>
</blockquote>
<p>Nur wenn du in der Schnittstelle der Klasse sowieso noch andere Windows-Spezifika einbauen musst, d.h. wenn es sowieso eine Windows-spezifische Klasse ist. Allgemein würde ich wenn möglich die Schnittstellen von Klassen möglichst plattformunabhängig definieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656429</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 02 Feb 2009 11:20:06 GMT</pubDate></item><item><title><![CDATA[Reply to Grundsätzlich: Strings als Übergebeparameter on Mon, 02 Feb 2009 12:39:07 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/8155">@Franz</a>: Zum LPWSTR (Zeiger auf ein Unicode C-String: wchar_t*, LPCWSTR ist die const-Variante)</p>
<p>Diesen Datentyp trifft man bei der WinAPI so gut wie immer an, wenn es um String-Parameter geht.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9960">@Pumuckl</a>:</p>
<p>Bei meinen Klassen handelt sich um stark WinAPI-bezogene Klassen für Windows-BS. Ich nutze aber intern immer std::wstring. Nun überlege ich auch für die Schnittstellen grundsätzlich auf std::wstring zu setzen. Bisher habe ich es mit LPCWSTR gemacht, was den Nachteil hat, dass man immer wieder auf C-Strings zurückgreifen muss (z.b: per .c_str()).</p>
<p>Die Variante 3 nutze ich dort, wo ich die Option benötige wstrings und const. C-Strings (z.B. SetFilename(L&quot;config.ini&quot;);) übergeben zu können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656430</guid><dc:creator><![CDATA[Roger Wilco]]></dc:creator><pubDate>Mon, 02 Feb 2009 12:39:07 GMT</pubDate></item><item><title><![CDATA[Reply to Grundsätzlich: Strings als Übergebeparameter on Mon, 02 Feb 2009 11:44:45 GMT]]></title><description><![CDATA[<p>Roger Wilco schrieb:</p>
<blockquote>
<p>Die Variante 3 nutze ich dort, wo ich die Option benötige wstrings und const. C-Strings (z.B. SetFilename(L&quot;config.ini&quot;);) übergeben zu können.</p>
</blockquote>
<p>Wieso das? Const-Referenzen können auch an temporäre Objekte gebunden werden. Übergib doch eine Const-Referenz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656439</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 02 Feb 2009 11:44:45 GMT</pubDate></item><item><title><![CDATA[Reply to Grundsätzlich: Strings als Übergebeparameter on Mon, 02 Feb 2009 11:47:13 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>: Das musst Du mir nochmal erklären.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656440</guid><dc:creator><![CDATA[Roger Wilco]]></dc:creator><pubDate>Mon, 02 Feb 2009 11:47:13 GMT</pubDate></item><item><title><![CDATA[Reply to Grundsätzlich: Strings als Übergebeparameter on Mon, 02 Feb 2009 11:55:05 GMT]]></title><description><![CDATA[<p>Roger Wilco schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>: Das musst Du mir nochmal erklären.</p>
</blockquote>
<p>funktion 2 funktioniert auch mit c-strings, weil ggf. ein temporäres stringobjekt erzeugt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656447</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656447</guid><dc:creator><![CDATA[alfonso]]></dc:creator><pubDate>Mon, 02 Feb 2009 11:55:05 GMT</pubDate></item><item><title><![CDATA[Reply to Grundsätzlich: Strings als Übergebeparameter on Mon, 02 Feb 2009 11:58:17 GMT]]></title><description><![CDATA[<p>Roger Wilco schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>: Das musst Du mir nochmal erklären.</p>
</blockquote>
<p>Es gibt eigentlich keinen Grund, Strings (wie <code>std::wstring</code> ) als Kopie zu übergeben. Das einzige wäre, wenn du innerhalb der Funktion sowieso eine Kopie anlegen würdest, und diese veränderst. Dann kannst du gleich eine Kopie übergeben. Sonst nimmst du besser eine Const-Referenz.</p>
<p>Auch wenn du ein Literal an die Funktion übergeben willst, zum Beispiel <code>L&quot;config.ini&quot;</code> , darf der Parameter eine Const-Referenz sein. Normale Referenzen können nur an LValues gebunden werden. Const-Referenzen hingegen darf man auch an RValues (zum Beispiel temporäre Objekte wie das WString-Literal) binden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656449</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656449</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 02 Feb 2009 11:58:17 GMT</pubDate></item><item><title><![CDATA[Reply to Grundsätzlich: Strings als Übergebeparameter on Mon, 02 Feb 2009 12:00:52 GMT]]></title><description><![CDATA[<p>alfonso schrieb:</p>
<blockquote>
<p>funktion 2 funktioniert auch mit c-strings, weil ggf. ein temporäres stringobjekt erzeugt wird.</p>
</blockquote>
<p>Das ist das andere. <code>std::wstring</code> besitzt einen nicht expliziten Konstruktor, der einen <code>wchar_t*</code> aufnimmt. Also kann man auch einen <code>wchar_t*</code> übergeben, der wird dann implizit konvertiert.</p>
<p>Im Grunde braucht man damit nur eine Funktion, mit der alle Fälle abgedeckt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656453</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656453</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 02 Feb 2009 12:00:52 GMT</pubDate></item><item><title><![CDATA[Reply to Grundsätzlich: Strings als Übergebeparameter on Mon, 02 Feb 2009 12:03:03 GMT]]></title><description><![CDATA[<p>Getestet und funktioniert. <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="🙂"
    /> Danke, wieder etwas dazu gelernt. <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>
<p>Würdet Ihr im Falle der Windows-Programmierung, wo man viel mit LPCSTR/LPCWSTR als Parametertyp zu tun hat und intern mit std::wstring arbeitet, für eigene Schnittstellen die C-String-Zeiger (LPCWSTR) oder C++-String-Referenzen (const std::wstring&amp;)benutzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656458</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656458</guid><dc:creator><![CDATA[Roger Wilco]]></dc:creator><pubDate>Mon, 02 Feb 2009 12:03:03 GMT</pubDate></item><item><title><![CDATA[Reply to Grundsätzlich: Strings als Übergebeparameter on Mon, 02 Feb 2009 12:20:08 GMT]]></title><description><![CDATA[<p>Roger Wilco schrieb:</p>
<blockquote>
<p>Würdet Ihr im Falle der Windows-Programmierung, wo man viel mit LPCSTR/LPCWSTR als Parametertyp zu tun hat und intern mit std::wstring arbeitet, für eigene Schnittstellen die C-String-Zeiger (LPCWSTR) oder C++-String-Referenzen (const std::wstring&amp;)benutzen?</p>
</blockquote>
<p>Wie schon oben gesagt würde ich grundsätzlich plattformunabhängige Schnittstellen bereitstellen. Die einzige Ausnahme ist, wenn du die Schnittstellen der WinAPI übergeben musst, damit diese die Funktionen aufrufen kann. Da die WinAPI aber ein C-API ist wirst du dafür sowieso nicht die Klassenmethoden direkt benutzen können.</p>
<p>Der Vorteil bei plattformunabhängigen Schnittstellen ist folgender: Auch wenn du im Moment die Implementierungen deiner Klassen stark windows-spezifisch machst, kannst du später trotzdem z.B. eine Linuxspezifische Implementierung dazu schreiben, die du dann mit linken kannst, ohne die Schnittstelle selber ändern zu müssen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656470</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656470</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 02 Feb 2009 12:20:08 GMT</pubDate></item><item><title><![CDATA[Reply to Grundsätzlich: Strings als Übergebeparameter on Mon, 02 Feb 2009 12:38:36 GMT]]></title><description><![CDATA[<p>Danke pumuckl, Recht hast Du.</p>
<p>Ich denke auch std::strings als const. reference zu benutzen ist auch einfach fehlersicherer. Die LPCWSTR-Zeiger können ja sonst wo hinzeigen (auch NULL sein) und man kann sich nicht sicher sein, dass die Strings auch initialisiert und nullterminiert sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656479</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656479</guid><dc:creator><![CDATA[Roger Wilco]]></dc:creator><pubDate>Mon, 02 Feb 2009 12:38:36 GMT</pubDate></item><item><title><![CDATA[Reply to Grundsätzlich: Strings als Übergebeparameter on Mon, 02 Feb 2009 12:40:38 GMT]]></title><description><![CDATA[<p>Roger Wilco schrieb:</p>
<blockquote>
<p>Ich denke auch std::strings als const. reference zu benutzen ist auch einfach fehlersicherer. Die LPCWSTR-Zeiger können ja sonst wo hinzeigen (auch NULL sein) und man kann sich nicht sicher sein, dass die Strings auch initialisiert und nullterminiert sind.</p>
</blockquote>
<p>Wenn du aber einen <code>wchar_t*</code> übergibst, wird der in einen <code>std::wstring</code> konvertiert - egal, ob er auf einen gültigen Speicherbereich, auf Null oder in ein schwarzes Loch zeigt. <code>std::wstring</code> wird dann die entsprechenden Probleme haben...</p>
<p>Wenn es also möglich ist, Nullzeiger zu übergeben, brauchst du doch eine Funktion, die einen <code>wchar_t*</code> nimmt und diesen prüft. Gegen wilde Zeiger kannst du nicht viel machen, da musst du halt schauen, dass diese nicht vorkommen, was bei guter Programmierung eigentlich im Bereich des Möglichen liegt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656486</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656486</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 02 Feb 2009 12:40:38 GMT</pubDate></item><item><title><![CDATA[Reply to Grundsätzlich: Strings als Übergebeparameter on Mon, 02 Feb 2009 13:46:45 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Wenn es also möglich ist, Nullzeiger zu übergeben, brauchst du doch eine Funktion, die einen <code>wchar_t*</code> nimmt und diesen prüft. Gegen wilde Zeiger kannst du nicht viel machen, da musst du halt schauen, dass diese nicht vorkommen, was bei guter Programmierung eigentlich im Bereich des Möglichen liegt.</p>
</blockquote>
<p>Das ist eine Frage des Schnittstellendesigns. Tendenziell würde ich die Schnittstelle eher schmal halten, sprich nur std::wstring. Es ist dann Sache des Aufrufers bei eventuell auftretenden wchar_t-Pointern die nötigen Überprüfungen vorzunehmen. Idealerweise sollte eine Schnittstelle nur die nötigen Funktionen bereitstellen und nicht alle möglicherweise irgendwann mal auftretenden Fälle abdecken. In der Praxis macht man natürlich Kompromisse - wenn ein Fall häufig auftaucht, der von der minimalen Schnittstelle nicht abgedeckt wird, dann erweitert man die Schnittstelle unter Umständen entsprechend. Im vorliegenden Fall würde ich aber eher drauf verzichten und lediglich in die Doku der Schnittstelle schreiben, dass die wstrings gewissen Einschränkungen unterliegen (z.B. keine wchar_t-Nullpointer).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656534</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656534</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 02 Feb 2009 13:46:45 GMT</pubDate></item><item><title><![CDATA[Reply to Grundsätzlich: Strings als Übergebeparameter on Mon, 02 Feb 2009 14:41:30 GMT]]></title><description><![CDATA[<p>Kommt ja auch eher darauf an, was man entwickelt. Wenn ich eine Library (besonders für andere Projekte) entwickle, wird meine Schnittstelle Fälle voraussehen müssen. Damit auch mehr Projekte damit etwas anfangen können.</p>
<p>Wenn es eher um Schnittstellen für geschlossene Systeme geht (z.B. innerhalb einer Anwendung), dann mache ich nur die nötigsten Schnittstellen. Weil wenn ich was brauche, kann ich die ruck zuck selber hinzufügen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656571</guid><dc:creator><![CDATA[Bulli]]></dc:creator><pubDate>Mon, 02 Feb 2009 14:41:30 GMT</pubDate></item><item><title><![CDATA[Reply to Grundsätzlich: Strings als Übergebeparameter on Mon, 02 Feb 2009 15:08:21 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9960">@pumuckl</a>: Stimmt... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>@all: Und welche Variante bevorzugt ihr für Strings als Rückgabewert?</p>
<pre><code class="language-cpp">std::wstring GetFilename();

std::wstring configFile = GetFilename();
</code></pre>
<pre><code class="language-cpp">bool GetFilename(std::wstring&amp; filename);

std::wstring configFile;
if (!GetFilename(configFile)){ ... }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1656600</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656600</guid><dc:creator><![CDATA[Roger Wilco]]></dc:creator><pubDate>Mon, 02 Feb 2009 15:08:21 GMT</pubDate></item><item><title><![CDATA[Reply to Grundsätzlich: Strings als Übergebeparameter on Mon, 02 Feb 2009 15:14:59 GMT]]></title><description><![CDATA[<p>variante 1.</p>
<p>welchen sinn sollte variante 2 haben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656605</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Mon, 02 Feb 2009 15:14:59 GMT</pubDate></item><item><title><![CDATA[Reply to Grundsätzlich: Strings als Übergebeparameter on Mon, 02 Feb 2009 15:17:30 GMT]]></title><description><![CDATA[<p>Roger Wilco schrieb:</p>
<blockquote>
<p>@all: Und welche Variante bevorzugt ihr für Strings als Rückgabewert?</p>
</blockquote>
<p>Kommt drauf an, das ist eine Frage der Fehlerbehandlung. Wenn es &quot;normal&quot; ist, dass kein Filename zurückgegeben werden kann, ist die zweite Version durchaus legitim (oder die erste mit leerem String, um anzuzeigen dass da nix kommt), andernfalls wenn eigentlich immer ein Filename zurückgegeben werden kann, die erste Version und im Notfall eine Exception werfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656608</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656608</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 02 Feb 2009 15:17:30 GMT</pubDate></item><item><title><![CDATA[Reply to Grundsätzlich: Strings als Übergebeparameter on Mon, 02 Feb 2009 15:22:29 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>welchen sinn sollte variante 2 haben?</p>
</blockquote>
<p>Ich dachte sie wäre (minimal) schneller, da keine Kopie gemacht wird. (Zusätzlich hat man gleich eine kompakte SUCCESS/FAILURE-Behandlungsmöglichkeit.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656614</guid><dc:creator><![CDATA[Roger Wilco]]></dc:creator><pubDate>Mon, 02 Feb 2009 15:22:29 GMT</pubDate></item><item><title><![CDATA[Reply to Grundsätzlich: Strings als Übergebeparameter on Mon, 02 Feb 2009 15:26:23 GMT]]></title><description><![CDATA[<p>Roger Wilco schrieb:</p>
<blockquote>
<p>Ich dachte sie wäre (minimal) schneller, da keine Kopie gemacht wird. (Zusätzlich hat man gleich eine kompakte SUCCESS/FAILURE-Behandlungsmöglichkeit.)</p>
</blockquote>
<p>Unter Laborbedienungen wäre die Variante mit direktem Return vermutlich schneller. In der freien Wildbahn hängt es von zuvielen Faktoren ab...</p>
<p>SUCCESS/FAILURE wird mittels exceptions gelöst. Return Werte sind sowas von letztem jahrhundert... <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/1656617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656617</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Mon, 02 Feb 2009 15:26:23 GMT</pubDate></item><item><title><![CDATA[Reply to Grundsätzlich: Strings als Übergebeparameter on Mon, 02 Feb 2009 15:51:58 GMT]]></title><description><![CDATA[<p>Ich mache immer die erste Variante. In vielen Fällen optimiert der Compiler das Kopieren nämlich weg! Gibts glaube ich sogar einen Begriff dafür, wenn ein Rückgabewert wegoptimiert werden kann.</p>
<p>Bei sowas sollte man nicht versuchen schlauer zu sein als Compiler, wenn es auf Codeverständnis geht.</p>
<p>Weiterhin würde ich bei einem unerwarteten Fehler eine Exception werfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656635</guid><dc:creator><![CDATA[Bulli]]></dc:creator><pubDate>Mon, 02 Feb 2009 15:51:58 GMT</pubDate></item><item><title><![CDATA[Reply to Grundsätzlich: Strings als Übergebeparameter on Mon, 02 Feb 2009 16:04:31 GMT]]></title><description><![CDATA[<p>Vielen Dank soweit für Eure Meinungen und Ratschläge!</p>
<p>Zum <strong>Thema Exceptions</strong>: Davor habe ich mich bisher immer gedrückt.</p>
<p>Das Prinzip ist mir klar, aber wie werden die in einem Projekt sinnvoll (einheitlich, plausibel etc.) eingesetzt. Mir fehlen da einfach Ansätze für ein Prinzip, eine einheitliches und sinnvolles Verfahren.</p>
<p>Das fängt ja an beim Design von Exceptions, deren Klassifizierung etc...</p>
<p>Daher noch die alte Returnwert-Prüfung zur Fehlerbehandlung.</p>
<p>Wenn es da hilfreiche Links oder Literatur gibt, wäre ich sehr dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656639</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656639</guid><dc:creator><![CDATA[Roger Wilco]]></dc:creator><pubDate>Mon, 02 Feb 2009 16:04:31 GMT</pubDate></item><item><title><![CDATA[Reply to Grundsätzlich: Strings als Übergebeparameter on Mon, 02 Feb 2009 16:06:39 GMT]]></title><description><![CDATA[<blockquote>
<p>SUCCESS/FAILURE wird mittels exceptions gelöst. Return Werte sind sowas von letztem jahrhundert...</p>
</blockquote>
<p>Hmm, Exceptions sind fuer Ausnahmen da. Bei z.B. falschen Nutzereingaben fuer Dateien sollte keine Exception geworfen werden. Auch sollte bei Ressourcemanagement auf Exceptions verzichtet werden. Java/C# gehen da andere Wege als C++. Returnwerte sind also sowas von nicht letztes Jahrhundert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656641</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656641</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Mon, 02 Feb 2009 16:06:39 GMT</pubDate></item></channel></rss>