Почему эта функция не перехватывается компилятором и для чего она нужна? - PullRequest
0 голосов
/ 16 августа 2010

Я нашел в каком-то устаревшем коде, который я имею дело с этой функцией (в C ++)

Vec3d Minimum()
{
    if(this->valid)
    {
        return minBB;
    }
    else
    {
        return NULL;
    }
}

где Vec3d - это объект, который в основном представляет собой структуру с перегруженными x, y, z и некоторыми операторами (код ниже).

AFAIK, вы не можете вернуть 0 для определенного пользователем объекта ... или есть какое-то автоматическое приведение к нулю, о котором я не знал? Это просто из любопытства: p

Спасибо

class Vec3d
{
public:
    double x,y,z;

    /// \brief Default constructor initializes x and y to 0
    Vec3d();

    /** \brief Constructor initializies vector to input parameters x and y and z
     *
     *  \param x Double value that initializes x value of vector
     *  \param y Double value that initializes y value of vector
     *  \param z Double value that initializes z value of vector
     */
    Vec3d(double x, double y, double z);

    /** \brief Copy constructor
     *
     *  \param v Pointer to another vec3i with which to initialize current vec3i
     */
    Vec3d(Vec3d* v);

    /**\brief Sets a vector (already instantiated) to the input parameters (x,y,z)
     *
     *  \param x Double value that initializes x value of vector
     *  \param y Double value that initializes y value of vector
     *  \param z Double value that initializes z value of vector
     *
     *  This method is just so you can change the value of an already instantiated vector
     */
    void set(double xi, double yi, double zi);

    const Vec3d operator -(const Vec3d &other) const;
    const Vec3d operator +(const Vec3d &other) const;
    const Vec3d operator *(const double num) const;
    const double operator *(const Vec3d &other) const;
    const Vec3d operator /(const double num) const;
    double magnitude();
};

1 Ответ

5 голосов
/ 16 августа 2010

0 может использоваться в контексте указателей, чтобы быть константой нулевого указателя.То есть, здесь речь пойдет о:

Vec3d(Vec3d* v); 

Обратите внимание, что комментарий некорректен, так как не конструктор копирования.

Код немного скучный,Не должно быть set функции, и обычно операторы без мутаций должны быть свободными функциями.И, что немаловажно, иметь такого конструктора - пустая и запутанная вещь.Если у вас есть указатель на вектор, вам следует:

Vec3d v = *other;

Не предоставлять неявное преобразование из указателя.

...