Запитання з тегом «c++11»

Використовуйте цей тег для коду, який повинен скласти як C ++ 11 (не використовуючи жодних функцій, введених у C ++ 14 або новіших версіях).

5
Тип повернення лямбди може бути виведений за значенням, що повертається, то чому не може функція?
#include <iostream> int main(){ auto lambda = [] { return 7; }; std::cout << lambda() << '\n'; } Ця програма компілює та друкує 7. Тип повернення лямбда виводиться до цілочисельного типу на основі поверненого значення 7. Чому це неможливо зі звичайними функціями? #include <iostream> auto function(){ return 42; } int …
75 c++  function  c++11  lambda  auto 

1
Тип `this` у статичній функції-члена?
У C ++ 5.1.1 / 3 [expr.prim.general] сказано: Тип і категорія значень [of this] визначаються в рамках статичної функції-члена. Що це означає? Як це актуально? Зверніть увагу, що: this не повинен відображатися в оголошенні статичної функції-члена

6
C ++ 11 std :: встановити функцію порівняння лямбда-сигналу
Я хочу створити std::setспеціальну функцію порівняння. Я міг би визначити це як клас з operator(), але я хотів насолодитися можливістю визначати лямбда-де, де він використовується, тому я вирішив визначити лямбда-функцію в списку ініціалізації конструктора класу, який є std::setчленом. Але я не можу зрозуміти тип лямбди. Перш ніж продовжувати, ось приклад: …

2
Яке обґрунтування дужок у необроблених рядкових літералах C ++ 11 R “(…)”?
У C ++ 11 представлена ​​дуже зручна функція, яка називається необробленими рядковими літералами, що є рядками без символів виходу. І замість того, щоб писати це: regex mask("\\t[0-9]+\\.[0-9]+\\t\\\\SUB"); Ви можете просто написати це: regex mask(R"(\t[0-9]+\.[0-9]+\t\\SUB)"); Досить читабельніший. Однак зверніть увагу, що додаткові дужки навколо рядка потрібно розмістити, щоб визначити необроблений літеральний …

6
Як забезпечити, щоб кожен метод класу спочатку викликав якийсь інший метод?
Я маю : class Foo { public: void log() { } void a() { log(); } void b() { log(); } }; Чи є спосіб, яким я можу користуватися для кожного методу Foo, дзвінкаlog() , але без необхідності явного введення log () як першого рядка кожної функції? Я хочу зробити …
74 c++  c++11 

3
Налаштування комутаторів компілятора GCC у Qt, QtCreator та QMake
Нещодавно я спробував використовувати Qt Creator 1.3.2, Qt 4.6.2 та GCC 4.4.0 (32-розрядна версія) в Windows 7 (64-розрядна версія) для компіляції програми з використанням деяких експериментальних розширень C ++ 0x та виникла така (фатальна) помилка: Цей файл вимагає підтримки компілятора та бібліотеки для майбутнього стандарту ISO C ++, C ++ …
74 c++  qt  c++11  qt-creator 

2
C ++ 11: чому std :: condition_variable використовує std :: unique_lock?
Я трохи заплутаний у ролі, std::unique_lockколи працюю з std::condition_variable. Наскільки я зрозумів документацію , std::unique_lockце, в основному, роздутий захисний кожух із можливістю поміняти стан між двома замками. Я досі використовував pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)для цього (мабуть, це те, що використовує STL на posix). Для цього потрібен мьютекс, а не замок. …

11
Використання відрахування типу «auto» - як дізнатися, який тип вивів компілятор?
Як я можу дізнатись, який тип вивів компілятор при використанні autoключового слова? Приклад 1: Простіший auto tickTime = 0.001; Це було виведено як a floatабо adouble? Приклад 2: Більш складні (і мій головний біль): typedef std::ratio<1, 1> sec; std::chrono::duration<double, sec > timePerTick2{0.001}; auto nextTickTime = std::chrono::high_resolution_clock::now() + timePerTick2; Що це …
74 c++  c++11  auto  chrono 

10
Використання std :: vector для перегляду на необроблену пам'ять
Я використовую зовнішню бібліотеку, яка в якийсь момент дає мені необроблений покажчик на масив цілих чисел та розмірів. Тепер я хотів би використати std::vectorдля доступу та зміни цих значень на місці, а не для доступу до них із необробленими покажчиками. Ось мистецький приклад, який пояснює суть: size_t size = 0; …
71 c++  c++11  vector  stdvector 

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

3
C ++ decltype і дужки - чому?
Тема обговорювалася раніше , але це не дублікат. Коли хтось запитує про різницю між decltype(a)і decltype((a)), звичайна відповідь - aце змінна, (a)є виразом. Я вважаю цю відповідь незадовільною. По-перше, aце також вираз. Параметри первинного вираження включають, серед іншого, - (вираз) id-вираз Що ще важливіше, фразування для decltype розглядає круглі дужки …

6
Чи безпечно поміняти два різні вектори на C ++, використовуючи метод swap std :: vector ::?
Припустимо, у вас є такий код: #include <iostream> #include <string> #include <vector> int main() { std::vector<std::string> First{"example", "second" , "C++" , "Hello world" }; std::vector<std::string> Second{"Hello"}; First.swap(Second); for(auto a : Second) std::cout << a << "\n"; return 0; } Уявіть, що вектором це ще немає std::string, але класи: std::vector<Widget> WidgetVector; …
30 c++  c++11  vector  stdvector  swap 

3
Як я можу запобігти відгадуванню C ++ другого аргументу шаблону?
Я використовую бібліотеку C ++ ( strf ), яка десь у ній має такий код: namespace strf { template <typename ForwardIt> inline auto range(ForwardIt begin, ForwardIt end) { /* ... */ } template <typename Range, typename CharT> inline auto range(const Range& range, const CharT* sep) { /* ... */ } …

2
Як перевірити, чи визначені цілі числа з фіксованою шириною
У C ++ цілі числа з фіксованою шириною визначаються як необов'язкові , але я не можу знайти рекомендований спосіб перевірити, чи вони фактично визначені. Який би був портативний спосіб перевірити, чи є цілі числа фіксованої ширини?
25 c++  c++11  types  stdint  cstdint 

3
Різниця в поведінці змінної функції лямбда від посилання на глобальну змінну
Я виявив, що результати компіляторів відрізняються, якщо я використовую лямбда, щоб захопити посилання на глобальну змінну із змінним ключовим словом, а потім змінити значення у функції лямбда. #include <stdio.h> #include <functional> int n = 100; std::function<int()> f() { int &m = n; return [m] () mutable -> int { m …

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.