为什么在这种情况下将右值传递给左值引用会起作用?

问题描述 投票:0回答:1

当我偶然发现这个有趣的技术时,我正在做 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;
}

我们将看似右值传递给左值引用,这通常是非法的,但在这种特定情况下,它以某种方式起作用。有什么解释或者也许我错过了什么?

c++ rvalue lvalue
1个回答
0
投票

operator=
std::vector
返回一个左值引用,并且可以在右值和左值对象表达式上调用(因为它只是一个没有引用限定符的普通非静态成员函数)。

因此

std::vector<int>(5) = {1,2,3,4,5}
是允许的,并且是一个左值表达式,可以通过参数中的左值引用进行绑定。

© www.soinside.com 2019 - 2024. All rights reserved.