1

我想要这样的东西:

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

5 回答 5

1

任何你做不到的理由

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

或者

KUrl url = customLocation.isEmpty() ? KUrl() : KUrl(customLocation);
于 2013-04-06T12:38:17.493 回答
1

通常的 C++ 构造有意在分配和初始化之间创建非常紧密的耦合。因此,通常您需要使用动态分配来动态指定要使用的构造函数。动态分配的效率可能比您试图避免的轻微开销低几个数量级......

但是,使用 C++11,您可以使用对齐的存储和放置新。

问题是KUrl该类很可能在内部使用动态分配,然后优化完成的所有工作都是浪费程序员的时间:包括您最初的时间,以及以后维护代码的任何人的时间。

于 2013-04-06T12:52:02.470 回答
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 回答