2013-09-01 2 views
3

Я один из тех людей, которые думают «если он не должен меняться, тогда это должно быть const». Возможно, я делаю это const, но, поскольку мои возвращаемые функции обычно не могут меняться, я объявляю, что все мои функции возвращают const. (Если они не вернут void, конечно, имеет ли смысл вернуться к const void?)g ++ компилятор, игнорирующий const return type

Возможно, вы, наверное, думаете, что я немного ореховый, и я изнашиваю свою клавиатуру, набирая вещи, мне не нужно , или что возвращение const имеет смысл, потому что вы уже используете его самостоятельно. Или, может быть, вы не думаете ни о тех вещах, в которых я неправильно догадался.

Я скомпилировал свою программу с помощью g ++ 4.8 и включил переключатель компилятора -Wextra. При этом g ++ предупреждает меня, что он игнорирует каждый один из моих операторов возврата. Ни один из них не возвращается const. Это не имеет никакого значения после компиляции, но я хотел знать, есть ли способ заставить g ++ компилировать и обратить внимание на мои возвращаемые типы const.

Что еще более важно, почему g ++ игнорирует const - или это просто потому, что я псих, а g ++ думает, что возвращение const не нужно?

В соответствии с предложением: Пример ...

inline const bool collisionTest(...) { ... }

warning: type qualifiers ignored on function return type

+0

Вы можете добавить простой пример кода на свой вопрос? И текст предупреждения? –

+0

@gx_ Хорошо, но почему? – user3728501

+0

По моему опыту, const полезен в следующих случаях: константные указатели или ссылки, константные функции-члены, константы времени компиляции (например, const int size = 10) и глобальные переменные const (static const std :: string name = "harry «). Все остальное не имеет большого значения. –

ответ

9

Он не игнорирует его, это просто бесполезно, если вы возвращаетесь примитивных типов по значению.

Возврат по значению означает, что вы не можете изменять все, что бы вы ни вернули, поскольку это значение r. Константа будет избыточной.

См:

int foo(); 

Как бы вы изменили возвращение?

foo() = 4; 

даст ошибку компилятора.

Если вы возвращаете ссылку, хотя, сопзЬ имеет значение:

int& foo(); 
const int& goo(); 

foo() = 42; //okay 
goo() = 42; //error 
+0

В C++ 11 вы можете, хотя я думаю, что ссылка на const r бесполезна – aaronman

+0

Ах спасибо, я не понял, что дало бы ошибку компилятора! – user3728501

+0

@aaronman Почему разница в C++ 11? – user3728501

Смежные вопросы