Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Почему не вызывается конструктор копирования? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Поменять соседние слова местами http://www.cyberforum.ru/cpp-beginners/thread186801.html
задание: Дано предложение. Вывести его на экран, меняя местами каждые два соседних слова. Никак не могу сообразить что нужно делать, что использовать. уде не 1-й день мучаюсь над этой задачей....
C++ Класс Rectangle совпадает с функцией Rectangle Пишу свой класс Rectangle, который при отрисовки использует функцию Rectangle из GDI. Возникает ошибка из-за того, что имена одинаковые. Но менять имя своего класса я, естественно, не хочу... Как... http://www.cyberforum.ru/cpp-beginners/thread186792.html
C++ Программа со структурами.
Не могли бы Вы помочь мне с написанием этой программы. Описать структуру с именем NOTE, содержащую следующие поля: NAME - фамилия, имя; TEL - номер телефона; BDAY - день рождения (массив из...
C++ возврат по ссылкам
На защиту лаб.работы препод требует рассказать о возврате по ссылкам. Зачем они? Как они описываются, какой у них плюс?
C++ упорядочен ли массив по неубыванию, по невозрастанию или не упорядочен вообще http://www.cyberforum.ru/cpp-beginners/thread186787.html
Блин вест мозг себе уже вынес, никак не могу решить задачу(((. Помогите кто чем может. Задача:Написать подпрограмму,которая проверяла бы, упорядочен ли массив по неубыванию (Xi<=Xi+1),по...
C++ Интегрирование по методу Симпсона написать программу которая посчитала бы интеграл сos(x+x^3)dx по методу симпсона с точностью до одной тысячной.буду оч.благодарен))) подробнее

Показать сообщение отдельно
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 1
12.05.2011, 18:12
Тоже заинтересовался этим делом, решил посмотреть дизасемблированный вид вот этого кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
 
using namespace std;
 
class arr
{
public:
    arr(int number) {};
    arr(const arr &obj);
};
 
 
arr::arr(const arr &obj)
{
    cout << "Вызов копирующего конструктора" << "\n";
}
 
 
arr get_object (int number)
{
    arr obj (number);
    return obj;
}
 
 
 
 
int main()
{
    arr x=get_object(15);
    return 0;
}
Вобщем там в ф-ции get_object() вызывается конструктор с адресом (а в конструктор первым аргументом незаметно передается адрес (this)) объекта x из функции main(). Причем, наплевав на соглашение cdecl, параметры передаются в регистрах (тоже оптимизация). Странно, что при таком подходе компилятор вызов ф-ции оставил, мог бы тоже убрать

Добавлено через 41 минуту
Цитата Сообщение от fasked Посмотреть сообщение
то надо помечать переменную как volatile
Конструктор копирования принимает в качестве аргумента const Type&, а автоматическое привидение volatile к const запрещено, поэтому:
Код
main.cpp In function 'arr get_object(int)':
main.cpp|23|error: no matching function for call to 'arr::arr(volatile arr&)'
main.cpp|13|note: candidates are: arr::arr(const arr&)
main.cpp|8|note:                 arr::arr(int)
=== Build finished: 1 errors, 0 warnings ===|
вобщем я так и не смог своими силами заставить компилятор вызвать конструктор копирования...

Добавлено через 2 минуты
пробовал так:
C++
1
2
3
4
5
arr get_object (int number)
{
   volatile arr obj (number);
    return const_cast<const arr>(obj);
}
результат:
Код
main.cpp|23|error: invalid use of const_cast with type 'const arr', which is not a pointer, reference, nor a pointer-to-data-member type
=== Build finished: 1 errors, 0 warnings ===
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru