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

Объясните неявное преобразование в этом случае - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Дружественные функции. Считайте текст и выведите на экран исходный текст, а затем предложения, содержащие определенное количество слов http://www.cyberforum.ru/cpp-beginners/thread786848.html
считайте текст и выведите на экран исходный текст, а затем предложения, содержащие определенное количество слов. При выполнении данного задания необходимо использовать дружественные функции. Переменные для ввода исходных данных обьявить как защищенные. Я пробывала сделать у меня не получается, помогите пожалуйста! #include <iostream> #include <string> using namespace std; class text {...
C++ Создать класс Account. Задача из книги Дейтелов "Как програмировать на С++" Начал изучение С++, прочитал главу "Введение в классы и объекты" в книге Дейтелов "Как програмировать на С++", ничего не поняв прочитал её ещё раз. Приступил к заданиям после главы, несколько раз прочитав задание и приблизительно поняв что нужно сделать приступил. Задание звучит так: "Создайте класс с именем Account, которым мог бы воспользоваться банк для представления банковских счетов своих... http://www.cyberforum.ru/cpp-beginners/thread786823.html
C++ Копировать структуру в массив
Добрый день , при помощи кода получаю имя каталога , решил сделать рекурсивный вывод всех каталогов и подкаталогов , и соответственно цикл в цикле. Как можно метод Структуры entry->d_name копировать в символьный массив ? #include <stdio.h> #include <sys/types.h> #include <dirent.h> #include <iostream> using namespace std; int main() { DIR *dir;// для работы с файлами переменная...
C++ Вычисление логического выражения
Доброго времени суток! Имеется программа для вычисления введенного с клавиатуры логического выражения, состоящего из операций & (“и”), | (“или”), > (“больше”), < (“меньше”), = (“равно”) и скобок. Необходимо добавить операции "=" и "<". А также помогите присвоить приоритеты операциям. Приоритет операции “и” равен 3, приоритет “или” – двум, приоритеты остальных операций равны 1. Код программы:...
C++ Воспользуйтесь рекуррентным соотношением xn = (xn-1)2 mod m http://www.cyberforum.ru/cpp-beginners/thread786791.html
2. Создайте функцию, которая принимает в качестве аргумента номер псевдослучайного числа, полученного при помощи генератора BBS, и возвращает это число x0=20 и m=1081. Воспользуйтесь рекуррентным соотношением xn = (xn-1)2 mod m.
C++ Как отправить сообщение в окошко дебаггера в Visual Studio ? Собственно помнится есть какая - то команда для вывода сообщения в окошко дебагера....Может кто напомнит? подробнее

Показать сообщение отдельно
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
17.02.2013, 02:44     Объясните неявное преобразование в этом случае
Цитата Сообщение от mzarb Посмотреть сообщение
должен будет запустить 4 конструктора копирования?
При проверке показывает один, но это наверное из-за того что вы говорили, то есть компилятор оптимизирует, так что не могу проверить правильно ли я понял.
почитайте какую-нибудь книгу по c++ (более менее не для чайников)
C++
1
A a = b;
это неявный вызов конструктора A::A(const B& b);
C++
1
2
A a;
a = b;
вызов operator=(const B& b), либо если такого нет, то воздание временного объекта a_ из b
A a_(b);
а потом вызов оператора присваивания
a = a_;

впрочем, для одного и того же кода, разные компиляторы сделали мне разные вызовы =)

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>
#define DEBUG Debug(__FUNCTION__, __LINE__)
 
class Debug {
public:
    Debug (const char* f, int line) { std::cout << f << " (" << line << ")> "; }
    ~Debug () { std::cout << std::endl; }
    template <typename T> void operator << (const T& t) { std::cout << t; }
};
 
class B {
 
};
 
class C {
 
};
 
class A {
public:
  A (const B& b) { DEBUG; }
  A (const A& a) { DEBUG; }
  void operator= (const C& c) { DEBUG; }
};
 
int main () {
  DEBUG << "create b";        B b;
  DEBUG << "create c";        C c;
  DEBUG << "create a from b"; A a = b;
  DEBUG << "copy b to a";     a = b;
  DEBUG << "copy c to a";     a = c;
}
http://codepad.org/ygk2FJbY
Bash
1
2
3
4
5
6
7
8
9
main (28)> create b
main (29)> create c
main (30)> create a from b
A (22)> 
A (23)> 
main (31)> copy b to a
A (22)> 
main (32)> copy c to a
operator= (24)>
http://liveworkspace.org/code/3pwQyT$3
Bash
1
2
3
4
5
6
7
8
main (28)> create b
main (29)> create c
main (30)> create a from b
A (22)> 
main (31)> copy b to a
A (22)> 
main (32)> copy c to a
operator= (24)>
Поэтому explicit рулит

http://alenacpp.blogspot.com/2009/09/blog-post.html
 
Текущее время: 12:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru