1110 Это то, чего люди просто не могут ожидать. Предположим, у вас есть этот код:
int x = 5;
foobar(x);
Какое значение x
после вызова функции? Большинство людей ожидают, что оно все еще будет 5
, поскольку, за исключением неопределенного поведения, оно не может измениться при передаче по значению. В C нет даже передачи по ссылке, поэтому значение всегда будет 5
. Теперь в C ++ внезапно происходит передача по ссылке, и только из этого фрагмента кода вы не можете узнать, изменится ли x
после вызова функции. Для этого вам нужно взглянуть на фактическую подпись foobar
.
Сам по себе он не «опасен», но при плохом использовании может привести к неясному и вводящему в заблуждение коду. Особенно, если у вас есть набор параметров, некоторые из которых не соответствуют параметрам, а некоторые нет, а некоторые имеют вводящие в заблуждение имена. В вашем примере имена параметров содержат out
, чтобы указать, что они являются выходными параметрами, и это хороший стиль, который уменьшает эту опасность.
Сравните это со следующим фрагментом отсюда , объясняющим передачу по ссылке, как это происходит в C #:
void Method(ref int refArgument)
{
refArgument = refArgument + 44;
}
int number = 1;
Method(ref number);
Console.WriteLine(number);
// Output: 45
Здесь вы сразу видите, что он передается по ссылке, потому что он говорит ref number
.
Мы перенастраиваем выходной каталог проектов быть../../отлаживать (или../../выпускать) Наш освобождает, помещаются в эти каталоги также.
Мы устанавливаем ссылочные пути в каждом проекте быть каталогом Debug или Release соответственно (эта установка сохраняется в пользовательских файлах, так как это - абсолютная, а не относительная ссылка),
Мы сохраняем ссылки проекта как ссылки проекта, Все dll ссылки имеют копию локальная ложная и определенная ложь версии, если они не системный уровень dlls, мы знаем, будет в GAC на всех развернутых машинах.
Это работает, обработка и ручные сборки в имитаторе IDE написали сценарий сборок из командной строки (использующий MSBuild)
Тестовые проекты не для развертывания не направляют свой вывод к централизованному каталогу Debug|Release, они просто используют стандартное местоположение по умолчанию (и действительно используйте копию, локальную для предотвращения проблем с блокировкой),
Версии библиотеки могут быть изменены автоматизированным процессом сборки, заменяющим dlls в каталогах Debug и Release.
Я рекомендую создать к..\..\Build, если Ваше приложение распространено через решения. (Если у Вас только есть одно решение, можно рассмотреть..\Build.) Visual Studio, по умолчанию, возьмет ссылочные файлы в, она произвела папку. При создании без VS с помощью MSBuild, тем не менее, необходимо добавить папку сборки как ссылочный путь как показано в примере ниже:
<Target Name="BuildApp">
<MSBuild
Projects="@(ProjectReference)"
Targets="Rebuild"
Properties="ReferencePath=..\..\Build;$(LibraryFolder)" >
</MSBuild>
<OnError ExecuteTargets="BuildFailed" />
</Target>
Пример также берет меня к моему второму аргументу. Я не думаю, что необходимо использовать папку сборки в качестве папки библиотеки, так как это может привести к отдельным проектам, ошибочно перезаписывающим блоки библиотеки, например, при помощи Локальной Копии. Необходимо иметь строгий контроль над версиями библиотеки, таким образом, я предлагаю, чтобы Вы сохранили разделенным. (Разработчики должны были бы добавить этот путь в VS как ссылочный путь.)
Можно также принять решение отделиться..\..\Build в..\..\Release и..\..\Debug, как предложено ShuggyCoUk.
Мне нравится высокоуровневая установка папки Bin Lib, которая распространена в основанных на Unix системах, способом переместиться в этот тип системы также сделает Вашу жизнь инженера выпуска намного легче также. Создание установщика очень упрощено, только имея необходимость вытащить все из одной папки. Dll затем вошел бы в мусорное ведро..