Каковы часто недооцененные понятия в C++? [закрытый]

Если вы не уверены, что делаете, используйте '=='. Если у вас есть немного больше знаний об этом, вы можете использовать «is» для известных объектов, таких как «None».

В противном случае вы будете удивлены, почему все не работает и почему это происходит:

>>> a = 1
>>> b = 1
>>> b is a
True
>>> a = 6000
>>> b = 6000
>>> b is a
False

Я даже не уверен, что некоторые вещи гарантированно останутся неизменными между различными версиями / реализациями python.

33
задан 3 revs, 3 users 100% 18 February 2009 в 12:50
поделиться

36 ответов

Большой - то, что языки не на 100% синтаксически совместимы. C++ является полностью ссылкой, совместимой с C, но некоторый синтаксис стиля C++ генерирует ошибку компилятора в C. Некоторые компиляторы не придирчивы и не следуют стандарту C к букве. Основы их должны быть изучены при перемещении от одного языка до другого. Обратите внимание, что я не прочитал последний стандарт C, но в последний раз я знал, что это было верно.

-3
ответ дан 27 November 2019 в 17:21
поделиться
  1. различие между указателем (*) и ссылкой (&)
  2. Accesing много массивы dimentional с помощью указателей.
  3. Используя * для получения доступ к значению указателя - т.е. *ptr = 5
  4. , Когда освободить выделенную память.
0
ответ дан 27 November 2019 в 17:21
поделиться

Очень хороший ресурс я не могу устать для продвижения - C++ Часто Подвергаемые сомнению Ответы

-2
ответ дан 27 November 2019 в 17:21
поделиться

C++ или C/C++? Я сказал бы и для самых недооцененных частей, управление памятью и указатели. Первый, потому что люди не освобождают соответственно (слишком рано или нисколько!) и последний, потому что много людей просто не "получает" указатели (или в передаче ссылочным "обликом" или в целом в чем-то как связанный список).

0
ответ дан 27 November 2019 в 17:21
поделиться

I know this is old question but I thought object slicing / failure of polymorphism with objects on the stack worth mentioning. If I do not use C++ for six months, this one always comes out and bites me when I use the language again.

#include <iostream>

class base {
    public:
    base(int val) { var1 = val; };
    virtual void doSomething() { var1 *= 2; };
    int getVar1() { return var1; };
    virtual ~base() { };
    protected:
    int var1;
};

class deriv : public base {
    public:
    deriv(int val) : base(val) { };
    void doSomething() { var1 *= 4; };
};

void use_object_ptr(base *arg) {
    arg->doSomething();
    std::cout << arg->getVar1() << std::endl;
};

void use_object_copy(base arg) {
    arg.doSomething();
    std::cout << arg.getVar1() << std::endl;
};

int main(int argc, char **argv) {
    deriv d(42);

    deriv *p2d = new deriv(42);

    use_object_ptr(p2d); // calls deriv::doSomething(), prints 168

    use_object_copy(d); // calls base::doSomething(), prints 84

    use_object_ptr(&d); // calls deriv::doSomething(), prints 168

    return 0;
}
1
ответ дан 27 November 2019 в 17:21
поделиться
  1. Размещение объектов, стека или кучи.
  2. Использование константы
  3. Использование друга
1
ответ дан 27 November 2019 в 17:21
поделиться
Другие вопросы по тегам:

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