Не удается инициализировать 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);