c++根据条件选择堆栈对象的重载构造函数
C++ choose overloaded constructor for a stack object by condition
我想要这样:
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;
有趣的一边,我将推荐杰克的解决方案(如果它适用于你的类型):)
相关文章:
- 你能重载对象变量名本身返回的内容吗
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 为什么常量词在重载运算符中不与 ostream 对象一起使用<<?
- 为什么我可以在不重载 "=" 运算符的情况下将一个对象分配给另一个对象?
- 运算符重载 += 添加新对象
- 有没有办法将重载的类函数绑定到函数对象?
- 使用操作重载对象重新分配对象
- C++内联运算符重载中,请参阅当前对象
- C++运算符重载做双 * 对象
- 尝试重载输出运算符时,我无法遍历对象向量
- 我重载了 << 和 = 运算符。为什么当我将一个对象分配给另一个对象并尝试打印它时,我会被打印出来?
- 重载加法运算符(使用函数向对象添加字符串)
- 临时对象上的运算符重载
- 如何使用运算符+重载函数正确返回对象?
- 对象内部对象的重载功能
- 重载运算符 [] 用于从对象数组中给出特定索引
- 流入流 (>>) 和流出 (<<) 对象重载
- 如何为我的对象重载 cout
- 删除运算符中未使用的对象=重载
- 用模板对象重载容器类的操作符[]