【发布时间】:2017-02-06 11:35:08
【问题描述】:
我想知道是否在下面的foo(string) 调用中进行了复制省略。
(注:foo(string)属于我无法更改的接口)。
为此,我尝试检查构造的string("Hello world!") 是否为rvalue。
我搜索了如何以编程方式执行此操作并找到了这篇文章:How to determine programmatically if an expression is rvalue or lvalue in C++?
void foo( string str)
{
cout << str << endl;
}
int main()
{
foo("Hello world!");
cout << is_rvalue_reference<decltype(string("Hello world!"))>::value << endl;
}
结果是
Hello world!
0
我以为我会得到true 到is_rvalue_reference< xxx >::value
- 我哪里错了?
-
string("Hello world!")可能是rvalue但似乎不是“任何类型的参考”(lvalue、rvalue、通用 ...)所以我得到了false结果。如果是rvalue,有没有办法获得true的答案? - 他的示例中是否存在复制省略?
【问题讨论】:
标签: c++