Вопросы с тегом «c++17»

C ++ 17 - это название стандарта C ++, утвержденного в 2017 году. Он основан на предыдущем стандарте C ++ 14, улучшая базовый язык и стандартную библиотеку, а также добавляя несколько новых языковых функций.

4
экспериментальная :: ошибка компоновщика файловой системы
Я пытаюсь использовать новые функции C ++ 1z, фактически, в рамках разработки в рамках gcc 6.0. Если я попробую этот небольшой пример: #include <iostream> #include <experimental/filesystem> namespace fs = std::experimental::filesystem; int main() { fs::path p1 = "/home/pete/checkit"; std::cout << "p1 = " << p1 << std::endl; } Я получил: / …
98 c++  gcc  c++17 

2
Как получить размер файла в байтах с помощью C ++ 17
Есть ли подводные камни для конкретных операционных систем, о которых я должен знать? Есть много дубликатов ( 1 , 2 , 3 , 4 , 5 ) этого вопроса, но ответы на них были даны несколько десятилетий назад. Сегодняшние ответы на многие из этих вопросов неверны. Методы из других (старых …

6
Зачем использовать std :: make_unique в C ++ 17?
Насколько я понимаю, C ++ 14 был введен, std::make_uniqueпотому что из-за того, что порядок оценки параметров не был указан, это было небезопасно: f(std::unique_ptr<MyClass>(new MyClass(param)), g()); // Syntax A (Объяснение: если оценка сначала выделяет память для необработанного указателя, затем вызывает g()и исключение перед std::unique_ptrпостроением, тогда происходит утечка памяти.) Вызов std::make_uniqueбыл способом …
96 c++  c++17  unique-ptr 


3
Когда в C ++ информация о типах передается в обратном направлении?
Я только что наблюдал, как Стефан Т. Лававедж выступал CppCon 2018на « Выведении аргументов из шаблона класса», где в какой-то момент он, между прочим, сказал: В типе C ++ информация почти никогда не течет в обратном направлении ... Мне пришлось сказать «почти», потому что есть один или два случая, возможно, …

1
Как работает гарантированное копирование?
На собрании стандартов ISO C ++ в Оулу в 2016 году комитет по стандартам проголосовал за предложение под названием « Гарантированное исключение копий с помощью упрощенных категорий значений» . Как именно работает гарантированное копирование? Охватывает ли он некоторые случаи, когда исключение копирования уже было разрешено, или необходимы ли изменения кода, …

4
Надежны ли экспериментальные возможности современного C ++ для долгосрочных проектов?
У меня есть проект, который в настоящее время использует C ++ 11/14, но для этого требуется что-то вроде того std::filesystem, что доступно только в C ++ 17, и, следовательно, у меня нет возможности его использовать. Однако я вижу, что в моем текущем компиляторе он доступен как std::experimental::filesystem. Хорошая идея - …

1
Что такое руководства по выбору шаблонов и когда их следует использовать?
Стандарт C ++ 17 представляет «руководства по выводам шаблонов». Я так понимаю, они как-то связаны с новым выводом аргументов шаблона для конструкторов, представленным в этой версии стандарта, но я еще не видел простого объяснения в стиле FAQ, что они собой представляют и для чего они нужны. Что такое руководства по …

2
std :: ignore со структурированными привязками?
Прелюдия: std::tuple<int, int, int> f(); std::tuple<int, int, float, int> g(); C ++ 1z представит синтаксис для структурированных привязок, который позволит писать вместо int a, b, c; std::tie(a, b, c) = f(); что-то вроде auto [a, b, c] = f(); Однако std::tieтакже можно указать std::ignoreигнорировать определенные компоненты, например: std::tie(a, b, std::ignore, …

1
Почему GCC предупреждает меня о провале, даже когда я использую [[провал]]?
В следующем фрагменте кода я использую стандартный [[fallthrough]]атрибут из C ++ 1z для документирования того, что требуется падение: #include <iostream> int main() { switch (0) { case 0: std::cout << "a\n"; [[fallthrough]] case 1: std::cout << "b\n"; break; } } С GCC 7.1 код компилируется без ошибок. Однако компилятор все …

3
Всегда ли указатель с правильным адресом и типом является действительным указателем, начиная с C ++ 17?
(В отношении этого вопроса и ответа .) До стандарта C ++ 17 в [basic.compound] / 3 было включено следующее предложение : Если объект типа T расположен по адресу A, говорят, что указатель типа cv T *, значением которого является адрес A, указывает на этот объект, независимо от того, как было …

6
Разрешено ли компилятору оптимизировать локальную изменчивую переменную?
Разрешено ли компилятору оптимизировать это (согласно стандарту C ++ 17): int fn() { volatile int x = 0; return x; } к этому? int fn() { return 0; } Если да, то почему? Если нет, то почему? Вот некоторые размышления по этому поводу: текущие компиляторы компилируются fn()как локальная переменная, помещенная …

5
Как получить адрес лямбда-функции C ++ внутри самой лямбды?
Я пытаюсь выяснить, как получить адрес лямбда-функции внутри себя. Вот пример кода: []() { std::cout << "Address of this lambda function is => " << ???? }(); Я знаю, что могу перехватить лямбду в переменной и напечатать адрес, но я хочу сделать это на месте, когда эта анонимная функция выполняется. …
53 c++  c++11  lambda  c++14  c++17 

2
Почему remove_reference не работает с функциями?
Сталкивался с чем-то странным, когда делал шаблонное метапрограммирование на днях. Это в основном сводится к тому, что утверждение не (как я и ожидал) не прошло. static_assert(std::is_same_v<void(), std::remove_reference_t<void()&>>); Сначала я думал, что допустил синтаксическую ошибку при определении ссылки на функцию, но это утверждение проходит, показывая, что это не так. static_assert(std::is_same_v<void()&, void()&>); …
38 c++  templates  types  c++17 

4
Как сравнить сигнатуру двух функций?
Есть ли способ проверить, имеют ли две функции одинаковую подпись? Например: int funA (int a, int b); int funB (int a, int b); float funC (int a, int b); int funD (float a, int b); В этом примере funAи funBесть единственная комбинация функций, которую следует вернуть true.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.