1

私はこのようなものが欲しい:

if (customLocation.isEmpty())
{
    KUrl url;
}
else
{
    KUrl url(customLocation);
}
/* use url */
4

5 に答える 5

1

通常の C++ コンストラクトは、割り当てと初期化の間に意図的に非常に緊密な結合を作成します。したがって、通常、使用するコンストラクターを動的に指定できるようにするには、動的割り当てを使用する必要があります。そして、動的割り当ては、回避しようとしているわずかなオーバーヘッドよりも、おそらく桁違いに非効率的です…

ただし、C++11 では、アラインされたストレージと配置 new を使用できます。

問題は、KUrlクラスが内部的に動的割り当てを使用する可能性が最も高く、最適化によって達成されるすべてがプログラマーの時間を浪費することです。最初にあなたの時間と、後でコードを保守する人の両方の時間です。

于 2013-04-06T12:52:02.470 に答える
1

できない理由は何でも

KUrl url;
if (!customLocation.isEmpty())
{
    url = KUrl(customLocation);
}
/* use url */

また

KUrl url = customLocation.isEmpty() ? KUrl() : KUrl(customLocation);
于 2013-04-06T12:38:17.493 に答える
0

KUrlここには完了のコピーがありません

boost::optional<KUrl> ourl;
if(customLocation.isEmpty()) {
  ourl = boost::in_place();
} else {
  ourl = boost::in_place(customLocation);
}

KUrl &url = *ourl;

楽しいことはさておき、Jacksソリューションをお勧めします(あなたのタイプで動作する場合):)

于 2013-04-06T12:37:56.063 に答える
0

これがうまくいかない理由はありますか?

KUrl url;
if (!customLocation.isEmpty())
    url = customLocation;
于 2013-04-06T12:38:58.913 に答える
0
KUrl url;

if (!cusomLocation.isEmpty())
{
    url = KUrl( customLocation );
}
于 2013-04-06T12:39:03.030 に答える