«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему я не могу связать неконстантную ссылку Lvalue с Rvalue в C++?

Почему я не могу связать неконстантную ссылку Lvalue с Rvalue в C++?

Опубликовано 22 декабря 2024 г.
Просматривать:809

 Why Can\'t I Bind a Non-Const Lvalue Reference to an Rvalue in C  ?

Невозможно связать неконстантную ссылку Lvalue с Rvalue: решение.

В данном фрагменте кода произошла ошибка при инициализации объекта класса Foo внутри конструктора класса Bar. Сообщение об ошибке указывает, что неконстантная ссылка lvalue (Foo f) привязана к rvalue (результат вызова genValue()).

В C неконстантные ссылочные параметры могут ссылаться только на именованные переменные (lvalues). Однако результатом genValue() является временное значение (rvalue). Чтобы решить эту проблему, нам нужно передать значение genValue() по значению (int).

class Foo {
public:
    Foo(int x) {
        this->x = x;
    }
private:
    int x;
};

class Bar {
public:
    Bar(): f(genValue()) {
    }
private:
    Foo f;

    int genValue() {
        int x;
        // do something ...
        x = 1;
        return x;
    }
};

Изменив аргумент конструктора на int, мы теперь можем инициализировать объект Foo в области конструктора без каких-либо ошибок.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3