0 / 0 / 0
Регистрация: 08.09.2014
Сообщений: 2

Инициализация константного члена класса с проверкой значения

16.12.2014, 11:07. Показов 1314. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Допустим есть класс константным членом
C++
1
2
3
4
5
class a{
    const int i;
public:
    a(int ii):i(ii){};
}
Можно ли как-нибудь предварительно проверить ii на корректность до того как будет инициализирован i? Скажем, ii>5 && ii<15.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.12.2014, 11:07
Ответы с готовыми решениями:

Инициализация константного статического объекта - члена класса
Здравствуйте, у меня возникла проблема с инициализацией статического объекта, который является членом класса. Этот объект должен быть...

Инициализация переменной члена класса
Добрый день. Не могу никак понять, что делаю неверно при использовании переменной класса. Не понимаю как переменную необходимо...

Инициализация static члена класса
Добрый вечер! Есть класс, в нём в private реализован ещё один + это всё шаблоны. Во вложенном классе есть static указатель на переменную...

4
19483 / 10091 / 2457
Регистрация: 30.01.2014
Сообщений: 17,796
16.12.2014, 11:46
Лучший ответ Сообщение было отмечено lmm68954 как решение

Решение

lmm68954, тернарный оператор. Ну или функция.

Добавлено через 2 минуты
lmm68954,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class a{
    const int i;
public:
    a(int ii):i(ii>5 && ii<15 ? ii : 10){}
};
.....
int check(int a)
{
    // какая-либо проверка
}
class a{
    const int i;
public:
    a(int ii):i(check(ii)){}
};
1
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
16.12.2014, 12:42
DrOffset, а в check() же можно блок try внедрить и затем перехватывать исключение в теле конструктора?
Вот например так:
C++
1
2
3
4
5
6
7
class a{
    const int i;
public:
    a(int ii) : i(check(ii)) {
   } catch(...) {
}
};
0
19483 / 10091 / 2457
Регистрация: 30.01.2014
Сообщений: 17,796
16.12.2014, 12:46
andrejap, можно. Только вот так (ты try забыл):
C++
1
2
3
4
5
6
7
8
9
10
class a{
    const int i;
public:
    a(int ii) try : i(check(ii)) {
         // тело конструктора
    } 
    catch(...) {
      
    }
};
Эта штука называется function try block.
1
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
17.12.2014, 23:12
DrOffset, понял. А в check() уже писать throw-ы... Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.12.2014, 23:12
Помогаю со студенческими работами здесь

Инициализация константы-члена класса
Все привет! Возникла такая проблема: есть double константа-член класса, объявленная в секции protected. Проблема в том, что я не знаю как...

Инициализация статического члена из шаблонного класса
Добрый день. Есть код: template&lt;int test&gt; class Test { template&lt;int a&gt; struct Inner { static bool...

Инициализация члена шаблона класса шаблонным конструктором
Здравствуйте! Есть такой шаблонный класс: template&lt;typename T&gt; class Shared { public: Shared() : ptr_(nullptr) {} ...

Передача значения переменной-члена из класса в функцию
Добрый день, имеется класс: class ZernPole{ public: ZernPole(int Zerno) { zpZerno=Zerno;...

Изменение константного поля класса
Является ли изменение константы-поля класса UB? - компилятор может закэшировать значение и не ждать, что оно другое. - с другой стороны...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
И решил я переделать этот ноут в машину для распределенных вычислений
Programma_Boinc 09.11.2025
И решил я переделать этот ноут в машину для распределенных вычислений Всем привет. А вот мой компьютер, переделанный из ноутбука. Был у меня ноут асус 2011 года. Со временем корпус превратился. . .
Мысли в слух
kumehtar 07.11.2025
Заметил среди людей, что по-настоящему верная дружба бывает между теми, с кем нечего делить.
Новая зверюга
volvo 07.11.2025
Подарок на Хеллоуин, и теперь у нас кроме Tuxedo Cat есть еще и щенок далматинца: Хочу еще Симбу взять, очень нравится. . .
Инференс ML моделей в Java: TensorFlow, DL4J и DJL
Javaican 05.11.2025
Python захватил мир машинного обучения - это факт. Но когда дело доходит до продакшена, ситуация не так однозначна. Помню проект в крупном банке три года назад: команда data science натренировала. . .
Mapped types (отображённые типы) в TypeScript
Reangularity 03.11.2025
Mapped types работают как конвейер - берут существующую структуру и производят новую по заданным правилам. Меняют модификаторы свойств, трансформируют значения, фильтруют ключи. Один раз описал. . .
Адаптивная случайность в Unity: динамические вероятности для улучшения игрового дизайна
GameUnited 02.11.2025
Мой знакомый геймдизайнер потерял двадцать процентов активной аудитории за неделю. А виновником оказался обычный генератор псевдослучайных чисел. Казалось бы - добавил в карточную игру случайное. . .
Протоколы в Python
py-thonny 31.10.2025
Традиционная утиная типизация работает просто: попробовал вызвать метод, получилось - отлично, не получилось - упал с ошибкой в рантайме. Протоколы добавляют сюда проверку на этапе статического. . .
C++26: Read-copy-update (RCU)
bytestream 30.10.2025
Прошло почти двадцать лет с тех пор, как производители процессоров отказались от гонки мегагерц и перешли на многоядерность. И знаете что? Мы до сих пор спотыкаемся о те же грабли. Каждый раз, когда. . .
Изображения webp на старых x32 ОС Windows XP и Windows 7
Argus19 30.10.2025
Изображения webp на старых x32 ОС Windows XP и Windows 7 Чтобы решить задачу, использовал интернет: поисковики Google и Yandex, а также подсказки Deep Seek. Как оказалось, чтобы создать. . .
Passkey в ASP.NET Core identity
stackOverflow 29.10.2025
Пароли мертвы. Нет, серьезно - я повторяю это уже лет пять, но теперь впервые за это время чувствую, что это не просто красивые слова. В . NET 10 команда Microsoft внедрила поддержку Passkey прямо в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru