Не удается инициализировать const int из распакованного кортежа

Вопрос действительно прост, почему этот код не работает:

#include <tuple>

int main( int argc, char* argv[]) {
    const int a,b = std::tie(std::make_pair(1,2));
    return EXIT_SUCCESS;
}

G ++ дает мне эту ошибку:

./test.cpp: В функции 'int main(int, char**)': ./test.cpp:4:13: ошибка: неинициализировано const 'a' [-fpermissive] const int a,b = std:: галстука (станд::make_pair(1,2)); ^ ./test.cpp:4:42:

ошибка: невозможно связать неконстантную ссылку lvalue типа 'std::pair&' с rvalue типа 'std:: pair'
const int a,b = std::tie(std::make_pair(1,2));

Я не могу получить подобный кортежу возврат по значению, используя этот тип шаблона (как const, так и не const). Это лучший способ сделать то, что я пытаюсь достичь здесь?

1 ответ

Решение
const int a,b = std::tie(...)

Это не делает то, что вы думаете. Это создает два const int переменные:

  • aнеинициализированный

  • b, инициализированный в std::tie(...)


Правильный способ использования std::tie как следует:

int a, b;
std::tie(a, b) = std::make_pair(1, 2);

Обратите внимание, что вам нужно a а также b быть уже объявленным и неconst,


В C++17 вы можете использовать вместо этого структурированные привязки:

const auto [a, b] = std::make_pair(1, 2);
Другие вопросы по тегам