Что должно быть возвращено как int & amp; когда у нас нет правильного lvalue в c ++?

Сегодня мой профессор написал этот код на своем компьютере:

int& at(int index) {
if (index < 0 || index >= maxsize){
cout<<"The index is not valid"<<endl;
return ;}
return elements[index];
}

Я на 90 процентов уверен, что код был точно таким же, как указано выше.
Но когда я написал это в моей визуальной студии 2015, я получил ошибку.
Компилятор хотел, чтобы я вернул int& в первом ответе.
Можете ли вы помочь мне с этим?

-3

Решение

Вы могли бы сделать это:

int global_incorrect_value = 42;

int& at(int index)
{
if (index < 0 || index >= maxsize)
{
cout<<"The index is not valid"<<endl;
return global_incorrect_value;
}
return elements[index];
}

Или это:

std::optional<int*> at(int index)
{
if(index < 0 || index >= maxsize)
return {};
else
return &elements[x];
}

Или это:

int* at(int index)
{
if(index < 0 || index >= maxsize)
return nullptr;
else
return &elements[x];
}

Или даже это:

int& at(int index)
{
if(index < 0 || index >= maxsize)
throw std::logic_error;
else
return elements[x];
}

Или если вы экстремальный мазохист

int& at(int index)
{
if(index < 0 || index >= maxsize)
explode();
else
return elements[x];
}

Но вы не можете сделать это «как ваш профессор» — опубликованный код даже не близок к легальному C ++.

2

Другие решения

как я понимаю код, я думаю, что эта функция получает значение из массива с именем element и возвращает значение, если оно найдено, поэтому я объясню свой ответ в этой ситуации
это синтаксическая ошибка, вы ничего не возвращаете функции, которая возвращает значение, а не функцию void, и если эта функция не возвращает никакого значения, ответ должен быть в памяти, потому что вы возвращаете ссылку на это значение, см. пример

#include <iostream>
using namespace std;
int elements[10];
int maxsize = 10;
int notFound = -1; // this a value to know that we are access a value out of range so when return -1 we handle it and we write it as a varible not return -1 to have a refrence in memory to return
int& at(int index) {
if (index < 0 || index >= maxsize){
cout<<"The index is not valid"<<endl;
return notFound;
}
return elements[index];
}

надеюсь, что это полезно ваш вопрос не ясно

-1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector