Size: a a a

2020 June 03

N

Neargye in pro.cxx
osm1um
Мне метод был нужен) Конечно круто, что я хоть как-то решил проблему, но подобный подход к проблемам ведёт к синдрому "enterprise деградации".
auto size() { return _size;}
?
источник

ПК

Побитый Кирпич... in pro.cxx
osm1um
Почитай описание проблемы.
Там нет описания, только самоуничижение
источник

o

osm1um in pro.cxx
Цель: сделать внутри класса метод для одержания размера массива, без лишнего call'а в конечном стабе.
источник

ПК

Побитый Кирпич... in pro.cxx
osm1um
Цель: сделать внутри класса метод для одержания размера массива, без лишнего call'а в конечном стабе.
И в чем проблема сделать метод?
источник

o

osm1um in pro.cxx
Мне нужно чтобы компилятор результат функции воспринимал как константу.
источник

AT

Andrew Titov in pro.cxx
А почему constexpr не сработал?
источник

o

osm1um in pro.cxx
Побитый Кирпич
И в чем проблема сделать метод?
Это можно решить лучше. Лишний вызов - лишний call
источник

ПК

Побитый Кирпич... in pro.cxx
osm1um
Мне нужно чтобы компилятор результат функции воспринимал как константу.
constexpr size_t sz = array<..., 10>::size();

Не работает?
источник

o

osm1um in pro.cxx
Andrew Titov
А почему constexpr не сработал?
Вот чёрт знает 😞. Пытаюсь понять.
источник

AT

Andrew Titov in pro.cxx
Нужен пример кода.
источник

o

osm1um in pro.cxx
Andrew Titov
Нужен пример кода.
Сейчас.
источник

o

osm1um in pro.cxx
#include <cstdio>

template <class _type, size_t _size>
class array
{
public:

using element_type = _type;

constexpr size_t size() const {
 return _size;
}

private:

_type _storage[_size];

};

int main() {
   array<char, 8> arr;
   printf("%zu\n", arr.size());
   return 0;
}
источник

ПК

Побитый Кирпич... in pro.cxx
osm1um
#include <cstdio>

template <class _type, size_t _size>
class array
{
public:

using element_type = _type;

constexpr size_t size() const {
 return _size;
}

private:

_type _storage[_size];

};

int main() {
   array<char, 8> arr;
   printf("%zu\n", arr.size());
   return 0;
}
static метод сделай
источник

o

osm1um in pro.cxx
Делал уже. Чем тут вообще должен помочь static?
источник

ПК

Побитый Кирпич... in pro.cxx
osm1um
#include <cstdio>

template <class _type, size_t _size>
class array
{
public:

using element_type = _type;

constexpr size_t size() const {
 return _size;
}

private:

_type _storage[_size];

};

int main() {
   array<char, 8> arr;
   printf("%zu\n", arr.size());
   return 0;
}
Какой ты тут ожидаешь результат? Какой получаешь?
источник

o

osm1um in pro.cxx
1mov %rax,-0x8(%rbp)
xor %eax,%eax
callq 1194 <_ZN3osl5arrayIcLm8EE4sizeEv>
mov %rax,%rsi
lea 0xe95(%rip), %rdi
mov $0x0, %eax
callq 1030 <printf@plt>
источник

ПК

Побитый Кирпич... in pro.cxx
osm1um
1mov %rax,-0x8(%rbp)
xor %eax,%eax
callq 1194 <_ZN3osl5arrayIcLm8EE4sizeEv>
mov %rax,%rsi
lea 0xe95(%rip), %rdi
mov $0x0, %eax
callq 1030 <printf@plt>
-О2
источник

o

osm1um in pro.cxx
Сори, сейчас форматну.
источник

ПК

Побитый Кирпич... in pro.cxx
osm1um
1mov %rax,-0x8(%rbp)
xor %eax,%eax
callq 1194 <_ZN3osl5arrayIcLm8EE4sizeEv>
mov %rax,%rsi
lea 0xe95(%rip), %rdi
mov $0x0, %eax
callq 1030 <printf@plt>
Чтобы constexpr функция гарантированно высислилась в compile time, ты должен её вызвать в constexpr контексте
источник

AT

Andrew Titov in pro.cxx
-O1 тоже работает.
источник