变量初始化方式

时间:2018-03-02 10:49:01

标签: c++ boost

我可以用两种方式初始化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
}

我想知道,两者是否更有效。

谢谢。

3 个答案:

答案 0 :(得分:5)

第3个示例中请求的转换为std::string可能会占用执行时间和内存使用量,并且会误导读取代码的人。这只是不必要的。

答案 1 :(得分:1)

根据我的理解:

在这种情况下的开销不是我们认为的。虽然有趣的问题。

让我们看看第一个函数的作用:

boost::format format{"Hellow %1% %2%"};
format % "Dear" % "user";

这会创建一个格式实例。第二行不会影响任何其他新变量的任何结果。它只是"简单地说#34;使用由boost :: format类在内部处理的运算符重载。没有新的任务。

与第二种方式的主要区别在于它。在已完成的工作之上,将结果分配给新变量。对于大量执行,可能会花费(测试它!)。

尽管如此,并且取决于这些函数处理的代码量,将此函数声明为内联可能是真正的好处。

c++ inline functions

希望它有所帮助。

答案 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;