Я должен возвратить bool или константу bool?

Вы посмотрели проект Apache Felix? Это имеет целую путаницу плагинов, включая плагин пакета , который должен сделать то, что Вы хотите.

кроме того, Вы попробовали эти тег с ? Это должно иметь желаемый эффект слияния пути к классу в Вашу декларацию.


  org.apache.maven.plugins
  maven-jar-plugin
  ...
  
    
      true
      src/main/resources/META-INF/MANIFEST.MF
    
  
  ...

21
задан Jonathan Leffler 18 September 2009 в 11:57
поделиться

10 ответов

Итак, вы знаете, что это правильно, вы сразу после «Голоса властей»? Предотвращение случайного изменения временных конструкций очень ценно. В общем, вы должны объявить как можно больше вещей const , это защитит вас от множества несчастных случаев и даст оптимизатору полезные советы.

У вас есть копия Скотта Мейерса "" Эффективный C ++ "вокруг?" Укажите им на пункт 3 (стр. 18 в третьем издании);)

Здесь приводится пример

class Rational {...};
const Rational operator* (const Rational& lhs, const Rational& rhs );

if( (a * b) = c ) // declaring operator *'s return value const causes error to be caught by compiler
28
ответ дан 29 November 2019 в 06:07
поделиться

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

35
ответ дан 29 November 2019 в 06:07
поделиться

Обратите внимание, что if ((a * b) = c) в любом случае не будет компилироваться для встроенных типов, поэтому здесь очень важно, говорим ли мы встроенные типы (в вашем вопросе задается bool ) или определяемые пользователем типы.

Для встроенных типов это вообще не имеет смысла, поэтому использовать его не следует. Что касается типов, определяемых пользователем, я нахожусь в лагере jalf: что, если вызывающий хочет изменить возвращаемый объект?

Я не уверен, что if ((a * b) = c) - такой хороший аргумент для возврата константных пользовательских типов, поскольку я не могу вспомнить, когда в последний раз видел, как компилятор не предупреждает об этом .

19
ответ дан 29 November 2019 в 06:07
поделиться

Чтобы быть более конкретным, константными могут быть только «объекты». Стандартное определение «объекта» в C ++ включает все, на что ссылается lvalue («имеет имя»), и временные объекты типа класса. Логическое возвращаемое значение - это rvalue неклассового типа, поэтому в этом случае совместимый со стандартами компилятор просто проигнорирует "const". Как уже говорили другие, в данном контексте это бесполезно.

16
ответ дан 29 November 2019 в 06:07
поделиться

Когда вы возвращаете ссылку на переменную-член, имеет смысл сделать ее константой. Здесь вы возвращаете копию, поэтому в константе нет необходимости.

14
ответ дан 29 November 2019 в 06:07
поделиться

Модификатор const используется только для возвращаемых типов, которые возвращаются по ссылке (либо как ссылка const SomeObject & , либо через указатель const SomeObject * ), поэтому вызывающий не сможет изменить объект с помощью ссылки / указателя. Примитивные типы возвращаются значением , что означает, что вызывающий объект получает копию объекта, а не сам объект.

Следовательно, const является не совсем подходит для типов возвращаемых значений. Поскольку копия находится вне контроля вызываемой функции, вызываемая функция не должна указывать вызывающей стороне, что ее нельзя изменить.

7
ответ дан 29 November 2019 в 06:07
поделиться

Это совершенно не имеет значения. Следовательно, консенсус состоит в том, чтобы вернуть только bool .

Причина, по которой это не имеет значения, в том, что вы все равно не можете вызывать неконстантные функции-члены; bool не является классом или структурой.

2
ответ дан 29 November 2019 в 06:07
поделиться

As bool копировать, то же самое, ставить const или нет. Кроме того, у вас могут возникнуть проблемы с компиляцией.

2
ответ дан 29 November 2019 в 06:07
поделиться
const bool func();
bool f = func();

0 ошибок, 0 предупреждений. Что вы сделали, кроме ненужной инфляции кода?

0
ответ дан 29 November 2019 в 06:07
поделиться

Константный тип возвращаемого значения

РЕЗЮМЕ:

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

1
ответ дан 29 November 2019 в 06:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: