R *j=new R(); // i==0 b==false в избранное  новое горячее всё    подписка   модер. 
От: Аноним 306 
Дата: 28.05.08 11:38
class R{
 public:
  int i;
  bool b;
};

int main(){
    
   R *j=new R();// i==0 b==false
   R *k=new R;  // i==-842150451  b==true
   R kk;        // i==-842150451  b==true
 //R jj();      // ill 

 return 0;
}


В строке R *j=new R(); происходит инициализация членов,
а как добиться тогоже для R kk; ,с конструктором по умолчанию?
Re: R *j=new R(); // i==0 b==false в избранное  новое    модер. 
От: Lorenzo_LAMAS 
Дата: 28.05.08 11:47
Оценка: +1
А>В строке R *j=new R(); происходит инициализация членов,
А>а как добиться тогоже для R kk; ,с конструктором по умолчанию?

Например, так R kk = R(); хотя я и не уверен, как себя поведет твой компилятор. Только тут нет конструктора по умолчанию, это value-initialization
Of course, the code must be complete enough to compile and link.
Re: R *j=new R(); // i==0 b==false в избранное  новое    модер. 
От: Alexander G 
Дата: 28.05.08 12:02
Здравствуйте, Аноним, Вы писали:

А>
А>class R{
А> public:
А>  int i;
А>  bool b;
А>};

А>int main(){
    
А>   R *j=new R();// i==0 b==false
А>   R *k=new R;  // i==-842150451  b==true
А>   R kk;        // i==-842150451  b==true
А> //R jj();      // ill 

А> return 0;
А>}
А>


А>В строке R *j=new R(); происходит инициализация членов,

А>а как добиться тогоже для R kk; ,с конструктором по умолчанию?

R kk = {};

Только это всё применимо как раз когда нет конструкторов, в том числе по умолчанию.
Re[2]: R *j=new R(); // i==0 b==false в избранное  новое    модер. 
От: Bell 
Дата: 28.05.08 12:10
Здравствуйте, Lorenzo_LAMAS, Вы писали:

А>>В строке R *j=new R(); происходит инициализация членов,

А>>а как добиться тогоже для R kk; ,с конструктором по умолчанию?

L_L>Например, так R kk = R(); хотя я и не уверен, как себя поведет твой компилятор. Только тут нет конструктора по умолчанию, это value-initialization


Да, это value-initialization, но тривиальный конструктор по умолчанию у R все же есть. Другое дело, что у R нет определенного пользователем конструктора — а именно это определяет способ инициализации.
Любите книгу — источник знаний (с) М.Горький
Re[2]: R *j=new R(); // i==0 b==false в избранное  новое    модер. 
От: Bell 
Дата: 28.05.08 12:14
Здравствуйте, Alexander G, Вы писали:

AG>R kk = {};


AG>Только это всё применимо как раз когда нет конструкторов, в том числе по умолчанию.

Этот способ инициализации подходит для агрегатов.

8.5.1/1
An aggregate is an array or a class (clause 9) with no user-declared constructors (12.1), no private or protected
non-static data members (clause 11), no base classes (clause 10), and no virtual functions (10.3).

Т.е. главное в данном случае — отсутствие определенных пользователем конструкторов.
Тривиальный конструктор по умолчанию у R есть — он сгенерирован компилятором.
Любите книгу — источник знаний (с) М.Горький
Re: R *j=new R(); // i==0 b==false в избранное  новое    модер. 
От: Pasternak 
Дата: 28.05.08 13:11
Оценка:29 (2) :)
Здравствуйте, Аноним, Вы писали:

А>
А>class R{
А> public:
А>  int i;
А>  bool b;
А>};

А>int main(){
    
А>   R *j=new R();// i==0 b==false
А>   R *k=new R;  // i==-842150451  b==true
А>   R kk;        // i==-842150451  b==true
А> //R jj();      // ill 

А> return 0;
А>}
А>


А>В строке R *j=new R(); происходит инициализация членов,

А>а как добиться тогоже для R kk; ,с конструктором по умолчанию?

Наверное как-то так:

class R {
    public:
        boost::value_initialized<int> i;
        boost::value_initialized<bool> b;
};
Re[2]: R *j=new R(); // i==0 b==false в избранное  новое    модер. 
От: AlexCrush 
Дата: 28.05.08 16:27
Оценка: :)
Здравствуйте, Pasternak, Вы писали:

P>Наверное как-то так:


P>
P>class R {
P>    public:
P>        boost::value_initialized<int> i;
P>        boost::value_initialized<bool> b;
P>};
P>



Ого!

А HelloWorld с использованием буста как выглядит?
Re[2]: R *j=new R(); // i==0 b==false в избранное  новое    модер. 
От: Кодт модератор 
Дата: 29.05.08 07:36
Оценка: :))
Здравствуйте, Pasternak, Вы писали:

P>
P>class R {
P>    public:
P>        boost::value_initialized<int> i;
P>        boost::value_initialized<bool> b;
P>};
P>


О как! Я со своим auto_value
Автор: Кодт
Дата: 16.01.03
опоздал всего на полгода...
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!