Ich schreibe dies unter der Annahme, dass Sie ein Mitglied dynamisch zuweisen müssen, und Sie können nicht einfach übergeben Argumente, aus welchen Gründen auch immer (diese Klasse sollte neu gestaltet werden, aber es ist ein anderes Problem).
Um ein paar Aussagen als Teil einer Variablen in der Klassendefinition ausführen zu initialisieren, können Sie es in einem Lambda-wickeln, und sie rufen Sie sofort:
class Foo {
int i;
int * p = []() {
auto *ret = new int;
*ret = 5;
return ret;
}(); // <-- Invokes the lambda right away
};
Nur Initialisierung bei Namespace und Klassenbereich erlaubt ist . Andere Anweisungen müssen im Blockbereich erscheinen, den das Lambda bereitstellt.
Aber es ist chaotisch, schlecht beraten, und Sie sollten es nicht tun, es sei denn, Sie müssen wirklich. Eine Konstruktordefinition wäre besser.
Die Sache, die nicht funktioniert, ist keine gültige Syntax. –
Weil solche Ausdrücke innerhalb einer Funktion sein müssen. –
Einer ist die Initialisierung von 'p', ein anderer ist die Zuweisung zu' * p'. Nur die Initialisierung ist außerhalb des Blockumfangs erlaubt. – StoryTeller