Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > функция возвращает cont int


Автор: LexusCheby 17.9.2007, 15:10
Вот встретил такую функцию.
const int f() cont
{
   return time;
}

Писали солидные люди, а я никак не пойму зачем передний const :(

Автор: EnergoHokum 17.9.2007, 15:17
Чтобы вызывающий не смог руками изменить время?

Автор: Fazil6 17.9.2007, 15:22
видимо, хотели чтобы полученное значение использовалось исключительно как константа

Автор: archimed7592 17.9.2007, 16:04
LexusCheby, это считается хорошей привычкой делать возвращаемые значения const. Точно так же, как и конструкторы explicit. Т.е. по умолчанию всё const, всё explicit и т.д. Для примитивных типов разницы никакой, а вот с агрегатами ситуация намного интересней.

Автор: DjoNIK 17.9.2007, 20:31
А от каких проблем это может уберечь?
 smile 

Автор: JackYF 17.9.2007, 20:34
Цитата(DjoNIK @  17.9.2007,  20:31 Найти цитируемый пост)
А от каких проблем это может уберечь?

от, например

Код

a = b++++;

Автор: DjoNIK 17.9.2007, 20:38
А что в 
Код

a = b++++; 

b - это функция?

Автор: Mayk 17.9.2007, 20:52
Цитата(archimed7592 @  17.9.2007,  20:04 Найти цитируемый пост)
LexusCheby, это считается хорошей привычкой делать возвращаемые значения const.

Ну не int'ы же.  smile 

Автор: DjoNIK 17.9.2007, 20:55
Цитата

Ну не int'ы же

Хорошо. Как быть с SomeMyClass, от чего я оберегаю себя и пользователей моего кода, если функция возвращает const SomeMyClass?

Автор: Mayk 17.9.2007, 21:03
Цитата(DjoNIK @  18.9.2007,  00:55 Найти цитируемый пост)

Хорошо. Как быть с SomeMyClass, от чего я оберегаю себя и пользователей моего кода, если функция возвращает const SomeMyClass? 

ну выше же был пример.
Цитата(JackYF @  18.9.2007,  00:34 Найти цитируемый пост)

от, например

Выделить всёкод C++
1:
    
a = b++++;



Код

#include <string>
#include <iostream>


struct Int
{
    int value;

    Int () : value(0){}

    Int operator ++ (int){
        Int copy(*this);
        ++value;
        return copy;

    }
};

int main(){

Int a;
Int b = a++ ++ ++ ++ ++ ++ ++ ++; 

std::cout << a.value << std::endl; // 1
std::cout << b.value << std::endl; // 0
}


Добавлено @ 21:04
При замене Int operator++(int) на const Int op++ код уже не компилируется.

Автор: DjoNIK 17.9.2007, 21:14
Прошу прощения за  smile , но другой мотивации, кроме как приведенного кода, я придумать не могу!
Придется воспринять это за аксиому без логического  объяснения.
 smile 

Автор: Evgen24 17.9.2007, 23:12
Цитата(DjoNIK @  17.9.2007,  21:31 Найти цитируемый пост)
А от каких проблем это может уберечь?

Эффективность этого приема проявляется при написании больших программ. Лучше сразу обозначить константами те переменные которые в функции не должны менятся, чем потом неделю искать ошибку!
Вообще в больших программах, чем больше ты констант из переменных в функциях вводишь, тем меньше ошибок! 

Автор: DjoNIK 18.9.2007, 00:26
Цитата

Вообще в больших программах, чем больше ты констант из переменных в функциях вводишь, тем меньше ошибок!

В принципе и в небольших программах - это тоже выручает! Но лучшее - враг хорошего!!! Можно ведь и перестараться.

Автор: archimed7592 18.9.2007, 05:04
Цитата(Mayk @  17.9.2007,  20:52 Найти цитируемый пост)
Ну не int'ы же.  smile  

Mayk, ключевое слово "привычка". Дальше думай сам.

Автор: DjoNIK 18.9.2007, 10:40
То есть ставить const в возвращаемом значении - правило; не надо ставить лишь в редких случаях (исключения).
Но не наоборот.
Просто до этого топика я ни разу такой конструкции не видел. Она мне кажется экзотической и мое сознание сознание отказывается воспринимать это как истину! Но я что-нибудь придумаю с вашей помощью  smile 

Автор: archimed7592 18.9.2007, 10:55
Цитата(DjoNIK @  18.9.2007,  10:40 Найти цитируемый пост)
То есть ставить const в возвращаемом значении - правило; не надо ставить лишь в редких случаях (исключения).

Для кого как. Мне с этим правилом легче живётся smile.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)