LINUX.ORG.RU
решено ФорумTalks

Итерирование по Map по key, value

 ,


0

3

Собственно дано:

Xcode последняя стабильная в последней стабильной macOS.

Выставлен диалект на c++17.

Но не компилируется.

Что не так?

Для тех, кто не в курсе про c++17. Там такое добавили.

for( auto const& [key, val] : MapCollection )
{
    ;
}

Перемещено tailgunner из development

★★★★★

Последнее исправление: fornlr (всего исправлений: 2)

Нет сниппета не компилирующегося кода

Нет логов ошибки компилятора

5 звёзд

Deleted
()

Что не так?

Хз что с тобой не так. Как начал символы в текст вставлять - совсем отупел.

crutch_master ★★★★★
()
Ответ на: комментарий от fornlr

Для тех, кто не в курсе про c++17

Фу, блин, какой ты грубиян. Но хоть пример кода выложил. Молодец! Теперь выложи ещё текст ошибки, а дальше местные ванги погуглят за тебя.

Deleted
()
Ответ на: комментарий от Deleted

Да ну его. Предлагаю срач pipeline архитектура vs говномногослойки.

crutch_master ★★★★★
()

Xcode 9.4.1 (9F2000)

Конкретно этот пример скомпилировался даже при C++14, но с предупреждением «Decomposition declarations are a C++17 extension» и «Unused variable '[key, val]'».

andreyu ★★★★★
()

О отличная фича.

invy ★★★★★
()
Ответ на: комментарий от Silerus

это ссылка

То есть если он что то будет с константами key, val делать они и в массиве(объекте Map) перезапишутся - так что-ли?

uin ★★★
()
Ответ на: комментарий от uin

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

Silerus ★★★★
()
Ответ на: комментарий от Silerus

нет, он их для того константными и вызвал чтоб не изменять

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

upd

$arr0 = array( 'a' => 0 );
$arr1 = &$arr0;

$arr1['a'] = 1;
echo $arr0['a'];  //=> 1

Блин и правда работает.

uin ★★★
()
Последнее исправление: uin (всего исправлений: 2)
Ответ на: комментарий от uin

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

Silerus ★★★★
()
Ответ на: комментарий от Silerus

только ссылка - это не переменная

http://eel.is/c draft/basic#def:variable : A variable is introduced by the declaration of a reference other than a non-static data member or of an object. The variable's name, if any, denotes the reference or object.

Ты хотел сказать что ссылка это не объект.

utf8nowhere ★★★
()
Ответ на: комментарий от utf8nowhere

не переменная в смысле она не занимает место в памяти, а так да не объект, скорее ее можно назвать алиасом, вторым именем

Silerus ★★★★
()
Ответ на: комментарий от EXL

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

Silerus ★★★★
()
Ответ на: комментарий от meliafaro

смотрите с одной стороны стандарт говорит

C+11 Standard: § 8.3.2.4

    It is unspecified whether or not a reference requires storage (3.7).

Note that, Unspecified means that an compiler implementation does not need to document how it implements a reference. Neither should you consider the implementation to be anything specific. In short, the language standard treats reference implementation as an detail which user of the language does not need to know and hence it abstracts this detail.
На усмотрение компилятора, делаем маленький пробный пример
int a=10;
    int &b=a;
int main(){
    
    ++b;
}
и выхлоп в ассемблере
a:
        .long   10
b:
        .quad   a
main:
        push    rbp
        mov     rbp, rsp
        mov     eax, OFFSET FLAT:a
        mov     edx, DWORD PTR [rax]
        add     edx, 1
        mov     DWORD PTR [rax], edx
        mov     eax, 0
        pop     rbp
        ret
И вроде как 64 битную переменную он создал, но в итоге не использовал

Silerus ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.