当我偶然发现这个有趣的技术时,我正在做 Leetcode。简而言之:
#include <iostream>
#include <vector>
void print(std::vector<int>& vec)
{
for (int i : vec)
{
std::cout << i << ", ";
}
}
int main()
{
print(std::vector<int>(5) = {1,2,3,4,5});
return 0;
}
我们将看似右值传递给左值引用,这通常是非法的,但在这种特定情况下,它以某种方式起作用。有什么解释或者也许我错过了什么?
operator=
的 std::vector
返回一个左值引用,并且可以在右值和左值对象表达式上调用(因为它只是一个没有引用限定符的普通非静态成员函数)。
因此
std::vector<int>(5) = {1,2,3,4,5}
是允许的,并且是一个左值表达式,可以通过参数中的左值引用进行绑定。