Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Квест для всех остальных 
:(
    Опции темы
borisbn
Дата 10.7.2011, 13:12 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(azesmcar @  9.7.2011,  13:57 Найти цитируемый пост)
можно ли написать что либо тернарным оператором, что нельзя написать простым if-ом

инициализацию (присвоение) ссылки
Код

int x = 42;
int y = 24;

int & ref = ( some ) ? x : y;


Добавлено @ 13:19
Цитата(azesmcar @  9.7.2011,  13:57 Найти цитируемый пост)
5. есть ли разница между переменными x1, x2 и x3, x4. Если есть, то какая?
#include <iostream>

struct X
{
    int a;
    int b;
};

int main()
{
    X x1;
    X x2 = X();
    X* x3 = new X;
    X* x4 = new X();
}


x1 и то, на что указывает x3 - не инициализированы,
а x2 и то, на что указывает x4 - инициализированы значениями по-умолчанию. Для int - нули

P.S. а зачем #include <iostream> ? smile

Добавлено @ 13:22
Цитата(azesmcar @  9.7.2011,  13:57 Найти цитируемый пост)
6. Какой конструктор копирования генерирует компилятор для класса при необходимости, с константной ссылкой или нет?

Думаю, не имеет значения, т.к. компилятор по этой ссылке всё равно ничего не пишет, а на этапе исполнения const'ов вообще нет.
Предполагаю, что константная, но как это проверить - не имею ни малейшего понятия.

Это сообщение отредактировал(а) borisbn - 10.7.2011, 13:24


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
azesmcar
Дата 10.7.2011, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(borisbn @  10.7.2011,  13:12 Найти цитируемый пост)

присовение ссылки

верно, еще есть?

Добавлено через 1 минуту и 42 секунды
Цитата(borisbn @  10.7.2011,  13:12 Найти цитируемый пост)


x1 и то, на что указывает x3 - не инициализированы,
а x2 и то, на что указывает x4 - инициализированы значениями по-умолчанию. Для int - нули

P.S. а зачем #include <iostream> ? 

да, верно. а iostream от предыдущего примера остался smile

Добавлено через 6 минут и 50 секунд
Цитата(borisbn @  10.7.2011,  13:12 Найти цитируемый пост)
Думаю, не имеет значения, т.к. компилятор по этой ссылке всё равно ничего не пишет, а на этапе исполнения const'ов вообще нет.
Предполагаю, что константная, но как это проверить - не имею ни малейшего понятия

компилятор не пишет, но пользователь вызывает конструктор, сгенерированный компилятором и констатность здесь играет роль.

Добавлено через 8 минут и 7 секунд
borisbn

вышлю ответ в приват.
PM   Вверх
Сыроежка
Дата 10.7.2011, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 24.6.2011

Репутация: 1
Всего: 1



Цитата(volatile @  9.7.2011,  23:26 Найти цитируемый пост)
Цитата(Сыроежка @  9.7.2011,  20:34 )
Здесь все просто . Если я правильно разглядел, то ч присваивается результат оператора "запятая", то есть последнее выражение, которое соответсвует вызову функции foo.
Функция возвращает ++y, то есть значение равное 1.
Поэтому и x. и y будут равны 1. 


У оператора запятая, приоритет ниже чем у оператора присваивания.
Знатоку тонкостей автоматического приведения типов, как-то не к лицу путаться с приоритетами.

Но хоть, по крайней мере, честно


Я смотрел код поверхностно. Даже с трудом разглядел, что там запятая, так как у меня заканчивалось время, выделенное на интернет в интернет-кафе. А когда суетишься, что бы успеть напечатать, то уже не вникаешь.
PM MAIL   Вверх
bsa
Дата 10.7.2011, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Раздел вроде для новичков, а отвечают профессионалы. Ну раз так, то и я тогда отвечу:
1. отличие кардинальное - тернарный оператор можно использовать в константных выражениях. Например, для метапрограммирования (программы этапа компиляции, "Современное программирование на С++", А. Александреску) и условной инициализации констант (в т.ч. и ссылок).
3. массив будет заполнен "словами" (точнее, непробельными символами, которые изначально разделены пробельными) из потока.
6. генерируется конструктор, которому передается ссылка на константный объект
PM   Вверх
mes
Дата 10.7.2011, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(borisbn @  10.7.2011,  12:12 Найти цитируемый пост)
Предполагаю, что константная, но как это проверить - не имею ни малейшего понятия.

Код

struct A {
//  A(A&) {}
};
void f(A) {}

int main () {  f( A() ); }


при неконстантом конструкторе копий этот код по стандарту не скомпилирутся.. 
(некоторые версии студии скомпилируют из за своего несоответсвия стандарту ) 

Это сообщение отредактировал(а) mes - 10.7.2011, 18:25


--------------------
PM MAIL WWW   Вверх
borisbn
Дата 10.7.2011, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



bsa, и Вы и azesmcar в личке говорите о
Цитата(bsa @  10.7.2011,  18:06 Найти цитируемый пост)
метапрограммирования

Можете пояснить, каким образом тернарный оператор незаменим в метапрограммировании ? Что вообще имеется в виду ?
Спасибо.

Цитата(bsa @  10.7.2011,  18:06 Найти цитируемый пост)
а отвечают профессионалы

Кого имели в виду ? Лучше ответить в личку, если не против


Добавлено через 1 минуту и 32 секунды
mes, ну я так понимаю, что при разкомментированном
Цитата

A(A&) {}

?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
mes
Дата 10.7.2011, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(borisbn @  10.7.2011,  17:32 Найти цитируемый пост)
mes, ну я так понимаю, что при разкомментированном

при раскомментированом  компилиться не должен.. на этом принципе основана "защита" от копирования auto_ptr (в vector).. 


Это сообщение отредактировал(а) mes - 10.7.2011, 18:55


--------------------
PM MAIL WWW   Вверх
borisbn
Дата 10.7.2011, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



azesmcar, mes, спасибо. По поводу вопроса 
Цитата
Какой конструктор копирования генерирует компилятор для класса при необходимости, с константной ссылкой или нет?

всё стало понятно - и вопрос и ответ smile


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
volatile
Дата 10.7.2011, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(mes @ 10.7.2011,  18:23)
Код

struct A {
//  A(A&) {}
};
void f(A) {}

int main () {  f( A() ); }


при неконстантом конструкторе копий этот код по стандарту не скомпилирутся.. 
(некоторые версии студии скомпилируют из за своего несоответсвия стандарту )
А я вот не понял.
mes, Почему этот код не скомпилится. По крайней мере здесь компилится.
http://liveworkspace.org/code/ea840a0b6f28...2cddb89f87265fe

На студии тоже скорей всего скомпилится.

???

Или вы имелли ввиду не скомпилится при расскоментировании?

Это сообщение отредактировал(а) volatile - 10.7.2011, 20:10
PM MAIL   Вверх
bsa
Дата 10.7.2011, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(borisbn @  10.7.2011,  18:32 Найти цитируемый пост)
Можете пояснить, каким образом тернарный оператор незаменим в метапрограммировании ? Что вообще имеется в виду ?

имеется в виду программы этапа компиляции.
PM   Вверх
borisbn
Дата 10.7.2011, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(bsa @  10.7.2011,  20:07 Найти цитируемый пост)
имеется в виду программы этапа компиляции.

Есть у меня дурацкое свойство - не понимаю общие понятия, люблю разбираться на примерах... поэтому не понял... :(
Что именно имеется в виду ? Можно пример на Си++ ? Спасибо.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
mes
Дата 10.7.2011, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(volatile @  10.7.2011,  19:02 Найти цитируемый пост)
 Почему этот код не скомпилится. По крайней мере здесь компилится.


Цитата(mes @  10.7.2011,  17:23 Найти цитируемый пост)
при неконстантом конструкторе копий этот код по стандарту не скомпилирутся.. 

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

Добавлено через 3 минуты и 6 секунд
Цитата(volatile @  10.7.2011,  19:02 Найти цитируемый пост)
Или вы имелли ввиду не скомпилится при расскоментировании?

если б генерировался (только) неконстантный, то нескомпилировался (если конечно других нарушений стандарта в этом русле у компилятора нет ) 


--------------------
PM MAIL WWW   Вверх
mes
Дата 10.7.2011, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



вобщем помойму лучше сразу поянить, чтоб не вызывать кучу дополнительных вопросов.. 
по стандарту при пристыковке rvalue (условно говоря временного объекта) к константной ссылке, время жизни объекта увеличивается на время жизни ссылки..  С неконстантной ссылкой попытка подобного присвоения вызовет ошибку.. 
поэтому возможно так
Код

int f(const int& )
{
    const int cri& = 1; // можно
  
    return cri;  
}
f(2); // можно
const int cri = f(3);

но нельзя тоже самое с неконстантной :

Код

int f(int& )
{
    int ri& = 1; // нельзя
  
    return cri;  
}
f(2); // нельзя
int ri = f(3); // нельзя

в студии (помойму 2008) пошли "на встречу" пользователю и убрали несправедливость по отношению к обычной ссылке, позволяя к ней пристыковывать rvalue.. поэтому на ней вторая часть кода компилится "нормально" , что не позволяет проверить какой конструктор копий она генерит по умолчанию.. А также этим создает целый ряд неожидаемых и трудноуловиммых ошибок.. 


--------------------
PM MAIL WWW   Вверх
azesmcar
Дата 10.7.2011, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(bsa @  10.7.2011,  18:06 Найти цитируемый пост)
1. отличие кардинальное - тернарный оператор можно использовать в константных выражениях. Например, для метапрограммирования (программы этапа компиляции, "Современное программирование на С++", А. Александреску) и условной инициализации констант (в т.ч. и ссылок).

 smile 

Цитата(bsa @  10.7.2011,  18:06 Найти цитируемый пост)
3. массив будет заполнен "словами" (точнее, непробельными символами, которые изначально разделены пробельными) из потока.

это объявление прототипа функции.

Цитата(bsa @  10.7.2011,  18:06 Найти цитируемый пост)
6. генерируется конструктор, которому передается ссылка на константный объект 

не всегда, бывают варианты. Если один из членов класса имеет неконстантный аргумент конструктора копирования, то и сгенерированный будет неконстантным. Если попытаться самому написать этот конструктор вместо компилятора причины сразу станут очевидны.


Цитата(borisbn @  10.7.2011,  18:32 Найти цитируемый пост)
Можете пояснить, каким образом тернарный оператор незаменим в метапрограммировании ? Что вообще имеется в виду ?

http://liveworkspace.org/code/92ed0e2bdbf8...0dd43271d886de0
PM   Вверх
mes
Дата 11.7.2011, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(azesmcar @  10.7.2011,  22:52 Найти цитируемый пост)
Если один из членов класса имеет неконстантный аргумент конструктора копирования, то и сгенерированный будет неконстантным.

имелось ввиду не имеет константного ? 



--------------------
PM MAIL WWW   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.2285 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.