Bonjour,
Est-il possible d'allouer sur la pile des tableaux dont la taille est
connue à l'exécution ?
raison : gain de performances par rapport au tas.
Merci
Mais comme j'ai dit, de bons compilateurs C++ le supportent déjà, au moins en option.
Et comment se gèrent les problèmes que tu as soulevés dans ton autre message ? (<news:)
-- ;-)
Fabien LE LEZ wrote:
On 04 Dec 2004 14:33:49 +0100, James Kanze :
Mais comme j'ai dit, de bons compilateurs C++ le supportent déjà, au moins en option.
Et comment se gèrent les problèmes que tu as soulevés dans ton autre message ? (<news:)
Aucune idée. Je sais que g++ permet l'utilisation d'une dimension variable dans un tableau local. Je n'ai jamais essayé plus.
Pour commencer, j'interdirais l'héritage d'une classe qui contenait une VLA. Pour le new, c'est plus délicat -- je vois mal un type en C++ dont on ne peut pas faire un new.
-- James Kanze home: www.gabi-soft.fr Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
Fabien LE LEZ wrote:
On 04 Dec 2004 14:33:49 +0100, James Kanze <james.kanze@free.fr>:
Mais comme j'ai dit, de bons compilateurs C++ le
supportent déjà, au moins en option.
Et comment se gèrent les problèmes que tu as soulevés dans ton autre
message ?
(<news:m2fz2m18t0.fsf@lns-p19-19-idf-82-254-240-219.adsl.proxad.net>)
Aucune idée. Je sais que g++ permet l'utilisation d'une dimension
variable dans un tableau local. Je n'ai jamais essayé plus.
Pour commencer, j'interdirais l'héritage d'une classe qui contenait une
VLA. Pour le new, c'est plus délicat -- je vois mal un type en C++ dont
on ne peut pas faire un new.
--
James Kanze home: www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
Mais comme j'ai dit, de bons compilateurs C++ le supportent déjà, au moins en option.
Et comment se gèrent les problèmes que tu as soulevés dans ton autre message ? (<news:)
Aucune idée. Je sais que g++ permet l'utilisation d'une dimension variable dans un tableau local. Je n'ai jamais essayé plus.
Pour commencer, j'interdirais l'héritage d'une classe qui contenait une VLA. Pour le new, c'est plus délicat -- je vois mal un type en C++ dont on ne peut pas faire un new.
-- James Kanze home: www.gabi-soft.fr Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
drkm
"@(none)" <""kanze"@(none)"> writes:
Pour commencer, j'interdirais l'héritage d'une classe qui contenait une VLA.
Je n'arrive pas à trouver d'exemple précis de problème que cela pourrait poser. J'entrevois peut-être des problèmes avec l'héritage multiple, mais je ne connais pas assez le sujet pour trouver un exemple particulier.
Tu as des exemples précis en tête ?
--drkm
"@(none)" <""kanze"@(none)"> writes:
Pour commencer, j'interdirais l'héritage d'une classe qui contenait une
VLA.
Je n'arrive pas à trouver d'exemple précis de problème que cela
pourrait poser. J'entrevois peut-être des problèmes avec l'héritage
multiple, mais je ne connais pas assez le sujet pour trouver un
exemple particulier.
Pour commencer, j'interdirais l'héritage d'une classe qui contenait une VLA.
Je n'arrive pas à trouver d'exemple précis de problème que cela pourrait poser. J'entrevois peut-être des problèmes avec l'héritage multiple, mais je ne connais pas assez le sujet pour trouver un exemple particulier.
Tu as des exemples précis en tête ?
--drkm
Fabien LE LEZ
On Sun, 05 Dec 2004 01:32:46 +0100, drkm :
Pour commencer, j'interdirais l'héritage d'une classe qui contenait une VLA.
Je n'arrive pas à trouver d'exemple précis de problème que cela pourrait poser.
Il me semble que ceci suffirait à poser problème :
struct B { char tableau [*]; // Pas sûr de la syntaxe };
struct D : B { int i; };
int main() { D d; &(d.i); }
-- ;-)
On Sun, 05 Dec 2004 01:32:46 +0100, drkm <usenet.fclcxx@fgeorges.org>:
Pour commencer, j'interdirais l'héritage d'une classe qui contenait une
VLA.
Je n'arrive pas à trouver d'exemple précis de problème que cela
pourrait poser.
Il me semble que ceci suffirait à poser problème :
struct B
{
char tableau [*]; // Pas sûr de la syntaxe
};
Pour commencer, j'interdirais l'héritage d'une classe qui contenait une VLA.
Je n'arrive pas à trouver d'exemple précis de problème que cela pourrait poser.
Il me semble que ceci suffirait à poser problème :
struct B { char tableau [*]; // Pas sûr de la syntaxe };
struct D : B { int i; };
int main() { D d; &(d.i); }
Quelle est la différence avec :
struct B { char tableau [*]; // Pas sûr de la syntaxe int i; };
int main() { B b; &(b.i); }
? Qui par ailleurs est du C.
--drkm
Gabriel Dos Reis
drkm writes:
| "@(none)" <""kanze"@(none)"> writes: | | > Pour commencer, j'interdirais l'héritage d'une classe qui contenait une | > VLA. | | Je n'arrive pas à trouver d'exemple précis de problème que cela | pourrait poser. J'entrevois peut-être des problèmes avec l'héritage | multiple, mais je ne connais pas assez le sujet pour trouver un | exemple particulier. | | Tu as des exemples précis en tête ?
struct A { int a[]; };
struct B : A { };
-- Gaby
drkm <usenet.fclcxx@fgeorges.org> writes:
| "@(none)" <""kanze"@(none)"> writes:
|
| > Pour commencer, j'interdirais l'héritage d'une classe qui contenait une
| > VLA.
|
| Je n'arrive pas à trouver d'exemple précis de problème que cela
| pourrait poser. J'entrevois peut-être des problèmes avec l'héritage
| multiple, mais je ne connais pas assez le sujet pour trouver un
| exemple particulier.
|
| Tu as des exemples précis en tête ?
| "@(none)" <""kanze"@(none)"> writes: | | > Pour commencer, j'interdirais l'héritage d'une classe qui contenait une | > VLA. | | Je n'arrive pas à trouver d'exemple précis de problème que cela | pourrait poser. J'entrevois peut-être des problèmes avec l'héritage | multiple, mais je ne connais pas assez le sujet pour trouver un | exemple particulier. | | Tu as des exemples précis en tête ?
struct A { int a[]; };
struct B : A { };
-- Gaby
Fabien LE LEZ
On Sun, 05 Dec 2004 06:10:20 +0100, drkm :
struct B { char tableau [*]; // Pas sûr de la syntaxe int i;
Illégal, si j'en crois James : "Une VLA peut, par exemple, être le dernier élément d'un struct."
-- ;-)
On Sun, 05 Dec 2004 06:10:20 +0100, drkm <usenet.fclcxx@fgeorges.org>:
struct B
{
char tableau [*]; // Pas sûr de la syntaxe
int i;
Illégal, si j'en crois James : "Une VLA peut, par exemple, être le
dernier élément d'un struct."
struct B { char tableau [*]; // Pas sûr de la syntaxe int i;
Illégal, si j'en crois James : "Une VLA peut, par exemple, être le dernier élément d'un struct."
-- ;-)
drkm
Fabien LE LEZ writes:
On Sun, 05 Dec 2004 06:10:20 +0100, drkm :
struct B { char tableau [*]; // Pas sûr de la syntaxe int i;
Illégal, si j'en crois James : "Une VLA peut, par exemple, être le dernier élément d'un struct."
Je viens de vérifier dans la norme. 6.7.2.1/2 dit :
A structure or union shall not contain a member with incomplete or function type [...], except that the last member of a structure with more than one named member may have incomplete array type; such a structure (and any union containing, possibly recursively, a member that is such a structure) shall not be a member of a structure or an element of an array.
Il me semble que la transposition naturelle en C++ serait bien d'interdir l'héritage : « such a structure [...] shall not be a member of a structure ».
--drkm
Fabien LE LEZ <gramster@gramster.com> writes:
On Sun, 05 Dec 2004 06:10:20 +0100, drkm <usenet.fclcxx@fgeorges.org>:
struct B
{
char tableau [*]; // Pas sûr de la syntaxe
int i;
Illégal, si j'en crois James : "Une VLA peut, par exemple, être le
dernier élément d'un struct."
Je viens de vérifier dans la norme. 6.7.2.1/2 dit :
A structure or union shall not contain a member with incomplete or
function type [...], except that the last member of a structure
with more than one named member may have incomplete array type;
such a structure (and any union containing, possibly recursively,
a member that is such a structure) shall not be a member of a
structure or an element of an array.
Il me semble que la transposition naturelle en C++ serait bien
d'interdir l'héritage : « such a structure [...] shall not be a member
of a structure ».
struct B { char tableau [*]; // Pas sûr de la syntaxe int i;
Illégal, si j'en crois James : "Une VLA peut, par exemple, être le dernier élément d'un struct."
Je viens de vérifier dans la norme. 6.7.2.1/2 dit :
A structure or union shall not contain a member with incomplete or function type [...], except that the last member of a structure with more than one named member may have incomplete array type; such a structure (and any union containing, possibly recursively, a member that is such a structure) shall not be a member of a structure or an element of an array.
Il me semble que la transposition naturelle en C++ serait bien d'interdir l'héritage : « such a structure [...] shall not be a member of a structure ».
--drkm
drkm
Gabriel Dos Reis writes:
drkm writes:
| Tu as des exemples précis en tête ?
struct A { int a[]; };
struct B : A { };
En regard de ma réponse à Fabien, ne serait-il pas évident d'interdir cette construction ?
J'entrevois plus précisément les problèmes potentiels, je pense, et la solution consistant à interdir que des structures contenant un VLA soient un sous-objet d'une autre structure.
--drkm
Gabriel Dos Reis <gdr@integrable-solutions.net> writes:
drkm <usenet.fclcxx@fgeorges.org> writes:
| Tu as des exemples précis en tête ?
struct A {
int a[];
};
struct B : A {
};
En regard de ma réponse à Fabien, ne serait-il pas évident
d'interdir cette construction ?
J'entrevois plus précisément les problèmes potentiels, je pense, et
la solution consistant à interdir que des structures contenant un VLA
soient un sous-objet d'une autre structure.
En regard de ma réponse à Fabien, ne serait-il pas évident d'interdir cette construction ?
J'entrevois plus précisément les problèmes potentiels, je pense, et la solution consistant à interdir que des structures contenant un VLA soient un sous-objet d'une autre structure.
--drkm
Fabien LE LEZ
On Sun, 05 Dec 2004 15:50:05 +0100, drkm :
En regard de ma réponse à Fabien, ne serait-il pas évident d'interdir cette construction ?
Yep. D'autant que l'utilité d'introduire les VLA en C++, c'est la compatibilité avec des headers écrits en C -- et de tels headers ne risquent pas de parler d'héritage.
-- ;-)
On Sun, 05 Dec 2004 15:50:05 +0100, drkm <usenet.fclcxx@fgeorges.org>:
En regard de ma réponse à Fabien, ne serait-il pas évident
d'interdir cette construction ?
Yep. D'autant que l'utilité d'introduire les VLA en C++, c'est la
compatibilité avec des headers écrits en C -- et de tels headers ne
risquent pas de parler d'héritage.
En regard de ma réponse à Fabien, ne serait-il pas évident d'interdir cette construction ?
Yep. D'autant que l'utilité d'introduire les VLA en C++, c'est la compatibilité avec des headers écrits en C -- et de tels headers ne risquent pas de parler d'héritage.