私はこのようなものが欲しい:
if (customLocation.isEmpty())
{
KUrl url;
}
else
{
KUrl url(customLocation);
}
/* use url */
私はこのようなものが欲しい:
if (customLocation.isEmpty())
{
KUrl url;
}
else
{
KUrl url(customLocation);
}
/* use url */
通常の C++ コンストラクトは、割り当てと初期化の間に意図的に非常に緊密な結合を作成します。したがって、通常、使用するコンストラクターを動的に指定できるようにするには、動的割り当てを使用する必要があります。そして、動的割り当ては、回避しようとしているわずかなオーバーヘッドよりも、おそらく桁違いに非効率的です…
ただし、C++11 では、アラインされたストレージと配置 new を使用できます。
問題は、KUrl
クラスが内部的に動的割り当てを使用する可能性が最も高く、最適化によって達成されるすべてがプログラマーの時間を浪費することです。最初にあなたの時間と、後でコードを保守する人の両方の時間です。
できない理由は何でも
KUrl url;
if (!customLocation.isEmpty())
{
url = KUrl(customLocation);
}
/* use url */
また
KUrl url = customLocation.isEmpty() ? KUrl() : KUrl(customLocation);
KUrl
ここには完了のコピーがありません
boost::optional<KUrl> ourl;
if(customLocation.isEmpty()) {
ourl = boost::in_place();
} else {
ourl = boost::in_place(customLocation);
}
KUrl &url = *ourl;
楽しいことはさておき、Jacksソリューションをお勧めします(あなたのタイプで動作する場合):)
これがうまくいかない理由はありますか?
KUrl url;
if (!customLocation.isEmpty())
url = customLocation;
KUrl url;
if (!cusomLocation.isEmpty())
{
url = KUrl( customLocation );
}