Технически, да: int a = value, b = a;
, или вы можете рассмотреть int a, b = a = value;
. Без повторяющихся идентификаторов, нет, по крайней мере, не в C; грамматика просто не предусматривает этого. Каждый ” декларатор =
инициализатор ” в грамматике может объявить только один объект на производство грамматики в C 2018 6.7.6 1 и явный оператор в 6.7.6 2: «Каждый декларатор объявляет один идентификатор…»
Как уже упоминалось в комментарии, это ужасный способ сделать это в C ++. Я не делаю никаких заявлений относительно правил C ++ относительно порядка инициализации в одном объявлении, вопросов о многопоточности и так далее. Это представлено только в качестве учебного упражнения. Никогда не используйте это в производственном коде.
template<class T> class Sticky
{
private:
static T LastInitializer; // To remember last explicit initializer.
T Value; // Actual value of this object.
public:
// Construct from explicit initializer.
Sticky<T>(T InitialValue) : Value(InitialValue)
{ LastInitializer = InitialValue; }
// Construct without initializer.
Sticky<T>() : Value(LastInitializer) {}
// Act as a T by returning const and non-const references to the value.
operator const T &() const { return this->Value; }
operator T &() { return this->Value; }
};
template<class T> T Sticky<T>::LastInitializer;
#include <iostream>
int main(void)
{
Sticky<int> a = 3, b, c = 15, d;
std::cout << "a = " << a << ".\n";
std::cout << "b = " << b << ".\n";
std::cout << "c = " << c << ".\n";
std::cout << "d = " << d << ".\n";
b = 4;
std::cout << "b = " << b << ".\n";
std::cout << "a = " << a << ".\n";
}
Вывод:
a = 3.
b = 3.
c = 15.
d = 15.
b = 4.
a = 3.