видимость по умолчанию класса C++ / участники структуры

ref и out оба позволяют вызываемому методу изменить параметр. Различие между ними - то, что происходит прежде , Вы выполняете вызов.

  • ref средства, что параметр имеет значение на нем прежде вход в функцию. Вызванная функция может считать и или изменить значение любое время. параметр входит, затем выходит

  • out средства, что параметр не имеет никакого официального значения перед входом в функцию. Вызванная функция должна инициализировать его. параметр только выходит

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

// This is not C#
public (bool, string) GetWebThing(string name, ref Buffer paramBuffer);

// This is C#
public bool GetWebThing(string name, ref Buffer paramBuffer, out string actualUrl);

Вот более подробный список эффектов каждой альтернативы:

Прежде, чем назвать метод:

ref: вызывающая сторона должна установить значение параметра прежде, чем передать его вызываемому методу.

out: метод вызывающей стороны не требуется установить значение аргумента прежде, чем назвать метод. Скорее всего, Вы не были должны. На самом деле любое текущее значение отбрасывается.

Во время вызова:

ref: вызываемый метод может считать аргумент в любое время.

out: вызываемый метод должен инициализировать параметр прежде, чем считать его.

Удаленные вызовы:

ref: текущее значение упорядочивается к удаленному вызову. Дополнительная производительность стоится.

out: Ничто не передается удаленному вызову. Быстрее.

С технической точки зрения, Вы могли всегда использовать ref вместо [1 114], но out позволяет Вам быть более точными о значении аргумента, и иногда это может быть намного более эффективно.

52
задан S I 7 August 2009 в 14:52
поделиться

3 ответа

C ++ был представлен как надмножество C. Структуры были перенесены из C, где семантика их членов была общедоступной. Существует огромное количество кода C, включая библиотеки, которые также хотели работать с C ++, которые используют структуры. Классы были введены в C ++, и, чтобы соответствовать философии инкапсуляции объектно-ориентированного программирования, их члены по умолчанию являются закрытыми.

82
ответ дан 7 November 2019 в 09:23
поделиться

Поскольку класс является обычным способом выполнения объектной ориентации, это означает, что переменные-члены должны быть частными и иметь открытые методы доступа - это хорошо для создания низкой связи . С другой стороны, структуры должны быть совместимы со структурами C, которые всегда являются общедоступными (в C нет понятия публичного и частного) и не используют методы доступа / мутаторы.

9
ответ дан 7 November 2019 в 09:23
поделиться

Возможно, для обратной совместимости со структурами C. Таким образом, структуры, объявленные в коде C, будут продолжать работать таким же образом при использовании в коде C ++.

1
ответ дан 7 November 2019 в 09:23
поделиться
Другие вопросы по тегам:

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