for (int i = 0; i<2; i++){ group.PutCar(i,Car(marks[i],powers[i],costs[i],displaces[i])); }
group[2].Print();
void Group::Print(){
for (int i = 0; i<sizeof(array); i++){
array[i].Print();
}
};
operator double (){
int summ = 0;
for(int i = 0; i < sizeof(array); i++){
summ += array[i].getCost();
}
Если в официальной доке с++ где-то написано "переопределение возможно тогда и только тогда, когда есть virtual у метода базового класса"
то почему именно так?
error C2835: user-defined conversion 'operator`double'' takes no formal parameters
operator double (int limit)
невозможна. Вторая ошибка -- это следствие первой.Определим в объекте Group две функции с одинаковым именем, например double Age(); и double Age(int limit);.
void EcsSystems::Add(IEcsSystem* system) { _systems.push_back(system); if (IRunSystem* runSystem = static_cast<IRunSystem*>(system)) { _runSystems.push_back(runSystem); } }
Помогите, пожалуйста
MultiplyMatrices
переписать как три обычных вложенных цикла, всё работает нормально. float* vMultiplyMatrices(const float* matrix_1, const float* matrix_2)
{
__m128 vector_2;//переменная для хранения значения второй матрицы
__m128 result_vector;//переменная для записи итоговой марицы
auto* result_matrix = (float*)_mm_malloc(N * N * sizeof(float), 16);//выделение памяти с выравниванием
(2) //memset(result_matrix, 0, N * N * sizeof(float));
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
__m128 element_vector = _mm_set1_ps(matrix_1[i * N + j]);//4 позиции в одно значение
for (int k = 0; k < N; k += 4) {
vector_2 = _mm_load_ps(&matrix_2[j * N + k]);//4 значение по адресу
(1) result_vector = _mm_load_ps(&result_matrix[i * N + k]);
result_vector = _mm_add_ps(result_vector, _mm_mul_ps(element_vector, vector_2));
_mm_store_ps(&result_matrix[i * N + k], result_vector);
}
}
}
return result_matrix;
}
result_vector
неинициализированные значения из result_matrix
и дальше используешь их в арифметике. Если раскомментировать memset
(2), то выполнение доходит до конца без nan.Почему при использовании переменной в методе, выдает ошибку
class Test { static std::string question;
std::string Test::question;
Что будет?
obj->execute()
, т.е. виртуальный вызов конечного переопределения для функции obj1::execute
в объекте класса obj3. См. eelis.net/c++draft/expr.call#3Я не понимаю как это будет работать с классами наследниками и виртуальной функцией.
Почему в 93 строке (bptr = (schoolboy*)&a1;) пишет progress=<Ошибка при чтении символов строки>
cout << *bptr;
, а происходит это потому что bptr указывает на объект, конечный тип которого -- class student
. У такого объекта в его представлении в памяти нет никакого поля progress
, поэтому код который пытается его вывести ведёт себя таким образом. Вообще это пример неопределённого поведения.как это исправить?
C++
Нужно в двумерный массив char записать эти строки
std::string
, массив -- это std::vector
, используй std::getline
и например std::vector::push_back
.for (size_t i = iters.size(); i < listsize; i++) { iters.push_back(new iterator(typesize)); }
for (size_t i = iters.size(); i > listsize; i--) {
delete *iters.back();
iters.pop_back();
}
iterator::~iterator() { for (stream::stream* s : usedbystreams) { s->killstream(0); } free(pointer); usedbystreams.clear(); }
s->killstream(0)
, привело ли это к удалению объекта на который указывает s?-fsanitize=address
который покажет тебе при завершении программы, где была выделена утекшая память. webderiverxx все файлы .h, видимо реализация написана на .h файлах
есть лок в виде проверки препроцессора, почему неколько реализаций возникает, не совсем понятно
В чем между ними разница и где какой предпочтительно использовать
std::for_each
-- это алгоритм из стандартной библиотеки C++, а tbb::parallel_for
-- это часть intel Threading Building Blocks. Если проект не использует TBB, то выбор очевиден. Если использует, то у tbb::parallel_for
несколько больше возможностей по управлению разбиением интервала на части и выполнением рабочих потоков.