Использовать условие Существует в задании копирования.
<CreateItem Include="*.xml">
<Output ItemName="ItemsThatNeedToBeCopied" TaskParameter="Include"/>
</CreateItem>
<Copy SourceFiles="@(ItemsThatNeedToBeCopied)"
DestinationFolder="$(OutputDir)"
Condition="Exists('%(RootDir)%(Directory)%(Filename)%(Extension)')"/>
Вы получили ответы, в которых упоминается, что ctor не может изменять то, что копируется - и они правы, добавление константы туда действительно имеет такой эффект.
Более важно Однако временный объект не может привязаться к неконстантной ссылке. Копирующий ctor должен принимать ссылку на константный объект, чтобы иметь возможность делать копии временных объектов.
Поскольку вы не собираетесь изменять аргумент other
внутри объекта копирования, поскольку он является const.
Когда вы сделали x = other.x
по сути означает this-> x = other.x
. Таким образом, вы изменяете только этот
объект, просто копируя значения из другой
переменной. Поскольку другая переменная
здесь доступна только для чтения, она передается как const-ref.
Традиционный copy-ctor и его друзья принимают параметр const &
по причинам, указанным выше. Однако вам также следует поискать move-semantics и ссылки на r-значение (чтобы быть частью C ++ 0x, если все пойдет хорошо), чтобы узнать, почему и когда вы будете использовать copy-ctors без параметра const и
.
Its not specific to copy constructor. In any function if you are not going to modify the internal state of the object then object will be passed as const
.
Vector(const Vector& other)
{
//Since other is const, only public data member and public methods which are `const` can be accessed.
}
Идея конструктора копирования заключается в том, что вы копируете содержимое объекта other
в объект this
. Константа нужна для того, чтобы вы не изменили объект other
.
Это также может пригодиться, если вы хотите скопировать объект, на который у вас есть только константная ссылка, например,
...
const Vector& getPosition();
...
Vector* v = new Vector(getPosition());
Если бы это не было для Vector (const Vector & other)
этот пример приведет к синтаксической ошибке.