vector<Time> обращаться через указатель на vector<double>. Компилятор в праве посчитать, что вы к вектору v вообще не обращаетесь нигде и оптимизировать его нафиг из программы и памяти.memcpy(&t[0], &v[0], sizeof(double)*v.size());template <typename T>
std::vector<T>Interpolate(vector<T> data) {
// ...
}struct Time {
Time() : x(0) {}
Time(double a) : x(a) {}
double x;
};
std::vector<Time> v = {1,2,3};vector<double> в vector<Time>:std::copy(a.begin(), a.end(), std::back_inserter(v));operator double() у вашего Time. И оттуда уже можно будет копировать в дабловый вектор. И работать это будет даже если класс Time содержит еще чего-то кроме double. std::cin, или использовать using namespace std;. Но вот эта вторая конструкция у вас написана в файле main.cpp, только в нем и действует. Она не распространяется на исходник функции fu1, которая находится вообще в другом файле.#include <iostream>
#include <cstring>
int main() {
int x = -2;
unsigned int y = 0;
memcpy(&y, &x, sizeof(y));
std::cout << y;
return 0;
}std::cout << *(unsigned int*)(&x), но не стоит.int[5] и int[3][2]. Это на уровне C. Под капотом там указатели: компилятор знает адрес начала массива. Путаницу может вызвать то, что массивы в языке C тождественны указателям на начало с той лишь разницей, что компилятор знает его длину и всякие sizeof() сработают правильно.int*, а arrTwo к int (*)[2] (указатель на массив из 2 элементов, что в свою очередь неявно приводиться к указателю на указатель на инт).int a[3][2];
int (*b)[2];
b = a;int x = *arrOne;
int y = **arrTwo; // с одной * не сработает ибо int[2], оно же int* к int не приводиться.
int *z = arrOne+2; // указатель на 3-ий элемент
int *w = arrTwo + 1; // указатель на вторую строку (первый элемент в ней).const &. typename std::add_lvalue_reference<T>::type operator*() constvoid foo(const std::unique_ptr<const int>& ptr) {
if (ptr) {
*ptr += 5; // Ошибка компиляции.
std::cout << *ptr;
}
}
int main() {
std::unique_ptr<const int> ptr = std::make_unique<const int>(5);
foo(ptr);
}void foo(const std::unique_ptr<const int> ptr) {
}
int main() {
std::unique_ptr<int> ptr = std::make_unique<int>(5);
foo(std::move(ptr));
} static_array(std::initializer_list<type> il)
requires std::is_copy_constructible_v<type> :
arr(std::forward(il)) {}static_array(T&& init), где этот init и передавать в конструктор arr.BuildableProperty<...,...,const Cursor&> согласно определению CursorProperty.Cursor != Cursor&, это разные типы.SetProperty(..., typename std::remove_reference<TInput>::type value)std:: уже можно убрать через using namespace std например). И то, только в случае, когда вам нужен именно вот такой вот указатель. А если вам нужен unique_ptr, а если вам нужен ваш собственный умный указатель, который как-то по другому память выделяет? А если вам надо не make_shared вызывать, а какой-то фабричный метод? Плюс это добавит кучу вопросов вроде, а как будет указатель на указатель? Указатель обычно идет после типа вроде int*, почему shared вы ставите перед ним?using Base::operator=;