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

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

1
Можно ли изменить встроенную переменную после инициализации в C ++ 17?
Мой сценарий следующий (он работал в Clang, но не в GCC) liba.hpp: inline int MY_GLOBAL = 0; libother.cpp: (dll) #include "myliba.hpp" void myFunc() { // MYGLOBAL = 28; } someexe.cpp: RunAppThatUsesBothLibAandLibOther(); Проблема в том, что встроенная переменная показывала 0 в тех местах, где я ожидал 28, потому что она была …
11 c++  visual-c++  dll  clang  c++17 

6
Невинный диапазон на основе петли не работает
Следующее не компилируется: #include <iostream> int main() { int a{},b{},c{},d{}; for (auto& s : {a, b, c, d}) { s = 1; } std::cout << a << std::endl; return 0; } Попробуй это на Годболте Ошибка компилятора: error: assignment of read-only reference 's' Теперь в моем реальном случае список состоит …

2
Сброс слабого_птра влияет на shared_ptr?
Я не очень привык к использованию weak_ptrи столкнулся с довольно запутанной ситуацией. Я использую Intel XE 2019 Composer update 5 ( пакет 2019.5.281 ) в сочетании с Visual Studio 2019 ver. 16.2.5 . Я компилирую в 64-битной версии. Я использую стандарт C ++ 17 . Вот код для моего решения …

3
Могу ли я использовать std :: transform вместо политики параллельного выполнения?
Если я не ошибаюсь, я могу заставить std::transformработать на месте , используя тот же диапазон, что и итератор ввода и вывода. Предположим, у меня есть какой-то std::vectorобъект vec, тогда я бы написал std::transform(vec.cbegin(),vec.cend(),vec.begin(),unary_op) используя подходящую унарную операцию unary_op. Используя стандарт C ++ 17, я хотел бы выполнить преобразование параллельно, вставив …

1
Проблема в GCC / C ++ 17 с шаблоном шаблона класса
Рассмотрим 2 следующие перегрузки template<typename T> bool test() { return true; } template<template<typename ...> class T> bool test() { return false; } Первый работает для обычных классов, второй - для шаблонов, которые не создаются. Например: std::cout<<test<int>()<<std::endl; <-- this yields 1 std::cout<<test<std::list>()<<std::endl; <--this yields 0 Теперь рассмотрим следующую функцию шаблона: template<typename …
10 c++  templates  gcc  clang  c++17 

2
Вывод аргумента шаблона для аргумента типа функции
Рассмотрим следующую программу. #include <iostream> template <typename T> void f( void ( *fn )( T ) ) { fn( 42 ); } void g( int x ) { std::cout << "g( " << x << " );\n"; } int main() { f( g ); } Программа успешно компилируется, и ее …

5
Почему я не могу получить индекс варианта и использовать его для получения его содержимого?
Я пытаюсь получить доступ к содержанию варианта. Я не знаю, что там, но, к счастью, вариант делает. Поэтому я подумал, что просто спрошу у варианта, в каком индексе он находится, а затем использую этот индекс для std::getсвоего содержимого. Но это не компилируется: #include <variant> int main() { std::variant<int, float, char> …
10 c++  c++17  variant 

2
Когда вам нужна строка с нулевым окончанием в сценарии только для чтения?
Я играл с std::string_viewбиблиотекой и обдумывал изменение кодовой базы, над которой я работал, чтобы использовать std::string_viewкак можно больше. Тем не менее, во многих темах, которые я прочитал на тему, когда и где использовать std::string_viewвместо const std::string &. Я видел много ответов: «Когда вам не нужна строка с нулевым символом в …

2
Как убрать копию при создании цепочки?
Я создаю класс типа цепочки, такой как маленький пример ниже. Похоже, что при объединении функций-членов вызывается конструктор копирования. Есть ли способ избавиться от вызова конструктора копирования? В моем примере с игрушкой, приведенным ниже, очевидно, что я имею дело только с временными, и поэтому «должно» (возможно, не по стандартам, но логически) …
10 c++  c++14  c++17 


2
Допустимый синтаксис вызова псевдодеструктора для плавающей константы
Рассмотрим следующую демонстрационную программу. #include <iostream> int main() { typedef float T; 0.f.T::~T(); } Эта программа составлена Microsoft Visual Studio Community 2019. Но clangи gccвыдать ошибку, как это prog.cc:7:5: error: unable to find numeric literal operator 'operator""f.T' 7 | 0.f.T::~T(); | ^~~~~ Если написать выражение вроде, ( 0.f ).T::~T()то все …

2
Что гарантировано с C ++ std :: atomic на уровне программиста?
Я выслушал и прочитал несколько статей, выступлений и вопросов о стековом потоке std::atomicи хотел бы быть уверен, что хорошо это понял. Потому что я все еще немного запутался с видимостью записи строк кэша из-за возможных задержек в протоколах когерентности кэша MESI (или производных), буферах хранения, недействительных очередях и так далее. …

1
Порядок выполнения оператора new и аргумента конструктора
Спецификация C ++ определяет порядок operator newи конструктор Aв new C(A()). G ++ пусть порядок будет A()-> new-> C(), но clang ++ пусть это будет new-> A()-> C(). Разница вызвана неопределенным поведением? g ++: 7.4.0 clang ++: 10.0.0 #include <iostream> #include <cstdlib> struct A { A() { std::cout << "call …
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.