All streams
Search
Write a publication
Pull to refresh
39
0
Виктор Щерба @vScherba

Разработчик C++

Send message
Я вот тут habrahabr.ru/post/197164/#comment_6839372 написал, почему VS компилирует. Не уверен на 100%, позже найду в стандарте.
Но rvalue может неявно привестись только к константному lvalue (iterator const&), либо к временному (iterator&&).

Хочу добавить уточнение: для пользовательских типов сделано послабление. От их временных объектов в выражениях могут браться lvalue-ссылки. Я не помню, где это в стандарте указано, но понимаю для чего это сделано. Дело в том, что у временных объектов пользовательского типа можно вызывать неконстантные методы. А вызов метода с неявным this-аргументом равносильно вызову внешней функции с этим объектом в качестве аргумента.
Я могу и ошибаться. Позже поищу в стандарте, сейчас некогда.

Теперь я понял, почему у меня компилируется, а у автора статьи нет. В студии vector<T>::iterator это класс, а в компиляторе автора скорее всего T*.
В данном случае, возвращается const_iterator

Нет-нет, в этом примере возвращается именно vector<int>::iterator, это можно проверить в отладчике. nickolaym действительно правильно объяснил (за одним исключением, добавлю ему коммент), проблема в том, что begin возвращает временный объект, от которого хотят lvalue reference.
Насчет константности я все понимаю, здесь константность я имел в виду в контексте iterator/const_iterator.
Насчет листинга 4.3 я не понял:
MyVector v;
v.push_back(1);
processIterator(v.begin());

Почему у Вас v.begin() возвращает константный итератор? У меня вызывается неконстантная версия begin(), как и должно было быть, ведь v не константный.
В VS 2008 и 2012 отлично компилируется.
Дело в том, что отдельное определение статических членов вне класса:
const int SwitchClass::ONE = 1;
const int SwitchClass::TWO = 2;

может находиться в отдельной единице трансляции (т.е. cpp-файле), а компилятор для case должен подставить интегральную константу, известную на этапе компиляции в текущей единице трансляции.

class SwitchClass
{
public:
    static const int ONE = 1; // являются интегральными константами времени компиляции по стандарту
    static const int TWO = 2;
    ....
};

Кстати, есть совсем старые компиляторы, которые такой синтаксис не поддерживают.
Это происходит из-за того, что имена производного класса по-умолчанию скрывают имена базового, поэтому скрытые имена не участвуют в перегрузке.
using явно вносит имена в область видимости производного класса, что делает их полноценными кандидатами на разрешение перегрузки.
Задача 6.Перегрузка виртуальных функций:

Проблема решается просто:

class TestVirtualsChild : public TestVirtuals
{
public:
    using TestVirtuals::fun; // решается этой строчкой

    virtual void fun(int i)
    {
        std::cout<<"int child"<<std::endl;
    }
};
Задача 2. Switch и класс:

Не обязательно решать проблему через enum, Можно так:

static const int ONE = 1;
static const int TWO = 2;
Под windows же поднять буст и парвильно настроить — нетривиальная задача

Да ну, вы что. Для bind и остальной большей части буста, вообще ничего настраивать не нужно, только заинклудить bost/bind.hpp, это же header-only библиотеки.

Что касается link-библиотек, под винду настраивается тривиально. Если не желаете сами собирать, то скачиваете готовые, собранные либы с www.boostpro.com/download/ Там даже msi-установщик готовый.
В C++11 std::bind уже есть. Также можно и лямбдой.
Мультиметоды и в статически-типизированных языках реализуемы:
1. Для C++ Страуструп предложил драфт о вводе в язык мультиметодов. Вот еще.
2. Я сам разработал шаблонную библиотеку мультиметодов для С++.
2. С# 4.0 нативно поддерживает. Правда, я не знаю, как там это устроено.

Так что мультиметоды не прерогатива динамически-типизированных языков.
Возможно, я ошибаюсь, но мне казалось, что стандарт не накладывает ограничение на количество параметров шаблона по-умолчанию, например в std::vector:
template <typename T, typename A = std::allocator<T>, typename _P1 = def1, typename _P2 = def2, ...>
class vector;
— вполне может быть валидной сигнатурой vector.
Тогда, предложенный Вами способ не подойдет, т.к. заранее не известно, сколько параметров у шаблона.
Поправьте меня, если я ошибаюсь.
live.cnews.ru/forum/index.php?s=&showtopic=68570&view=findpost&p=1875925
Плазменный электролиз. Доклад на семинаре в РУДН Ю.Н. Бажутов Позновательное видео о том, что в этом эксперементе есть опасное излучение. Исследователи, со слов Бажутова пострадали.
Может, стоит дополнить пост информацией о том, что опыт может оказаться небезопасным?
Я бы рекомендовал Вам напрямую с ними пообщаться (зарегайтесь на форуме). Я чисто случайно заметил пост и решил перебросить его на хабр, т.к. у меня есть аккаунт здесь.
Ответ с live.cnews, цитата:
Спасибо, я имел ввиду вот этот доклад video.mail.ru/video/mail/rccnt-bl/1295#video=/mail/rccnt-bl/1295/1311 27.06.2013 на семинаре в РУДН Ю.Н. Бажутов прочитал доклад о результатах экспериментов с плазменным электролизом. Примерно 14 мин. очень похожие параметры как на хабре. Тот же стакан воды… немного соли… напряжение…
Очень похожая установка, был существенный выход нейтронов. Ребята проводя эксперемент могли бы получить дозу.
На довольно серьезном топике «Холодный термояд заработал?» форума cnews человек пишет:

«Пересеклись Вода горит! А также ЭГЭ и волны-убийцы habrahabr.ru/post/187084/ и Бажутов Ю.Н. Интересно, а ребята счетчики нейтронов ставили? (я бы задал этот вопрос, но комментарии, только от тех, кто имеет инвайт-приглашение).»

Разъясните, пожалуйста ребятам, что они просят.
Я тоже с трудом смог представить «кристалл соли», как Вы его назвали.
А представить сложно вот почему: на оригинальном изображении в изометрии каждая пара параллельных плоскостей подкрашена отдельным цветом — читай воображаемый источник света одинаково подсвечивает параллельные поверхности. Поэтому, не напрягаясь, мозг распознает то большой куб с маленьким выпиленным, то маленький куб в углу. На это и рассчитана светотень.
Я поменял местами эти же цвета, и представить «кристалл соли с дефектом» стало значительно проще (по крайней мере мне):
Поэтому рекомендуют использовать make_xxx_ptr везде, где это возможно, и не ломать голову насчет потенциальных утечек. Так проще и надежнее.

Information

Rating
Does not participate
Location
Дубна, Москва и Московская обл., Россия
Date of birth
Registered
Activity