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

C ++ - это язык программирования общего назначения. Первоначально он был разработан как расширение C и имеет аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде (который будет скомпилирован с помощью компилятора C ++). Используйте тег, зависящий от версии, для вопросов, связанных с конкретной редакцией стандарта [C ++ 11], [C ++ 14], [C ++ 17] или [C ++ 20] и т. Д.

5
Как вернуть правильный тип данных в шаблоны?
#include <iostream> using namespace std; template <class X, class Y> Y big(X a, Y b) { if (a > b) return (a); else return (b); } int main() { cout << big(32.8, 9); } Здесь я использую шаблоны в CPP, поэтому, когда я вызываю функцию, bigобходя аргументы типа doubleи int, …

2
Вариация на тему типа прокалывания: на месте тривиальная конструкция
Я знаю, что это довольно распространенная тема, но насколько легко найти типичный UB, я не нашел этот вариант до сих пор. Итак, я пытаюсь официально представить объекты Pixel, избегая при этом фактической копии данных. Это действительно? struct Pixel { uint8_t red; uint8_t green; uint8_t blue; uint8_t alpha; }; static_assert(std::is_trivial_v<Pixel>); Pixel* …

1
Является ли new (this) ThisClass () плохой идеей?
class FooView final : public Something { ... void refresh() { this->~FooView(); new (this) FooView(); } } Я никогда не видел эту идиому, и кажется, что она может быть очень тонкой и грязной, но я не могу думать о проблеме с ней (пока FooViewона окончательна). Это плохая идея?

4
Скрыть пустой базовый класс для агрегатной инициализации
Рассмотрим следующий код: struct A { // No data members //... }; template<typename T, size_t N> struct B : A { T data[N]; } Вот как вы должны инициализировать B: B<int, 3> b = { {}, {1, 2, 3} }; я хочу избежать ненужного пустого {} для базового класса. Существует …

1
Сравнение std :: string и строковых литералов в стиле C
Предположим, у меня есть следующий код: #include <iostream> #include <string> #include <iomanip> using namespace std; // or std:: int main() { string s1{ "Apple" }; cout << boolalpha; cout << (s1 == "Apple") << endl; //true } Мой вопрос: как система проверяет эти два? s1является объектом, а "Apple"является строковым литералом …

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 …

1
Разрешено ли добавлять ноль к нулевому указателю?
Я знаю, что арифметика указателей запрещена для нулевых указателей. Но представьте, у меня есть что-то вроде этого: class MyArray { int *arrayBegin; // pointer to the first array item, NULL for an empty array unsigned arraySize; // size of the array, zero for an empty array public: int *begin() const …

1
Пытаясь понять шаблоны и поиск имени
Я пытаюсь понять следующие фрагменты кода Фрагмент №1 template <typename T> struct A { static constexpr int VB = T::VD; }; struct B : A<B> { }; Ни gcc9, ни clang9 не выдают здесь ошибку. В. Почему этот код компилируется? Разве мы не являемся экземплярами A<B>при наследовании от B? В …

1
Правильный способ вернуть указатель на `новый` объект из функции Rcpp
Рассмотрим 1) пользовательский класс с потенциально большим объемом памяти и 2) функцию верхнего уровня, которая выполняет некоторую предварительную обработку, а затем создает и возвращает новый объект нашего пользовательского класса. Чтобы избежать ненужного копирования по значению, функция выделяет объект и вместо него возвращает указатель. Исходя из предыдущего обсуждения , кажется, что …
9 c++  r  rcpp 

1
Что такое эквивалент MSVC для -fno-char8_t?
В C ++ 20 u8строковых литералов основаны на char8_tтипе. Они сознательно больше не переходят в char const*: const char* str = u8"Hall\u00f6chen \u2603"; // no longer valid in C++20 Конечно, конечная цель при переходе на C ++ 20 - полностью перейти на новое поведение (в приведенном выше примере: изменить тип …

1
Как предотвратить изменение массива данных?
Скажем, у меня есть класс, который выглядит следующим образом (это только пример): class A { double *ptr; public: A() : ptr( new double[100] ) {} A( const A &other ) { other.ptr[7] = 15; } void doNotChangeMyData() const { ptr[43] = 14; } void changeMyData() { ptr[43] = 14; } …
9 c++  const 

1
Как std :: lock_guard может быть быстрее, чем std :: mutex :: lock ()?
Я спорил с коллегой о lock_guard, и он предположил, что lock_guard, вероятно, медленнее, чем mutex :: lock () / mutex :: unlock () из-за стоимости создания и удаления класса lock_guard. Затем я создал этот простой тест, и, что удивительно, версия с lock_guard почти в два раза быстрее, чем версия с …
9 c++  mutex 

2
Могу ли я использовать собственный распределитель для std :: array для безопасных криптографических ключей?
Я знаю, std::arrayчто полностью распределен в стеке, но этот вопрос мотивирован проблемами безопасности, которые требуют двух вещей: Данные в std::arrayнуле или будут рандомизированы при уничтожении Данные в std::arrayбудут заблокированы , так что они никогда не попадут на диск ни в случае сбоя, ни в разделе подкачки Обычно std::vectorрешение заключается в …

4
От естественного языка к выражению C ++
Назначение: Переведите следующие выражения на естественном языке в выражения C ++. Предположим, что все переменные являются неотрицательными числами или логическими (со значением true или false). Естественный язык: Либо a, либо b оба имеют значение false, либо c соответствует true, но не оба. Мое решение: (a==0 && b==0)xor(c==1) Решение профессора: (!a …
9 c++  logic 

1
Что значит «сильно случается раньше»?
Фраза «сильно случается раньше» используется несколько раз в проекте стандарта C ++. Например: Завершение [basic.start.term] / 5 Если завершение инициализации объекта со статической продолжительностью хранения сильно происходит до вызова std :: atexit (см. [Support.start.term]), вызов функции передается в std :: atexit последовательность перед вызовом деструктора для объекта. Если вызов std …

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