DEEP_CONST
От: _Winnie Россия C++.freerun
Дата: 10.01.06 12:53
Оценка: -1
Здравствуйте, eao197, Вы писали:

>И еще, где можно прочитать про гламурность, очарование и шарм в программах?

Ну...
Смотри, что я придумал:

const означает, что мы не можем менять ноду.
DEEP_CONST означает ноду и всех её потомков.

#ifdef NDEBUG
#define DEEP_CONST const
#else
#define DEEP_CONST const volatile
#define DEEP_CONST_DEFINED
#endif

struct TreeNode
{
private:
    TreeNode *right, *left;
    int value;

public:
    int get_val() DEEP_CONST { return value; }

    void set_value(int i) { value = i; }


    TreeNode *get_right() const { return right; };
    TreeNode *get_left() const { return left; };

#if defined(DEEP_CONST_DEFINED) 
    TreeNode DEEP_CONST *get_right() DEEP_CONST { return right; };
    TreeNode DEEP_CONST *get_left() DEEP_CONST { return left; };
#endif
};


void f(TreeNode DEEP_CONST *t)
{
    t->get_right()->set_value(10); //ошибка
    t->get_right()->get_val(); //ok
}

void g(TreeNode const *t)
{
    t->get_right()->set_value(10); //ok
}

int main()
{
}


Может, у тебя есть ещё какие-то идеи?

10.01.06 22:21: Ветка выделена из темы DEEP_CONST
Автор: _Winnie
Дата: 09.01.06
— Кодт
10.01.06 22:22: Перенесено модератором из 'Мусор' — Кодт
Правильно работающая программа — просто частный случай Undefined Behavior
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.