c++11 ×32
Создан 06.01.2025
0
голоса
5
ответов
13
просмотров
Функция, принимающая как lvalue, так и rvalue аргументы

Есть ли способ написать функцию на C++, которая принимает как lvalue, так и rvalue аргументы, не используя шаблоны?

Например, предположим, что я пишу функцию print_stream, которая считывает данные из istream и выводит их на экран или что-то в этом роде.

Я считаю вполне разумным вызывать...

0
голоса
2
ответов
18
просмотров
Эквивалент unique_ptr в Boost?

Проблема: Есть ли эквивалент класса std::unique_ptr из C++11 в библиотеке Boost?

Я ищу поведение, позволяющее создать безопасную для исключений фабричную функцию, вот так:

std::unique_ptr create_base()
{
    return std::unique_ptr(new Derived);
}

void some_other_function()
{
   ...
0
голоса
5
ответов
13
просмотров
Избежание неявного преобразования в конструкторе: ключевое слово 'explicit' здесь не помогает

Задача заключается в том, чтобы запретить создание объекта класса A при передаче параметра типа double, даже если конструктор помечен как explicit. Я хочу, чтобы объекты класса A могли создаваться только при передаче целочисленного параметра, например, A a1 = A(10);.

Вот мой...

0
голоса
0
ответов
11
просмотров
Использование futures в C++11: Вложенные вызовы std::async приводят к сбоям - ошибка компилятора или стандартной библиотеки?

Описание проблемы

После того как я столкнулся с падениями программы при использовании вложенных вызовов std::async, я смог воспроизвести проблему в следующем минимальном примере. Ошибки происходят часто, но не всегда. Видите ли вы что-то, что может быть причиной проблемы, или это ошибка...

0
голоса
0
ответов
16
просмотров
Инициализатор члена не указывает на нестатический член данных или базовый класс

Проблема с инициализацией защищенных членов родительского класса в C++

Я столкнулся с проблемой, когда пытаюсь инициализировать защищенный член родительского класса в списке инициализации конструктора производного класса, и не могу найти решение через Google.

Привожу следующий код для...

0
голоса
2
ответов
15
просмотров
Почему доступ по диапазону для std::pair был удалён в C++11?

Я только что обнаружил, что в одном из черновиков C++11 были перегрузки stdbegin и stdend для std::pair, которые позволяли рассматривать пару итераторов как диапазон, подходящий для использования в цикле на основе диапазонов (N3126, раздел 20.3.5.5), но это было удалено.

Кто-нибудь знает,...

0
голоса
2
ответов
17
просмотров
Почему необходимо помечать функции как constexpr?

Проблема с использованием constexpr в C++

C++11 позволяет использовать функции, объявленные с спецификатором constexpr, в константных выражениях, таких как аргументы шаблонов. Однако, есть строгие требования к тому, что может быть constexpr, по сути, такая функция может инкапсулировать...

0
голоса
0
ответов
10
просмотров
Использование std::make_unique с пользовательским делетором

Я пытаюсь использовать std::unique_ptr с пользовательским делитером и хотел бы воспользоваться std::make_unique, а не сырым оператором new. Я работаю с VC++2013. Мне кажется, что нет способа использовать std::unique_ptr, если есть кастомный делитер. Не пропустил ли я что-то, или это...

0
голоса
2
ответов
15
просмотров
Стоит ли игнорировать предупреждение "-Wmissing-braces" от gcc/clang?

Описание проблемы:

Рассмотрим следующую программу:

#include 

int main()
{
  std::array x = { 0 }; // предупреждение!
  x = { { 0 } }; // без предупреждения
  return 0;
}

Первичная инициализация приводит к предупреждениям в gcc 4.7.2:

main.cpp:5:22: warning: unused variable...
0
голоса
0
ответов
14
просмотров
Когда можно опустить внешние фигурные скобки в списке инициализации?

Я получаю ошибку C2078 в VC2010 при компиляции следующего кода:

struct A { int foo; double bar; };

std::array<A, 2> a1 = // ошибка C2078: слишком много инициализаторов { {0, 0.1}, {2, 3.4} };

// OK std::array<double, 2> a2 = {0.1, 2.3};

Я обнаружил, что...

0
голоса
3
ответов
20
просмотров
Почему объект, возвращаемый по значению, имеет тот же адрес, что и объект внутри метода?

Проблема: Почему адреса переменных a и b совпадают?

Я столкнулся с интересным поведением в моем коде на C++, где две переменные a и b, каждая из которых объявлена в разных контекстах (функции foo и main), имеют одинаковый адрес в памяти. Вот код, который я...

0
голоса
1
ответов
17
просмотров
Оценивается ли условие в цикле `for` диапазона C++11 на каждой итерации?

Проблема с вызовом метода в цикле

В коде у меня есть следующий фрагмент:

for(auto& entity : memoryManager.getItems()) 
    entity->update(mFrameTime);

У меня возник вопрос: если memoryManager содержит 1000 элементов, будет ли memoryManager.getItems() вызываться 1000 раз (при...

0
голоса
5
ответов
17
просмотров
Использование `destructor = delete;` в C++

Рассмотрим следующий класс:

struct S { ~S() = delete; };

Кратко, суть вопроса состоит в том, что я не могу создавать экземпляры S, например, используя S s{};, потому что не могу их уничтожить. Как упоминалось в комментариях, я все же могу создать экземпляр, вызвав S *s = new S;,...

0
голоса
2
ответов
19
просмотров
Возможно ли использовать std::move для локальных стековых переменных?

Описание проблемы:

У меня возникла проблема с пониманием работы перемещения объектов в C++. Рассмотрим следующий код:

struct MyStruct
{
    int iInteger;
    string strString;
};

void MyFunc(vector& vecStructs)
{
    MyStruct NewStruct = { 8, "Hello" };
   ...
0
голоса
2
ответов
24
просмотров
Как создать конструктор, позволяющий использовать braced-init-list?

У меня есть класс Phenotype со следующим конструктором:

Phenotype(uint8 init[NUM_ITEMS]);

Я могу создать объект Phenotype следующим образом:

uint8 data[] = {0, 0, 0, 0, 0};
Phenotype p(data);

Однако, когда я пытаюсь создать объект так:

Phenotype p = {0, 0, 0,...
0
голоса
2
ответов
17
просмотров
Создание shared_ptr из unique_ptr

В одном из недавно рассмотренных мною фрагментов кода, который компилировался без ошибок с помощью g++-4.6, я столкнулся с странной попыткой создать std::shared_ptr из std::unique_ptr:

std::unique_ptr foo...
std::make_shared(std::move(foo));

Это кажется мне довольно странным. По...

0
голоса
1
ответов
21
просмотров
Почему `std::initializer_list` не поддерживает оператор подиндексации?

Вопрос:

Я пишу функцию, которая принимает параметр типа std::initializer_list, названный list, и мне необходимо произвести произвольный доступ к элементам этого списка. Было бы удобно использовать list[i] вместо list.begin()[i]. Однако, почему в std::initializer_list не реализован...

0
голоса
3
ответов
18
просмотров
Можно ли вручную определить преобразование для класса enum?

Описание проблемы:

Я хочу определить каст для enum class, чтобы можно было использовать его в условиях, аналогично тому, как это делается для классов, через явное преобразование типов. Например, у меня есть следующий класс:

class Test {
public:
  explicit operator bool() { return...
5
голоса
5
ответов
30
просмотров
Основные цели std::forward и решаемые им проблемы

Описание проблемы:

Я изучаю концепцию идеальной передачи (perfect forwarding) в C++ и столкнулся с вопросом о том, как работает функция std::forward. В приведенном ниже коде std::forward используется для преобразования именованных rvalue-ссылок t1 и t2 в безымянные...

6
голоса
5
ответов
53
просмотров
Возможно ли вывести тип переменной в стандартном C++?

Описание проблемы:

Я пытаюсь вывести тип переменной в C++, но, вместо ожидаемого результата, не могу добиться нужного вывода. Например, у меня есть следующий код:

int a = 12;
cout << typeof(a) << endl;

Я ожидаю, что результат будет:

int

Однако компилятор выдает ошибку,...