Я хочу переопределить оператор «=», но у меня есть проблема, у класса есть член const, который я хочу изменить, когда я использую «=», я считаю, что деконструкция объекта и построение новый объект может быть обработан, но «это» не может быть изменено. Так вы бы мне помогли?Оператор переопределения C++ и этот
ответ
Вы можете пометить член, который хотите изменить mutable
. Это цель ключевого слова.
Конечно, вы можете разорвать неявный контракт пользователям вашего класса, который operator=
не изменит класс ...
На самом деле, я просто хочу использовать «=», чтобы скопировать константный элемент объекта в другой. Я хочу знать, как использовать конструктор и конструктор для его создания. – TonyWen
@TonyWen: Вы можете явно вызвать деструктор, а затем использовать место размещения 'new', но это не будет безопасным для исключений. –
@BenVoigt: без риска - это не весело ... –
Вы можете использовать Pimpl идиомы. Например:
class Foo_impl
{
public:
Foo(int x, int y, int z)
:x_(x), y_(y), z_(z)
{}
const int x_;
int y_,z_;
};
class Foo
{
public:
Foo(int x, int y, int z)
:impl_(new Foo_impl(x,y,z))
{}
Foo & operator=(Foo rhs)
{
swap(rhs);
return *this;
}
void swap(Foo & rhs)
{
std::swap(impl_, rhs.impl_);
}
// still need copy constructor
private:
std::unique_ptr<Foo_impl> impl_;
};
Я действительно не вижу смысла в этом.
- 1. Оператор переопределения C#
- 2. Оператор переопределения C++ const char *
- 3. Оператор и метод Splat переопределения
- 4. Оператор переопределения C++ = вызов метода ToInt()
- 5. этот указатель, оператор = и оператор ++
- 6. оператор переопределения с qtscript
- 7. Оператор удаления переопределения
- 8. Оператор переопределения по пространствам имен
- 9. C++: как этот оператор анализируется?
- 10. Что делает этот оператор C?
- 11. Что означает этот оператор C++?
- 12. Оператор индекса переопределения для смещения
- 13. Оператор if для переопределения класса
- 14. Оператор переопределения == (равенство) в NHibernate?
- 15. Оператор переопределения присваивания в JS
- 16. Экспериментальный оператор CoffeeScript и этот
- 17. цикл вместе с, если оператор переопределения PHP
- 18. Оператор переопределения для встроенных типов с Lua API в C
- 19. Оператор присваивания переопределения в Lua с API C#
- 20. Оператор переопределения C++ << в унаследованном классе
- 21. Оператор переопределения >> для класса струн
- 22. Оператор C++ + и оператор + = перегрузка
- 23. Как переопределить этот виртуальный оператор в C++?
- 24. Как бы вы упростили этот оператор C#?
- 25. Оператор переопределения загрузки карты рефакторинга в XNA
- 26. Что делает этот оператор MySQL?
- 27. Как оптимизировать этот оператор выбора?
- 28. Как называется этот оператор «^»?
- 29. C# Неявный оператор преобразования и оператор/as
- 30. Что этот оператор * = -1
Я полагаю, что просто не маркировка элемента const не является вариантом? Почему нет? –