我想要这样的东西:
if (customLocation.isEmpty())
{
KUrl url;
}
else
{
KUrl url(customLocation);
}
/* use url */
我想要这样的东西:
if (customLocation.isEmpty())
{
KUrl url;
}
else
{
KUrl url(customLocation);
}
/* use url */
任何你做不到的理由
KUrl url;
if (!customLocation.isEmpty())
{
url = KUrl(customLocation);
}
/* use url */
或者
KUrl url = customLocation.isEmpty() ? KUrl() : KUrl(customLocation);
通常的 C++ 构造有意在分配和初始化之间创建非常紧密的耦合。因此,通常您需要使用动态分配来动态指定要使用的构造函数。动态分配的效率可能比您试图避免的轻微开销低几个数量级......
但是,使用 C++11,您可以使用对齐的存储和放置新。
问题是KUrl
该类很可能在内部使用动态分配,然后优化完成的所有工作都是浪费程序员的时间:包括您最初的时间,以及以后维护代码的任何人的时间。
在这里你没有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 );
}