[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Re: [CPROG] compiler bug?



Hej Sune

Undskyld! noget af det jeg skrev var noget sludder.
Håber at dette skulle hjælpe.

Mads Bondo Dydensborg oplysning om performance problemer og syntaks fejl

efter operator-> er derimod  helt korrekt.

Sune Fischer wrote:

> > Jeg ville dog tilføje en const qualifier:
> > const CMatrix CMatrix::operator * (CMatrix& A);

Der bør tilføjes to const qualifiers (bare ikke der hvor jeg satte den):

CMatrix CMatrix::operator * (const CMatrix& B) const {..}
Den første const indikerer at operatoren ikke har sidevirkninger på
CMatrix B - hvilket vi jo heller ikke ønsker (og er en hjælp for
compileren)

Den anden const indikerer at operatoren ikke har sidevirkninger på den
klasse den er erklæret i:
class CMatrix {
    CMatrix operator * (const CMatrix& B) const;
}
erklæringen svarer til non-member operatoren
CMatrix operator * (const CMatrix& A,   // the CMatrix formerly known as
this ;)
                                const CMatrix& B);


> > returværdien (CMatrix)R er og bliver dog en auto
> > variabel

> Hvilken betydning har dette?

Forhåbentligvis ingen. Men du bør kun bruge funktionsargument const
referencer til den (som ovenfor) eller sørge for at kopiere værdien ind
i en anden variabel før alt andet.

> Det jeg er ude efter, er at kunne skrive meget kort
> kode, fx.
> C=max(A*B-D)+3.4*A/C;
> hvor altså A,B,C,D alle er float[N][N][N] matricer.
> I sædvanlig C-stil vil dette blive nærmest ulæseligt
> pjasket til med for-loops.

C code kan sagtens laves brugervenligt (hvor bruger er programøren).
*state-of-the_art* C++ er derimod totalt ulæseligt for den uindvigede.

> Er der nogen grund til at dette ikke skulle kunne
> virke?

Næh!
eksempel:

  class CMatrix_tiny {
  public:
    float Rep[2][2][2];    // private? representation
    CMatrix_tiny operator+ (const CMatrix_tiny& second_arg) const;
  };

  CMatrix_tiny CMatrix_tiny::operator+ (const CMatrix_tiny& second_arg)
const {
    CMatrix_tiny result;
    for (int i= 0; i < 2; ++i)
      for (int j= 0; j < 2; ++j)
        for (int k= 0; k < 2; ++ k)
          result.Rep[i][j][k]=
          Rep[i][j][k]       // da operator+ er en CMatrix_tiny::Member
er this-> implicit
          + second_arg.Rep[i][j][k];
    return result;
  }

> > Som curriosum mener Bjarne Stroustrup at operatorer
> > der ikke har
> > sidevirkninger på en class bør erklæres som
> > non-member functions.
>
> Det behøver ikke være kønt, bare det virker;-)

Det "virker" nu bedre hvis det også var kønt!

Overvej grundigt Mads Bondo Dydensborgs mening om optimering.
Prøv at tænke lidt på om ikke class std::vector<std::vector
<std::vector<float> > > eller std::valarray<.> var en bedre
representation af data.

Hej fra Nils.
(jeg har desværre ikke kunne genskabe din NaN fejl med egcs-21.91.66)



 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2005-08-10, 20:08 CEST [an error occurred while processing this directive]
This page is maintained by [an error occurred while processing this directive]MHonArc [an error occurred while processing this directive] # [an error occurred while processing this directive] *