Что самое твердое должно понять часть кода C++, который Вы знаете? [закрытый]

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

19
задан 5 revs, 3 users 100% 3 May 2015 в 02:45
поделиться

11 ответов

Обратная реализация квадратного корня в Quake 3:

float InvSqrt (float x){
    float xhalf = 0.5f*x;
    int i = *(int*)&x;
    i = 0x5f3759df - (i>>1);
    x = *(float*)&i;
    x = x*(1.5f - xhalf*x*x);
    return x;
}

Обновление: , Как это работает (благодарит ryan_s)

41
ответ дан 30 November 2019 в 01:44
поделиться
unsigned int reverse(register unsigned int x)
{
 x = (((x & 0xaaaaaaaa) >> 1) | ((x & 0x55555555) << 1));
 x = (((x & 0xcccccccc) >> 2) | ((x & 0x33333333) << 2));
 x = (((x & 0xf0f0f0f0) >> 4) | ((x & 0x0f0f0f0f) << 4));
 x = (((x & 0xff00ff00) >> 8) | ((x & 0x00ff00ff) << 8));
 return((x >> 16) | (x << 16));
}

Реверсы порядок битов в интервале

10
ответ дан 30 November 2019 в 01:44
поделиться

Я знаю, что это - C и не C++, но всегда существует Международный Запутываемый Конкурс Кода C . Я видел некоторый код там, который заставил бы Вашу голову кружиться.

11
ответ дан 30 November 2019 в 01:44
поделиться

Это - известный но все еще впечатляющий способ подкачать два целых числа, не создавая временную переменную:

// a^=b^=a^=b;     // int a and int b will be swapped
// Technically undefined behavior as variable may only 
// be assined once within the same statement.
// 
// But this can be written correctly like this.
// Which still looks cool and unreadable ;-)

a^=b;
b^=a;
a^=b;
9
ответ дан 30 November 2019 в 01:44
поделиться

C, но существующий в C++, я нахожу, что оператор запятой действительно запутывает код, возьмите это...

ihi = y[0]>y[1] ? (inhi=1,0) : (inhi=0,1);

Краткий и довольно изящный, но очень легкий отсутствовать или неправильно понять.

2
ответ дан 30 November 2019 в 01:44
поделиться

Устройство вареного пудинга ( http://en.wikipedia.org/wiki/Duff%27s_device ) дает мне кошмары:

strcpy(to, from, count)
char *to, *from;
int count;
{
    int n = (count + 7) / 8;
    switch (count % 8) {
    case 0: do { *to = *from++;
    case 7:      *to = *from++;
    case 6:      *to = *from++;
    case 5:      *to = *from++;
    case 4:      *to = *from++;
    case 3:      *to = *from++;
    case 2:      *to = *from++;
    case 1:      *to = *from++;
            } while (--n > 0);
    }
}
15
ответ дан 30 November 2019 в 01:44
поделиться

Это недавно было на reddit http://www.eelis.net/C++/analogliterals.xhtml

 assert((o-----o
        |     !
        !     !
        !     !
        !     !
        o-----o ).area == ( o---------o
                            |         !
                            !         !
                            o---------o ).area );
29
ответ дан 30 November 2019 в 01:44
поделиться

Большая часть материала Повышения - шаблонное метапрограммирование достаточно плохо, но когда Вы включаете в обходные решения, необходимые, чтобы заставить это работать над некоторыми компиляторами (*coughborlandcough*), это становится довольно смешным. Просто попытайтесь понять Повышение. Связать. Просто попробуйте.

6
ответ дан 30 November 2019 в 01:44
поделиться

Двоичный сдвиг смущает меня все время. Пример от java.util.concurrent.ConcurrentHashMap пакет:

return ((h << 7) - h + (h >>> 9) + (h >>> 17))
0
ответ дан 30 November 2019 в 01:44
поделиться

Я голосую за некоторое шаблонное метапрограммирование black-magic-hackerish (к сожалению, не имеют никого под рукой для регистрации его).

-3
ответ дан 30 November 2019 в 01:44
поделиться
1
ответ дан 30 November 2019 в 01:44
поделиться
Другие вопросы по тегам:

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