Сделать все типы постоянными по умолчанию в C ++

if (index < 0 || index >= array.length) {
    // Don't use this index. This is out of bounds (borders, limits, whatever).
} else {
    // Yes, you can safely use this index. The index is present in the array.
    Object element = array[index];
}

См. также:


Обновление: в соответствии с вашим фрагментом кода,

for(int i = 0; i<=name.length; i++) {

Индекс содержит длину массива. Это за гранью. Вы должны заменить <= на <.

for(int i = 0; i < name.length; i++) {
14
задан Jon Purdy 4 May 2010 в 11:16
поделиться

4 ответа

Возьмите компилятор C ++ с открытым исходным кодом и измените его.

Я думаю, что основная причина отрицательных отзывов заключается в том, что люди думают, что вы пытаетесь изменить C ++. Вместо этого скажите им, что вы создаете новый язык под названием «C-const» в качестве университетского проекта.

Лично я считаю, что это интересная идея - вы можете получить всевозможные преимущества в производительности и удобочитаемости с помощью неизменяемых типов - просто посмотрите на большинство функциональных языков.

12
ответ дан 1 December 2019 в 14:10
поделиться

Вы пытаетесь сообщить компилятору или другим людям, читающим или использующим ваш код? Компилятор не будет делать ничего особенного только потому, что используется определенный пользователем тип const . На самом деле все, что он делает, - это изменяет набор методов (определенных пользователем или неявных), которые могут использоваться с этим объектом. В свою очередь, этот может позволить компилятору сделать вывод о некоторых оптимизациях представления времени выполнения.

Для типов class / struct вы можете прояснить это как для компилятора, так и для пользователей, просто сделав каждый член константным:

class Point {
    // An immutable Point data object
    public:
        Point(int ix, int iy): x(ix), y(iy) { }
        Point(const Point& p): x(p.x), y(p.y) { }

        Point add(const Point& p) const;
        int taxiDistance() const;
        // etc... all const members

        const int x, y; // const can only be init'd at construction time

     private:
        Point& operator=(const Point& p); // never implemented!
}
1
ответ дан 1 December 2019 в 14:10
поделиться

Я бы не советовал этого делать. Если вам удастся достичь своей цели, любой человек (включая вас самих через некоторое время) будет удивлен, когда прочитает ваш код, а он ведет себя не так, как он ожидает.

Пожалуйста, добавьте модификатор const, видимый для всех, везде, где это необходимо. Ваш код будут читать гораздо чаще, чем писать!

0
ответ дан 1 December 2019 в 14:10
поделиться

Даже если вы можете это сделать (а я подозреваю, что это не так) , подумайте о других людях, читающих ваш код. Они вряд ли поймут, что все константно, и в результате вряд ли поймут ваш код.

2
ответ дан 1 December 2019 в 14:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: