<?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 und der ternäre Operator]]></title><description><![CDATA[<p>Hallo,</p>
<p>folgendes Problem: ich möchte eine Konstanten mit dem ternären Operator abhängig vom Wert einer anderen Variableinitialisieren. Das funktioniert natürlich nicht, wenn der Rückgabewert des Operators nicht bekannt ist. Die erste Frage wäre: warum funktioniert das nicht, auch wenn das Vergleichsergebnis bekannt ist?</p>
<pre><code class="language-cpp">//...
	isUNC_Address = false;
	const unsigned long size = (isUNC_Address ? 32767 : MAX_PATH);
	TCHAR systemFileName[size] = { &quot;\0&quot; };
</code></pre>
<p>Das sieht ein bisschen nach WinAPI aus (was auch der Grund ist, warum ich raw arrays brauche), aber die Frage passt besser in dieses Forum. Der Kontext ist diesem Fall nicht so wichtig, ich möchte einfach nur wissen, warum das nicht geht? Ich meine, rein theoretisch erfüllt die Zuweisung die Bedingung, dass der zuzuweisende Wert konstant und zur Compilierzeit bekannt ist (in diesem Fall <em>die</em> Werte).</p>
<p>Ich habe mich umso mehr gewundert, dass der Compiler den Fehler nicht erkannt hat, sobald ich das Ganze in ein Template verpackt habe:</p>
<pre><code class="language-cpp">template &lt;class U&gt;
void setupDevContext(U dev, std::string&amp; layout, bool isUNC_Address)
{
	const unsigned long size = (isUNC_Address ? 32767 : MAX_PATH);
	TCHAR serialNumber[size] = { &quot;\0&quot; };
	//...
}
</code></pre>
<p>Woran liegt das?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/294093/const-und-der-ternäre-operator</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 01:57:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/294093.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 17 Oct 2011 18:54:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Const und der ternäre Operator on Mon, 17 Oct 2011 18:54:27 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>folgendes Problem: ich möchte eine Konstanten mit dem ternären Operator abhängig vom Wert einer anderen Variableinitialisieren. Das funktioniert natürlich nicht, wenn der Rückgabewert des Operators nicht bekannt ist. Die erste Frage wäre: warum funktioniert das nicht, auch wenn das Vergleichsergebnis bekannt ist?</p>
<pre><code class="language-cpp">//...
	isUNC_Address = false;
	const unsigned long size = (isUNC_Address ? 32767 : MAX_PATH);
	TCHAR systemFileName[size] = { &quot;\0&quot; };
</code></pre>
<p>Das sieht ein bisschen nach WinAPI aus (was auch der Grund ist, warum ich raw arrays brauche), aber die Frage passt besser in dieses Forum. Der Kontext ist diesem Fall nicht so wichtig, ich möchte einfach nur wissen, warum das nicht geht? Ich meine, rein theoretisch erfüllt die Zuweisung die Bedingung, dass der zuzuweisende Wert konstant und zur Compilierzeit bekannt ist (in diesem Fall <em>die</em> Werte).</p>
<p>Ich habe mich umso mehr gewundert, dass der Compiler den Fehler nicht erkannt hat, sobald ich das Ganze in ein Template verpackt habe:</p>
<pre><code class="language-cpp">template &lt;class U&gt;
void setupDevContext(U dev, std::string&amp; layout, bool isUNC_Address)
{
	const unsigned long size = (isUNC_Address ? 32767 : MAX_PATH);
	TCHAR serialNumber[size] = { &quot;\0&quot; };
	//...
}
</code></pre>
<p>Woran liegt das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2132638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2132638</guid><dc:creator><![CDATA[*Rewind*]]></dc:creator><pubDate>Mon, 17 Oct 2011 18:54:27 GMT</pubDate></item><item><title><![CDATA[Reply to Const und der ternäre Operator on Mon, 17 Oct 2011 19:01:54 GMT]]></title><description><![CDATA[<p>Array-Grössen müssen <em>konstante Ausdrücke</em>, d.h. zur Kompilierzeit bekannte Konstanten sein. Der Wert von <code>size</code> hängt aber von der Variablen <code>isUNC_Address</code> ab, welche keinen konstanten Ausdruck darstellt. Indirekt ist <code>size</code> deshalb ebenfalls kein konstanter Ausdruck.</p>
<p>Der zweite Fall &quot;funktioniert&quot; wahrscheinlich nur, weil das Template nicht instanziiert und dessen Code daher nicht vollständig kompiliert wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2132643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2132643</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 17 Oct 2011 19:01:54 GMT</pubDate></item></channel></rss>