Вопрос, почему первый вариант (sum(v1,v2,v3)) медленнее чем второй (direct_sum(v1,v2,v3)) примерно на 10%?
#include life_node.h
LifeNode::LifeNode():
Node<ros_johnny5::servoMsgArray, ros_johnny5::robotState>(SIZE_MESSAGE_BUFFER, TOPIC_SERVO_CONTROL, TOPIC_ROBOT_STATE),
mInMotion(1),
mGreetingFlag(0)
{
}
По сути своей два вопроса будут...Object getMeAnyObject(int i) { return listOfObject.at(i); }
Я хочу вернуть копию объекта из контейнера, а не ссылку. Верен ли мой код?
listOfObject << new Object();
написана какая-то ерунда.iterator_t
const_iterator_t
const_iterator_t cbegin()
const_iterator_t cend()
при каких условиях будет вызваны cbegin() и cend()
с какой целью они существуют в std::list и др. типах
Но у меня сразу возникает мысль. Если компоновка имени внешняя, то это значит, что это имя доступно в других единицах трансляции. Однако, как с функциями не работает:foo.cpp ---------- void foo() {} bar.cpp ---------- void foo(); void bar() { foo(); }
То есть я не могу написать так:A.cpp ---------- class A { }; B.cpp ---------- class A; void foo(A a) // A is an incomplete type { }
A.cpp
----------
class A
{
};
B.cpp
----------
class A;
void foo(A& a) // A is an incomplete type, but who cares
{
}
Вопрос: какой смысл тогда во внешней компоновке имени класса?
class ButtonControlled
{
public:
virtual void decide() = 0;
};
class Elevator : ButtonControlled
{
private:
Button* button;
virtual void decide();
};
class Button
{
private:
ButtonControlled* controlled;
public:
Button(ButtonControlled &controlled);
void push()
{
controlled->decide();
}
};
Elevator::Elevator()
{
button = new Button(*this);
}
int f(int p[][20][30])
{
int i = 1, j = 2, k = 3;
int v = p[i][j][k];
}
...
int p[10][20][30];
f(p);
int f(int *p, int n2, int n3) // p[][n2][n3]
{
int i = 1, j= 2, k = 3;
int v = p[(((i * n2) + j) * n3) + k]; // v = p[i][j][k];
}
...
int p[10][20][30];
f(&p[0][0][0], 20, 30);
int f(int n2, int n3, int p[][n2][n3])
{
int i = 1, j = 2, k = 3;
int v = p[i][j][k];
}
...
int p[10][20][30];
f(20, 30, p);
char *buf;
size_t buf_sz;
...
BOOL CALLBACK DuffRecording(HRECORD hangle, const void *buffer, DWORD lenght, void *user)
{
buf = realloc(buf, buf_sz + length);
memcpy(buf + buf_sz, buffer, lenght);
buf_sz += length;
return TRUE;
}
// эту функцию нужно вызывать когда есть новые данные,
// например, после каждого вызова DuffRecording
void chunk_handler(void)
{
size_t offset = 0;
while (buf_sz >= offset + CHUNK_SIZE) {
do_something_with_data(buf + offset);
offset += CHUNK_SIZE;
}
if (offset) {
memmove(buf, buf + offset, buf_sz - offset);
buf_sz -= offset;
}
}
// эта функция будет вызвана с p указывающим на буфер длиной CHUNK_SIZE
void do_something_with_data(void *p)
{
...
}
void SomeClass::someFunc(SYSTEMTIME * _minDate, SYSTEMTIME * _maxDate){
SYSTEMTIME minDate, maxDate;
std::vector<SYSTEMTIME> dates;
...
minDate = dates[0]; // тут все хорошо. Новые значения присвоены
maxDate = dates[1];
...
*_minDate = minDate;
*_maxDate = maxDate;
}
void SomeClass::someFunc(SYSTEMTIME * & _minDate, SYSTEMTIME * & _maxDate){
SYSTEMTIME minDate, maxDate;
std::vector<SYSTEMTIME> dates;
...
minDate = dates[0]; // тут все хорошо. Новые значения присвоены
maxDate = dates[1];
...
// что-то сделать с объектами, на которые указывают _minDate и _maxDate, например освободить
_minDate = new SYSTEMTIME(minDate); // _minDate присвоен указатель на новый объект.
_maxDate = new SYSTEMTIME(maxDate); // проветил, _minDate и _maxDate дейсвтиетльно какие нужно.
}
так как i - закрытый член базового класса, в производном классе его нет
ответа на свой вопрос я не нашел
Unless redefined in the derived class, members of a base class are also considered to be members of the derived class. The base class members are said to be inherited by the derived class.
Насколько я понял идею std::move, вызов в return move(t) должен осуществить перемещение данных класса t в t1 без вызова деструктора.
В реальной программе T содержит объект fstream, а в деструкторе осуществляется закрытие потока.