Другие языки программирования и технологии
как сделать так чтобы. Вот например вводишь ты значение, и это значение становится константой.
То-есть чтобы пользователь ввел значение и оно становилась константой
#include <iostream>
using namespace std;
template<typename Type>
class my_const {
public:
my_const(const my_const&) = delete;
my_const(my_const&&) = delete;
my_const& operator=(const my_const&) = delete;
my_const& operator=(my_const&&) = delete;
my_const() = default;
Type value()const { return value_; }
private:
Type value_;
bool flag_;
friend istream& operator>>(istream& in, my_const& mc) {
if (mc.flag_) {
in >> mc.value_;
mc.flag_ = false;
}
return in;
}
};
int main() {
my_const<int> x;
cout << ">>> ";
cin >> x;
cin.ignore();
cout << "<<< " << x.value() << endl;
cout << ">>> ";
cin >> x;
cin.ignore();
cout << "<<< " << x.value() << endl;
system("pause");
}
using namespace std;
template<typename Type>
class my_const {
public:
my_const(const my_const&) = delete;
my_const(my_const&&) = delete;
my_const& operator=(const my_const&) = delete;
my_const& operator=(my_const&&) = delete;
my_const() = default;
Type value()const { return value_; }
private:
Type value_;
bool flag_;
friend istream& operator>>(istream& in, my_const& mc) {
if (mc.flag_) {
in >> mc.value_;
mc.flag_ = false;
}
return in;
}
};
int main() {
my_const<int> x;
cout << ">>> ";
cin >> x;
cin.ignore();
cout << "<<< " << x.value() << endl;
cout << ">>> ";
cin >> x;
cin.ignore();
cout << "<<< " << x.value() << endl;
system("pause");
}
Смысл этого действия? Пользователь и так не может изменить значение переменной, если больше ввода значения этой переменной не будет.
Принято озвучивать язык программирования.
В памяти компьютера не существует константных переменных. Квалификатор const - это исключительно прерогатива компилятора. На этапе компиляции, все константы могут заменится непосредственными значениями в местах обращений, либо помещаться в специальную секцию .rodata, в которую, при записи, операционная система будет выдавать violation access и аварийно завершать программу.
Вы можете симитировать это поведение, воспользовавшись системными функциями для выделения страниц памяти с модифицированным доступом.
Но гораздо проще сделать это на уровне приложения:
struct once {
int var = 0;
bool isconst = false;
void set(int val)
{
if (isconst) return;
var = val;
isconst = true;
}
};
once var;
//... где-то в main:
var.set(1337); //присвоит var 1337
var.set(404); //уже не присвоит, так как флаг isconst == true
cout << var.var; //выведет 1337
При этом переменной всё же можно установить новое знаечение, если не использовать set. Вполне можно перегрузить оператор "=" для данной структуры и тогда точно не ошибётесь.
В сочитании с шаблонами/макросами, этот пример можно оптимизировать для разных типов данных, а не только для int. Можно так же воспользоваться union.
Вы можете симитировать это поведение, воспользовавшись системными функциями для выделения страниц памяти с модифицированным доступом.
Но гораздо проще сделать это на уровне приложения:
struct once {
int var = 0;
bool isconst = false;
void set(int val)
{
if (isconst) return;
var = val;
isconst = true;
}
};
once var;
//... где-то в main:
var.set(1337); //присвоит var 1337
var.set(404); //уже не присвоит, так как флаг isconst == true
cout << var.var; //выведет 1337
При этом переменной всё же можно установить новое знаечение, если не использовать set. Вполне можно перегрузить оператор "=" для данной структуры и тогда точно не ошибётесь.
В сочитании с шаблонами/макросами, этот пример можно оптимизировать для разных типов данных, а не только для int. Можно так же воспользоваться union.
А обезательно константой?
Николай Лазуткин
да
Похожие вопросы
- C++, как сделать задержку выполнения цикла, например на 5 сек.
- Вопрос про константы в С++ внутри.
- Почему числа в языках программирования называются константами?
- скажите для чего в с++ константы, можно просто взять переменную например int x=15; и не менять её
- зачем в программировнии константы?
- Почему требует константу? С++
- Как сделать сортировку значений заработных плат
- Вопрос про возвращаемое значение из функции в С++.
- C почему у меня массив на 4 символа, а я ввожу 10 например, и он потом выводит 10 из этого массива, вот мой код:
- С++. Как сделать, чтобы значение массива, созданного в структуре изменялось в другой процедуре?