Вопросы
Функция, принимающая как lvalue, так и rvalue аргументы
Есть ли способ написать функцию на C++, которая принимает как lvalue, так и rvalue аргументы, не используя шаблоны?
Например, предположим, что я пишу функцию print_stream
, которая считывает данные из istream
и выводит их на экран или что-то в этом роде.
Я считаю вполне разумным вызывать...
Эквивалент unique_ptr в Boost?
Проблема: Есть ли эквивалент класса std::unique_ptr из C++11 в библиотеке Boost?
Я ищу поведение, позволяющее создать безопасную для исключений фабричную функцию, вот так:
std::unique_ptr create_base()
{
return std::unique_ptr(new Derived);
}
void some_other_function()
{
...
Избежание неявного преобразования в конструкторе: ключевое слово 'explicit' здесь не помогает
Задача заключается в том, чтобы запретить создание объекта класса A
при передаче параметра типа double
, даже если конструктор помечен как explicit
. Я хочу, чтобы объекты класса A
могли создаваться только при передаче целочисленного параметра, например, A a1 = A(10);
.
Вот мой...
Использование futures в C++11: Вложенные вызовы std::async приводят к сбоям - ошибка компилятора или стандартной библиотеки?
Описание проблемы
После того как я столкнулся с падениями программы при использовании вложенных вызовов std::async
, я смог воспроизвести проблему в следующем минимальном примере. Ошибки происходят часто, но не всегда. Видите ли вы что-то, что может быть причиной проблемы, или это ошибка...
Инициализатор члена не указывает на нестатический член данных или базовый класс
Проблема с инициализацией защищенных членов родительского класса в C++
Я столкнулся с проблемой, когда пытаюсь инициализировать защищенный член родительского класса в списке инициализации конструктора производного класса, и не могу найти решение через Google.
Привожу следующий код для...
Почему доступ по диапазону для std::pair был удалён в C++11?
Я только что обнаружил, что в одном из черновиков C++11 были перегрузки stdbegin и stdend для std::pair, которые позволяли рассматривать пару итераторов как диапазон, подходящий для использования в цикле на основе диапазонов (N3126, раздел 20.3.5.5), но это было удалено.
Кто-нибудь знает,...
Почему необходимо помечать функции как constexpr?
Проблема с использованием constexpr
в C++
C++11 позволяет использовать функции, объявленные с спецификатором constexpr
, в константных выражениях, таких как аргументы шаблонов. Однако, есть строгие требования к тому, что может быть constexpr
, по сути, такая функция может инкапсулировать...
Использование std::make_unique с пользовательским делетором
Я пытаюсь использовать std::unique_ptr
с пользовательским делитером и хотел бы воспользоваться std::make_unique
, а не сырым оператором new. Я работаю с VC++2013. Мне кажется, что нет способа использовать std::unique_ptr
, если есть кастомный делитер. Не пропустил ли я что-то, или это...
Стоит ли игнорировать предупреждение "-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...
Когда можно опустить внешние фигурные скобки в списке инициализации?
Я получаю ошибку 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};
Я обнаружил, что...
Почему объект, возвращаемый по значению, имеет тот же адрес, что и объект внутри метода?
Проблема: Почему адреса переменных a
и b
совпадают?
Я столкнулся с интересным поведением в моем коде на C++, где две переменные a
и b
, каждая из которых объявлена в разных контекстах (функции foo
и main
), имеют одинаковый адрес в памяти. Вот код, который я...
Оценивается ли условие в цикле `for` диапазона C++11 на каждой итерации?
Проблема с вызовом метода в цикле
В коде у меня есть следующий фрагмент:
for(auto& entity : memoryManager.getItems())
entity->update(mFrameTime);
У меня возник вопрос: если memoryManager
содержит 1000 элементов, будет ли memoryManager.getItems()
вызываться 1000 раз (при...
Использование `destructor = delete;` в C++
Рассмотрим следующий класс:
struct S { ~S() = delete; };
Кратко, суть вопроса состоит в том, что я не могу создавать экземпляры S
, например, используя S s{};
, потому что не могу их уничтожить. Как упоминалось в комментариях, я все же могу создать экземпляр, вызвав S *s = new S;
,...
Возможно ли использовать std::move для локальных стековых переменных?
Описание проблемы:
У меня возникла проблема с пониманием работы перемещения объектов в C++. Рассмотрим следующий код:
struct MyStruct
{
int iInteger;
string strString;
};
void MyFunc(vector& vecStructs)
{
MyStruct NewStruct = { 8, "Hello" };
...
Как создать конструктор, позволяющий использовать 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,...
Создание shared_ptr из unique_ptr
В одном из недавно рассмотренных мною фрагментов кода, который компилировался без ошибок с помощью g++-4.6
, я столкнулся с странной попыткой создать std::shared_ptr
из std::unique_ptr
:
std::unique_ptr foo...
std::make_shared(std::move(foo));
Это кажется мне довольно странным. По...
Почему `std::initializer_list` не поддерживает оператор подиндексации?
Вопрос:
Я пишу функцию, которая принимает параметр типа std::initializer_list
, названный list
, и мне необходимо произвести произвольный доступ к элементам этого списка. Было бы удобно использовать list[i]
вместо list.begin()[i]
. Однако, почему в std::initializer_list
не реализован...
Можно ли вручную определить преобразование для класса enum?
Описание проблемы:
Я хочу определить каст для enum class
, чтобы можно было использовать его в условиях, аналогично тому, как это делается для классов, через явное преобразование типов. Например, у меня есть следующий класс:
class Test {
public:
explicit operator bool() { return...
Основные цели std::forward и решаемые им проблемы
Описание проблемы:
Я изучаю концепцию идеальной передачи (perfect forwarding) в C++ и столкнулся с вопросом о том, как работает функция std::forward
. В приведенном ниже коде std::forward
используется для преобразования именованных rvalue-ссылок t1
и t2
в безымянные...
Возможно ли вывести тип переменной в стандартном C++?
Описание проблемы:
Я пытаюсь вывести тип переменной в C++, но, вместо ожидаемого результата, не могу добиться нужного вывода. Например, у меня есть следующий код:
int a = 12;
cout << typeof(a) << endl;
Я ожидаю, что результат будет:
int
Однако компилятор выдает ошибку,...