Re[9]: const и функции
От: Ignoramus  
Дата: 20.04.05 10:55
Оценка:
Здравствуйте, Вадим Никулин, Вы писали:

ВН>Так ведь дефолтный конструктор для A ничего не делает! Поэтому A::a не станет равным 0. Все-равно надо явно прописать конструктор по-умолчанию.


А я думал что дефолтный конструктор все обнуляет... Правда, никогда на это не рассчитывал и всегда писал его явно
Re[8]: const и функции
От: Lorenzo_LAMAS  
Дата: 20.04.05 10:56
Оценка:
I>Век живи, век учись, сказал поручик. Короче говоря я так понял, у объявлений функции есть приоритет при разрешении неоднозначностей, так?

Да, если есть неоднозначность между выражением и объявлением, то она разрешается в пользу объявления — Бьярн, кстати, пишет об этом в книжке.
Of course, the code must be complete enough to compile and link.
Re[10]: const и функции
От: Lorenzo_LAMAS  
Дата: 20.04.05 11:00
Оценка:
I>А я думал что дефолтный конструктор все обнуляет... Правда, никогда на это не рассчитывал и всегда писал его явно

Неявный дефолтный конструктор, сгенеренный компилятором, может сделать следующее : вызвать конструкторы базовых классов, членов-данных и, например, установить указатель на таблицу виртуальных функций. Но он не будет занулять данные встроенных типов — тебе придется писать для этого конструктор самому.
Of course, the code must be complete enough to compile and link.
Re[11]: const и функции
От: Вадим Никулин Россия Здесь
Дата: 20.04.05 11:08
Оценка: +1
Здравствуйте, Lorenzo_LAMAS, Вы писали:

I>>А я думал что дефолтный конструктор все обнуляет... Правда, никогда на это не рассчитывал и всегда писал его явно


L_L>Неявный дефолтный конструктор, сгенеренный компилятором, может сделать следующее : вызвать конструкторы базовых классов, членов-данных и, например, установить указатель на таблицу виртуальных функций. Но он не будет занулять данные встроенных типов — тебе придется писать для этого конструктор самому.


ok. Теперь уже запутался я. А что такое тогда value-initialization? Если можно, со ссылкой на стандарт.
Re[12]: const и функции
От: Lorenzo_LAMAS  
Дата: 20.04.05 11:26
Оценка: 6 (1)
ВН>ok. Теперь уже запутался я. А что такое тогда value-initialization? Если можно, со ссылкой на стандарт.

стандарт нужен не 1998 года, с поправками. value — initialization вкратце означает, что при отсутствии явно определенного дефолтного конструктора будут вызваны конструкторы для баз и подобъектов-членов и т.д. и т.п., но главное в нашем обсуждении, будет выполнена value инициализация для членов встроенных типов, которая сведется к zero-инициализации. Копировать из моей версии стандарта нельзя (она бумажная ) а потому ссылки:
в revisions это страница 18, 20, 33.

А если ссылками, это 5.2.3/2, 5.3.4/15, 8.5/5
Of course, the code must be complete enough to compile and link.
Re[13]: const и функции
От: Lorenzo_LAMAS  
Дата: 20.04.05 11:30
Оценка:
Да, и еще — эта value-инициализация связана именно с выражением вида Type().
Of course, the code must be complete enough to compile and link.
Re[7]: const и функции
От: jazzer Россия Skype: enerjazzer
Дата: 20.04.05 11:41
Оценка:
Здравствуйте, Ignoramus, Вы писали:

I>>>А почему?


ВН>>Mr. jazzer хотел сказать, что на каноническую форму присваивания это не действует.


ВН>>Каноническая форма конструктора копирования:

ВН>>Obj( const Obj & );

ВН>>Каноническая форма присваивания:

ВН>>Obj &operator = ( const Obj & );

I>Ну Вы меня совсем запутали На что действует и на что не действует?


Mr. Вадим Никулин хотел сказать, что, помимо "канонических" форм конструктора копирования и оператора присваивания, имеющих аргументом константную ссылку, если "неканонические" с неконстантной ссылкой (например, таков класс std::auto_ptr), и вот для них-то это работать и не будет
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: const и функции
От: Pavel Chikulaev Россия  
Дата: 20.04.05 18:36
Оценка:
"Ignoramus" <18039@users.rsdn.ru> wrote in message news:1133667@news.rsdn.ru...
> int f(void) const;
Маленький совет не в тему: пиши f() вместо f(void) потому что во-первых короче,
во-вторых ты используешь пережитки из C, в-третьих (void) deprecated аж с 89
года, но для сохранения обратной
совместимости с C эта херь осталась (ЗЫ в С99 она тоже deprecated), в-четвертых
понятней особенно для тех кто читает твой код(не этот).

ЗЫ: А в Whidbey так и будет показывать войд — Майкрософт сказала, что исправит
это в следующей версии (где-нить в 2007... )

--
Pavel Chikulaev
Posted via RSDN NNTP Server 1.9
Re[2]: const и функции
От: Ignoramus  
Дата: 20.04.05 21:59
Оценка:
Здравствуйте, Pavel Chikulaev, Вы писали:

PC>Маленький совет не в тему: пиши f() вместо f(void) потому что во-первых короче,

PC>во-вторых ты используешь пережитки из C, в-третьих (void) deprecated аж с 89
PC>года, но для сохранения обратной
PC>совместимости с C эта херь осталась (ЗЫ в С99 она тоже deprecated), в-четвертых
PC>понятней особенно для тех кто читает твой код(не этот).

У меня почему-то обратная ассоциация была, что когда я пишу f(), то как бы использую пережиток из С в виде произвольного числа аргументов. Просмотрел Страуструпа, но не нашел советов на этот счет, хотя почему-то запомнилось что что-то было, видимо глюк в памяти. Будем считать, Вы меня убедили .
Re[2]: const и функции
От: Аноним  
Дата: 21.04.05 05:23
Оценка: -1
Здравствуйте, Lorenzo_LAMAS, Вы писали:

I>>1. Можно ли объявлять глобальную функцию (не член класса) как "int g(void) const". Думается что нет, т.к. не вижу смысла. Если да, то что это значит?


L_L>Нет, нельзя. Так же как и статическую функцию-член класса нельзя.


Статическую функцию член класса ещё как можно создавать.

class A
{
public:
     static int sfuncA()
     {
         return 3; // всё в порядке
         return i_; // а вот тут ошибка компилятора, т.к. статическая функция класса не имеет доступа к переменным и к this.
     }
private:
     int i_;
}

A * a = NULL;
int b = a->sfuncA(); // ошибки нет, даже с учётом того, что указатель NULL;


Обычно статическая функция создаётся для запуста нового потока, и в качестве поточной функции используется статическая функция

static int MyClass::start(MyClass * object);
Re[3]: const и функции
От: Lorenzo_LAMAS  
Дата: 21.04.05 06:44
Оценка:
А>Статическую функцию член класса ещё как можно создавать.
Речь шла о попытке объявить статическую функцию-член класса константной, чего сделать нельзя.
Of course, the code must be complete enough to compile and link.
Re[2]: const и функции
От: Lorenzo_LAMAS  
Дата: 21.04.05 06:46
Оценка:
PC>совместимости с C эта херь осталась (ЗЫ в С99 она тоже deprecated), в-четвертых
PC>понятней особенно для тех кто читает твой код(не этот).

С какой стати она deprecated, если в С void fun() и void fun(void) это разные вещи???
Of course, the code must be complete enough to compile and link.
Re[3]: const и функции
От: Lorenzo_LAMAS  
Дата: 21.04.05 06:50
Оценка:
I>У меня почему-то обратная ассоциация была, что когда я пишу f(), то как бы использую пережиток из С в виде произвольного числа аргументов. Просмотрел Страуструпа, но не нашел советов на этот счет, хотя почему-то запомнилось что что-то было, видимо глюк в памяти. Будем считать, Вы меня убедили .

У тебя была правильная ассоциация с точки зрения С, а в С++ это функция без параметров.
Of course, the code must be complete enough to compile and link.
Re[3]: const и функции
От: Pavel Chikulaev Россия  
Дата: 21.04.05 06:54
Оценка:
"Lorenzo_LAMAS" <14979@users.rsdn.ru> wrote in message
news:1135351@news.rsdn.ru...
> С какой стати она deprecated, если в С void fun() и void fun(void) это разные
> вещи???
Там deprecated старое использование void fun() как fun(4, 23, 34, 23);

--
Pavel Chikulaev
Posted via RSDN NNTP Server 1.9
Re[4]: const и функции
От: Pavel Chikulaev Россия  
Дата: 21.04.05 06:56
Оценка:
"Lorenzo_LAMAS" <14979@users.rsdn.ru> wrote in message
news:1135359@news.rsdn.ru...
> У тебя была правильная ассоциация с точки зрения С, а в С++ это функция без
> параметров.
Но ведь если программировать на С++, ты ведь со мной согласен ???


--
Pavel Chikulaev
Posted via RSDN NNTP Server 1.9
Re[4]: const и функции
От: Lorenzo_LAMAS  
Дата: 21.04.05 06:56
Оценка:
PC>Там deprecated старое использование void fun() как fun(4, 23, 34, 23);
Черт, я в iso9899 даже секции deprecated пока не нашел
void fun();

int main()
{
   fun(1,2,3,4);
   return 0;
}

void fun(int, int, int, int)
{
}


Вот эта вот программа вполне ничего для компилятора C89/C99
Of course, the code must be complete enough to compile and link.
Re[5]: const и функции
От: Lorenzo_LAMAS  
Дата: 21.04.05 06:58
Оценка:
PC>Но ведь если программировать на С++, ты ведь со мной согласен ???
Ээээ, что void fun() функция без параметров? Да, конечно.
Of course, the code must be complete enough to compile and link.
Re[6]: const и функции
От: Pavel Chikulaev Россия  
Дата: 21.04.05 07:00
Оценка:
"Lorenzo_LAMAS" <14979@users.rsdn.ru> wrote in message
news:1135375@news.rsdn.ru...
> PC>Но ведь если программировать на С++, ты ведь со мной согласен ???
> Ээээ, что void fun() функция без параметров? Да, конечно.
Что писать лучше void fun() чем void fun(void)

--
Pavel Chikulaev
Posted via RSDN NNTP Server 1.9
Re[5]: const и функции
От: Pavel Chikulaev Россия  
Дата: 21.04.05 07:01
Оценка:
"Lorenzo_LAMAS" <14979@users.rsdn.ru> wrote in message
news:1135372@news.rsdn.ru...
> PC>Там deprecated старое использование void fun() как fun(4, 23, 34, 23);
Это не а стандарте это из best coding practices

--
Pavel Chikulaev
Posted via RSDN NNTP Server 1.9
Re[7]: const и функции
От: Lorenzo_LAMAS  
Дата: 21.04.05 07:02
Оценка:
PC>Что писать лучше void fun() чем void fun(void)
Да, естественно. Но я к этому и не придирался. Я не согласен только с утверждением, что void fun(void) — deprecated в С99/89

PC>--

PC>Pavel Chikulaev
Of course, the code must be complete enough to compile and link.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.