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

No init for const! - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как оформить ввод данных в функцию так что бы следующая за ней их использовала? http://www.cyberforum.ru/cpp-beginners/thread1503657.html
Не могу понять как ввод данных поместить в функцию так что бы следующая за ней их использовала #include <iostream> #include <conio.h> #include <clocale> using namespace std; int pow(int a,int n,int res){ res=a; while(n>1){ res*=a; n--;
C++ Расписать по функциям Я совершенный новичок. Начали проходить функции, решил задачу, осталось выписать ее по функциям. Подсобите кто опытный, что бы я в дальнейшых решениях сверялся. #include<iostream> #include<windows.h> #include <iomanip> #include<ctime> using namespace std; int main(){ srand(time(0)); const int n=5; int arr={0}; http://www.cyberforum.ru/cpp-beginners/thread1503634.html
C++ Впечатления от знакомства с чистым Си
Всем здрасьте, порядка полугода назад так захотел изучать Си++, что прочел 1000+ страничную книгу Лафоре об ООП + Си++. Книга понравилась, но почувствовал, что мне необходимо окунуться в самые дебри языка. Прочел книгу кернигана и ритчи по чистому Си, книга хорошая, но ощущения недосказанности все равно сохранилось. Пошел еще дальше, нашел книгу по Си для отморозков, в которой о языке...
Зачем нужны ассемблерные вставки в Си (msvs) ? C++
Объясните мне, человеку, который пока не знает ассемблер, но который хочет его в дальнейшем изучать, на кой черт нужны ассемблерные вставки в Си++ (msvs) ?
C++ Создать название документа из переменной http://www.cyberforum.ru/cpp-beginners/thread1503547.html
Я создаю файл, это у меня в цикле std::ofstream outfile ("i.txt"); и i изменяется от 1 до 173 Как мне таким образом создать 173 файла ?
C++ Как скопировать проект в другой проект для дальнейшей работы над новой версией (VS)? (Visual Studio 2013) Например я сделал один проект, пусть это будет проект версия №1, затем я захотел улучшить проект версии №1 и сделать проект версии №2, на основе первого проекта, вот я создал пустой проект, обозвал его проект версия №2, как мне скопировать из первого проекта все папки, хэдэры и .срр и т.д, можно как-нить это сделать не в ручную? или может я вообще не верно мыслю в создании... подробнее

Показать сообщение отдельно
DrOffset
6851 / 4062 / 927
Регистрация: 30.01.2014
Сообщений: 6,859
23.07.2015, 13:28     No init for const!
Цитата Сообщение от Тамика Посмотреть сообщение
То есть объявить константу, а потом её инициализировать. Правда, только один раз.
Можно проэмулировать. Правда частично уже в рантайме.

Вот тебе пример "на поиграться":
Кликните здесь для просмотра всего текста

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include <iostream>
#include <stdexcept>
#include <string>
 
static struct default_init_tag_ {} default_init_tag;
 
template <typename T>
struct const_var
{
    template <typename V>
    const_var(V const & x) 
        : wasInit_(false) 
    {
        init(x);
    }
    const_var(const_var const & x) 
        : wasInit_(false)
    {
        if(x.wasInit())
        {
            init(x);
        }
    }
    const_var(default_init_tag_) 
        : wasInit_(false)
    {
        init();
    }
    const_var() 
        : wasInit_(false)
    { }
    
    const_var const & operator=(const_var const & x) const
    {
        if(this != &x && x.wasInit())
        {
            init(x);
        }
        return *this;
    }
    template <typename V>
    const_var const & operator=(V const & x) const
    {
        init(x);
        return *this;
    }
    template <typename V>
    const_var const & operator=(const_var<V> const & x) const
    {
        if(this != &x && x.wasInit())
        {
            init(x);
        }
        return *this;
    }
    const_var const & operator=(default_init_tag_) const
    {
        init();
        return *this;
    }
    
    operator T const &() const
    {
        if(wasInit_)
        {
            return var_.value;
        }
        throw std::logic_error("attempt to get the value from an uninitialized object");
    }
    
    ~const_var()
    {
        if(wasInit_)
        {
            var_.value.~T();
        }
    }
 
    bool wasInit() const
    {
        return wasInit_;
    }
    
private:
    template <typename ...Args>
    void init(Args const & ...v) const
    {
        if(!wasInit_)
        {
            ::new(&var_.value) T(v...);
            wasInit_ = true;
        }
        else
        {
            throw std::logic_error("re-initialization for a final object");
        }
    }
    
    mutable union storage
    {
        char data[sizeof(T)];
        T    value;
        
        storage()  {}
        ~storage() {}
        
    } var_;
    mutable bool wasInit_;
};
 
template <typename T>
using final = const const_var<T>;
 
int main()
{
    {
        final<std::string> a; // no init
        
        //std::string b1 = a; // get noninit value, error
        
        a = "test1"; // init
        
        std::string b2 = a; 
        
        std::cout << b2 << '\n';
        
        //a = "test"; // re-init, error
    }
    
    {
        final<std::string> a = "test2"; // init
        
        //a = "test"; // re-init, error
        
        std::string b1 = a;
        
        std::cout << b1 << '\n';        
    }
    
    {
        final<std::string> a = default_init_tag; // init default
        
    }
    
    {
        final<std::string> a; // no init
        
        a = default_init_tag; // init default
    }
}

http://rextester.com/FAEY25254

PS. Написано исключительно для поддержания разговора. Претензии по реализации не принимаются, ввиду отладки в онлайн-редакторе и практически полной бесполезности на практике (в с++).
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru