VS
Size: a a a
VS
VS
CD
CD
AD
A *p{nullptr};
*p; // 1
std::cout << (*p, 5); // 2
A a{*p}; // 3
p->non_static_mem_fn(); // 4
p->static_mem_fn(); // 5
nullptr
смысла не больше, чем в подсчете ангелов на кончике острия.NP
struct I { virtual void foo() { /* nothing */ } };
struct A : I { void foo() final { /* impl */ } };
struct B : I { /* no foo */ };
struct A { void foo() { /* impl */ } };
struct B { /* no foo */ };
A
от B
, проверив статически наличие void foo()
, но есть нюанс - нет аналога final
/override
. То есть, если я ошибусь в сигнатуре функции или опечатаюсь в названии, компилятор меня не поправит. Есть способ решить эту проблему? Я думал в сторону каких-нибудь варнингов, которые будут реагировать на неиспользуемый метод. Компилятор - gcc.CD
nullptr
смысла не больше, чем в подсчете ангелов на кончике острия.АК
AD
char a[10];
char *b = &a[10];
VS
nullptr
смысла не больше, чем в подсчете ангелов на кончике острия.ПК
struct I { virtual void foo() { /* nothing */ } };
struct A : I { void foo() final { /* impl */ } };
struct B : I { /* no foo */ };
struct A { void foo() { /* impl */ } };
struct B { /* no foo */ };
A
от B
, проверив статически наличие void foo()
, но есть нюанс - нет аналога final
/override
. То есть, если я ошибусь в сигнатуре функции или опечатаюсь в названии, компилятор меня не поправит. Есть способ решить эту проблему? Я думал в сторону каких-нибудь варнингов, которые будут реагировать на неиспользуемый метод. Компилятор - gcc.ПК
NP
ПК
CD
char a[10];
char *b = &a[10];
NP
АК
template <class T> concept HasFoo = requires (T& t) { t.foo(); }
foo()
. Иначе - нет операции. Если я опечатаюсь в сигнатуре или названии, класс не сможет это определить и просто выкинет вызов "неправильной" fooПК
template <typename SomeConcept>
void foo(SomeConcept some) {
some.bar();
}
CD
struct I { virtual void foo() { /* nothing */ } };
struct A : I { void foo() final { /* impl */ } };
struct B : I { /* no foo */ };
struct A { void foo() { /* impl */ } };
struct B { /* no foo */ };
A
от B
, проверив статически наличие void foo()
, но есть нюанс - нет аналога final
/override
. То есть, если я ошибусь в сигнатуре функции или опечатаюсь в названии, компилятор меня не поправит. Есть способ решить эту проблему? Я думал в сторону каких-нибудь варнингов, которые будут реагировать на неиспользуемый метод. Компилятор - gcc.ПК
template <class T> concept HasFoo = requires (T& t) { t.foo(); }
foo()
. Иначе - нет операции. Если я опечатаюсь в сигнатуре или названии, класс не сможет это определить и просто выкинет вызов "неправильной" foo