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

Время приобретения объектом константности - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как отключить автодобавление закрывающих скобок http://www.cyberforum.ru/cpp-beginners/thread1231070.html
Как отключить автодобавление закрывающих скобок в С++? (Например, после символа { или соответственно.) В окне сервис - параметры редактора отключил почти всё - не помогает.
C++ Имитация игры с костями, вероятность шести - наибольшая нужно создать функциу которая генерирует число от 1 до 6, вероятность что выпадет 6 20% а число 1-5 16% подскажите пожалуйста http://www.cyberforum.ru/cpp-beginners/thread1231048.html
C++ Перегрузка оператора "<<" для вывода пользовательских классов
Всем доброго времени суток. Пытаюсь сделать перегрузку оператора "<<" для того, чтобы можно было выводить объекты пользовательского класса таким образом: cout <<object_my_class; //или так cout <<object_my_class + object_my_class; Что я для этого сделал: переопределил оператор + для класса. Функция возвращает объект класса: //в .h
Ошибки при работе с шаблонами C++
Всем привет. Пишу упрощенный List с использованием шаблонов. Но в итоге я получаю вот такие сообщения про ошибки. "class template has already been declared as a non-class template" - указывает на конец файла “multiple template parameter lists are not allowed" - указывает на template<class U> Подскажите пожалуйста где я допустил ошибку... #ifndef _EVENT_LIST_H_ #define _EVENT_LIST_H_
C++ Хранение информации о многомерном массиве http://www.cyberforum.ru/cpp-beginners/thread1231018.html
При передаче в функцию многомерного массива требуется обязательно указывать все его соответсвующие размерности, кроме первой. Хранится где нибудь данная информция при выполнении программы или даннаю информацию нужна только на стадии компиляция для избежания ошибок?
C++ Deadlock и racecondition проверить код класс принимает функцию и количество потоков...и все время поддерживает одновременное выполнение 10 потоков этой функции...интересуют ошибки связанные с многопоточным программированием...может еще подскажите как лучше сделать?..) заголовочный файл class gthread { typedef void (*pFunc) (); public: gthread(pFunc func, unsigned short int, unsigned short int); ~gthread(); void start(); подробнее

Показать сообщение отдельно
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
20.07.2014, 18:36  [ТС]     Время приобретения объектом константности
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
См ниже что вызовется при вызове SomeFunc1
Так то да, вызовется копирующий конструктор. Однако в моем примере кода на вход someFunc подается объект из некого фабричного help-метода ( на практике это может быть std::make_pair, std::make_tuple...).
Если расширить ваш класс так
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
using namespace std;
class CSomeClass
{
    public:
    CSomeClass();
    CSomeClass(const CSomeClass &pCopy);
    friend void SomeFunc1(const CSomeClass  obj);
    friend void SomeFunc2(const CSomeClass &obj);
 
    CSomeClass(CSomeClass &&other) : m_variable(other.m_variable)
    {
        other.m_variable = 0;
        std::cout << "Move Constructor" << std::endl;
    }
    int m_variable;
};
 
CSomeClass::CSomeClass(){
    cout<<"DEFAULT CONSTRUCTOR"<<endl;
}
 
CSomeClass::CSomeClass(const CSomeClass &pCopy){
    cout<<"COPY CONSTRUCTOR"<<endl;
}
 
void SomeFunc1(const CSomeClass  obj){
    cout<<"SomeFunc1"<<endl;
}
 
void SomeFunc2(const CSomeClass &obj){
    cout<<"SomeFunc2"<<endl;
}
 
CSomeClass someClassFactory()
{
    CSomeClass csc;
    return csc;
//    return std::move(csc);
}
 
int main()
{
    CSomeClass pObj;
    SomeFunc1(pObj);
    SomeFunc2(pObj);
    std::cout << "-------------------------------------"   << std::endl;
 
    SomeFunc1( someClassFactory() );
 
    return 0;
}
При вызове SomeFunc1 не вызывается копирующего конструктора, сработала NRVO.
Но если в someClassFactory() раскомментировать 2 вариант return'a то сработает move-конструктор и опять же не будет копирования. Как видно, в move-конструкторе изменяется m_variable, даже если и параметр функции someFunc1 объявлен как const. А это и есть ответ на мой вопрос, т.е. объект приобретает константность после перемещения и move constructor все-таки сработает.

К сожаления codepad.org не распознает && поэтому могу только предоставить свой вывод в gcc.
Время приобретения объектом константности
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru