我可以用两种方式初始化boost :: format变量:
首先:
void foo()
{
boost::format format{"Hellow %1% %2%"};
format % "Dear" % "user";
// do something with format
}
第二种方式:
void foo()
{
boost::format v = boost::format {"Hellow %1% %2%"} % "Dear" % "user";
// do something with format
}
我想知道,两者是否更有效。
谢谢。
答案 0 :(得分:5)
第3个示例中请求的转换为std::string
可能会占用执行时间和内存使用量,并且会误导读取代码的人。这只是不必要的。
答案 1 :(得分:1)
根据我的理解:
在这种情况下的开销不是我们认为的。虽然有趣的问题。
让我们看看第一个函数的作用:
boost::format format{"Hellow %1% %2%"};
format % "Dear" % "user";
这会创建一个格式实例。第二行不会影响任何其他新变量的任何结果。它只是"简单地说#34;使用由boost :: format类在内部处理的运算符重载。没有新的任务。
与第二种方式的主要区别在于它。在已完成的工作之上,将结果分配给新变量。对于大量执行,可能会花费(测试它!)。
尽管如此,并且取决于这些函数处理的代码量,将此函数声明为内联可能是真正的好处。
希望它有所帮助。
答案 2 :(得分:0)
format % "Dear" % "user";
只是一个类型为boost::format
的 的表达式。因此,两种方法之间没有真正的区别(除了值
变量)。
是的,其他类型也存在类似情况。例如。将format
替换为int
:
int i = int(10);
i * 7 + 5;
相当于
int(10) * 7 + 5;
它只是表达方式。您也可以分配它,因为10*7+5
的结果仍然是int:
int i = int(10) * 7 + 5;