Size: a a a

2021 February 24

NM

Nastya Medveda in supapro.cxx
Stas Koynov
просто матрешка вот и все.
обращение внутрь может быть как через :: так через '.' или черех '->' - и это очень запутывает
источник

SK

Stas Koynov in supapro.cxx
:: это как раз пространство имен!
тогда как obj.member это уже обращение к непосредственно к памяти. -> тоже к памяти но через указатель
источник

LA

Liber Azerate in supapro.cxx
Nastya Medveda
обращение внутрь может быть как через :: так через '.' или черех '->' - и это очень запутывает
К using объявлению только через ::
источник

LA

Liber Azerate in supapro.cxx
Stas Koynov
:: это как раз пространство имен!
тогда как obj.member это уже обращение к непосредственно к памяти. -> тоже к памяти но через указатель
И obj.member можно и к статическому члену
источник

d

dmbldr in supapro.cxx
Добрый день. При запуске fill_set() программа падает с interrupted by signal 11: SIGSEGV. Не могу понять, откуда здесь ошибка сегментации, с памятью напрямую не работаю. Может быть связано с тем, что all_subgraphs при каждом рекурсивном входе в impl_fill() как будто бы зачищается (все элементы исчезают, на месте нулевого лежит граф инициализированный по умолчанию). Помогите пожалуйста.
class brute_force {
public:
   explicit brute_force(graph g) : _g(std::move(g)) {};
   void fill_set();

private:
   graph _g;
   std::unordered_set<graph, graph_hash> all_subgraphs;

   void impl_fill(graph const& g);
};
void brute_force::impl_fill(graph const& g) {
   if(all_subgraphs.find(g) == all_subgraphs.end()) {
       if(g.is_reachable(_s, _d)) {
           all_subgraphs.insert(g);
           for(size_t i = 0; i < g.num_edges(); ++i) {
               graph tmp = g.erase_edge(i);
               impl_fill(tmp);
           }
       }
   }
}

void brute_force::fill_set() {
   impl_fill(_g);
}

Класс граф:
class graph {
public:
   using byte = unsigned char;
   using edge_type = std::vector<std::pair<byte, byte>>;

   graph() = default;
   graph(graph const& other) = default;
   graph(edge_type edges, byte n) : edges(std::move(edges)), n(n) {};

   bool is_reachable(byte s, byte d) const;
   graph erase_edge(size_t const& i) const;

   friend bool operator==(graph const& lhs, graph const& rhs);

   size_t num_edges() const;
private:
   edge_type edges; //список ребёр
   byte n = 0; //число вершин
};

graph graph::erase_edge(size_t const& i) const {
   graph res(*this);
   res.edges.erase(edges.begin()+i);
   return res;
}
size_t graph::num_edges() const {
   return edges.size();
}
источник

NM

Nastya Medveda in supapro.cxx
Stas Koynov
:: это как раз пространство имен!
тогда как obj.member это уже обращение к непосредственно к памяти. -> тоже к памяти но через указатель
спасибо. А почему если создаю обычную переменную:
struct {
int myvalue = 123;
};
то обращаюсь я к этому через указатель хотя переменная не указатель?
this->myvalue
?
источник

SK

Stas Koynov in supapro.cxx
Liber Azerate
И obj.member можно и к статическому члену
а статический он что в вакууме где-то?
источник

LA

Liber Azerate in supapro.cxx
Nastya Medveda
спасибо. А почему если создаю обычную переменную:
struct {
int myvalue = 123;
};
то обращаюсь я к этому через указатель хотя переменная не указатель?
this->myvalue
?
У тебя здесь синтаксическая ошибка
источник

LA

Liber Azerate in supapro.cxx
Stas Koynov
а статический он что в вакууме где-то?
Что?
источник

NM

Nastya Medveda in supapro.cxx
Liber Azerate
У тебя здесь синтаксическая ошибка
спасибо исправила
источник

D

Danya in supapro.cxx
Stas Koynov
:: это как раз пространство имен!
тогда как obj.member это уже обращение к непосредственно к памяти. -> тоже к памяти но через указатель
Неправда, неправда
источник

LA

Liber Azerate in supapro.cxx
Nastya Medveda
спасибо. А почему если создаю обычную переменную:
struct {
int myvalue = 123;
};
то обращаюсь я к этому через указатель хотя переменная не указатель?
this->myvalue
?
Обращаешься ты к этому в зависимости от контекста. Внутри класса по имени, если у тебя есть объект данного класса, но не указатель, через ., если указатель, то ->
источник

SK

Stas Koynov in supapro.cxx
Nastya Medveda
спасибо. А почему если создаю обычную переменную:
struct {
int myvalue = 123;
};
то обращаюсь я к этому через указатель хотя переменная не указатель?
this->myvalue
?
this это константный указатель на обьект. this не явный параметр в методе. ты когда пишешь:
obj->foo(arg)
компилятор делает так
foo(obj, arg)
внутри метода this это и есть не явный параметр
источник

LA

Liber Azerate in supapro.cxx
Stas Koynov
this это константный указатель на обьект. this не явный параметр в методе. ты когда пишешь:
obj->foo(arg)
компилятор делает так
foo(obj, arg)
внутри метода this это и есть не явный параметр
С чего константный?
источник

ID

In Dev in supapro.cxx
Liber Azerate
С чего константный?
Вот тоже интересно стало
источник

SK

Stas Koynov in supapro.cxx
Liber Azerate
С чего константный?
тоесть вы можете его поменять?
источник

D

Danya in supapro.cxx
Stas Koynov
:: это как раз пространство имен!
тогда как obj.member это уже обращение к непосредственно к памяти. -> тоже к памяти но через указатель
struct Struct {
 struct Inner {
 }
};

Как создать объект Inner?
источник

LA

Liber Azerate in supapro.cxx
Stas Koynov
тоесть вы можете его поменять?
Да, если метод не константный
источник

ПК

Побитый Кирпич... in supapro.cxx
Liber Azerate
Да, если метод не константный
this это T* const this - константный указатель
источник

D

Danya in supapro.cxx
Liber Azerate
Да, если метод не константный
Наверное имелось в виду Class* const, а не const Class*
источник