c++根据条件选择堆栈对象的重载构造函数

C++ choose overloaded constructor for a stack object by condition

本文关键字:对象 重载 构造函数 堆栈 选择 条件 c++      更新时间:2023-10-16

我想要这样:

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++构造有意地在分配和初始化之间创建了非常紧密的耦合。因此,通常需要使用动态分配来动态指定要使用的构造函数。动态分配的效率可能比你试图避免的轻微开销& help;

要低几个数量级。

然而,在c++ 11中,可以使用对齐存储和位置new。

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

为什么不能工作?

KUrl url;
if (!customLocation.isEmpty())
    url = customLocation;
KUrl url;
if (!cusomLocation.isEmpty())
{
    url = KUrl( customLocation );
}

这里没有复制KUrl

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

有趣的一边,我将推荐杰克的解决方案(如果它适用于你的类型):)