Re[14]: memset(this, 0, sizeof(T));
От: smeeld  
Дата: 23.11.16 21:12
Оценка: :)
Здравствуйте, N. I., Вы писали:

NI>С такими кадрами, чувствую, следующие 4 года начнутся очень скоро


Каков Ваш там выше пример, таков и ответ. Конструкции T::x и T::*x в С++ имеют особое значение и нечего за них цепляться. Значение &T::x вообще равно смещению поля в пределах объекта в байтах, а не значению виртуального адреса поля объекта.

Если же прогнать такой код
include <cstring>
#include <iostream>
struct S
{
    int i, j;
    int *p;
};
#define PRINT_VALUE(expr) std::cout << #expr ": " << (expr) << std::endl;

int main()
{


   S  s = S();
    std::cout << std::boolalpha;
    PRINT_VALUE(s.p == 0);
    PRINT_VALUE(s.p == &s.i);
    PRINT_VALUE(s.p == &s.j);

    std::memset(&s, 0, sizeof(s));
    std::cout << "bytewise zeroing" << std::endl;
    PRINT_VALUE(s.p == 0);
    PRINT_VALUE(s.p == &s.i);
    PRINT_VALUE(s.p == &s.j);
}


То выхлоп будет таким

value-initialization
s.p == 0: true
s.p == &s.i: false
s.p == &s.j: false
bytewise zeroing
s.p == 0: true
s.p == &s.i: false
s.p == &s.j: false


Что доказывает, что memset даёт те же зачения полям, что и другие способы обнуления.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.