如果您指的是语言概念而不是编译器最终会做什么,那么简单来说,临时是一个最终由某个表达式产生的值,并且不绑定到任何变量。它的值通常用于一些中间计算,然后被丢弃。这是一个有点做作的例子。
std::string x = "foo";
std::string y = "bar";
auto length = (x + std::to_string(some_number) + y).size();
// __TEMP0__ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
// __TEMP1__ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// __TEMP2__ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
的结果在std::to_string(some_number)
使用时没有分配给任何东西,所以它只是暂时的。它在 [sub]expression 中使用x + std::to_string(some_number)
,它创建另一个临时字符串,它本身与+
'd 一起创建另一个临时字符串,y
其大小被占用并分配给length
。在这种情况下,所有涉及的临时变量都将存在0直到整个表达式的求值结束,然后被丢弃。就好像代码是这样的。
std::string x = "foo";
std::string y = "bar";
std::string __TEMP0__ = std::to_string(some_number);
std::string __TEMP1__ = x + __TEMP0__;
std::string __TEMP2__ = __TEMP1__ + y;
auto length = __TEMP2__.size();
除了临时变量保留为右值并将在评估后被销毁__TEMP2__.size()
。
0好吧,就好像它们存在一样。谁知道你的编译器会做什么来优化它。