Я думаю, что вопрос довольно прост, и его можно сократить в нескольких словах, таких как «Какой оператор автоматически перегружен компилятором?» Некоторые детали, способные объяснить мне Почему < /strong> работает так, как есть. Я уверен, что кто -то из вас может помочь мне выяснить, что происходит.class MyPair : public pair
{
public:
MyPair()
{
pair();
}
};
< /code>
Пока что ничего странного, как широко обсуждается в потоке
Каковы все функции-члены, созданные компилятором для класса? Это происходит постоянно? но не конструктор по умолчанию < /strong> просто потому, что я переосмыслил свой собственный. Оператор назначения сразу после создания объекта, как показано здесь: < /p>
//default copy constructor
MyPair mypair1 = mypair;
MyPair mypair2;
//default assignment operator
mypair2 = mypair1
< /code>
До сих пор все работает так, как разработано. Следует: < /p>
int main()
{
pair aPair;
MyPair mypair;
string mystring("test");
//ERROR
mypair = mystring;
return 0;
}
< /code>
, прежде чем я проверил эту строку кода, я ожидал, что компилятор жаловался бы (потому что я не предоставил ему никакой явной перегрузки operator = < /strong>, поэтому сам по себе не может назначить строку созданному объекту), и действительно, он вернул мне довольно эксплуатирующую ошибку, например: < /p>
test.cpp:36:13: error: no match for ‘operator=’ in ‘mypair = mystring’
test.cpp:36:13: note: candidate is:
test.cpp:7:7: note: MyPair& MyPair::operator=(const MyPair&)
< /code>
Теперь представьте себе, чтобы завершить класс MyPair, добавив следующий метод: < /p>
MyPair(const string& astring)
{
pair(astring,string());
}
< /code>
Внезапно код начинает компилировать, не давая больше никакой ошибки.
мне кажется, что приведенный выше метод предоставил компилятору какой -то вид Умность; Он начал генерировать недостающие mypair & mypair :: operator = (const string & s) < /strong>. < /p>
Я должен признать, что это звучит очень блестяще, но Я не могу точно понять, почему это происходит.
это означало бы, что для каждого дополнительного конструктора я вставляю в MyPair, Coplier генерирует дополнительный перегруженный operator = < /strong>, что заставляет мой класс быть Скопируйте назначенное на указанную ссылку только из -за этого?
Подробнее здесь: https://stackoverflow.com/questions/216 ... e-compiler
C ++ равный оператор автоматически переопределен компилятором ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
В чем разница между компилятором C и компилятором C++ компилятора Microsoft C/C++?
Anonymous » » в форуме C++ - 0 Ответы
- 34 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Разница между компилятором Mono C# и компилятором MS C# в отношении области применения
Anonymous » » в форуме C# - 0 Ответы
- 31 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как сравнить два списка объектов, используя равный метод объекта в Python
Anonymous » » в форуме Python - 0 Ответы
- 9 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как сравнить два списка объектов, используя равный метод объекта в Python
Anonymous » » в форуме Python - 0 Ответы
- 9 Просмотры
-
Последнее сообщение Anonymous
-