public inbox for gcc-help@gcc.gnu.org
 help / color / mirror / Atom feed
From: David Hagood <david.hagood@gmail.com>
To: gcc-help@gcc.gnu.org, Graziano.Servizi@bo.infn.it
Subject: Re: Question
Date: Sun, 12 Oct 2014 12:54:00 -0000	[thread overview]
Message-ID: <543A79EB.7040002@gmail.com> (raw)
In-Reply-To: <5433F137.8050008@bo.infn.it>

On 10/07/2014 08:57 AM, Graziano Servizi wrote:
> So, if I have well understood I could write such a short code:
>
> # include <iostream>
>
> class P
>   {
>    friend void friend_inline()
>     {std :: cout << P :: Name << ' ' << p << '\n';}
    You will need to qualify "p" as well:
    {std :: cout << P::Name << ' ' << P::p << '\n';}
>    static constexpr int Name = 20;
>    static constexpr double p = 12.5;
>
>    };
>
> int main()
>   {
>    P p;
>    // how can I call friend_inline ?
      friend_inline();
> }
It's just a function.

It's probably more clear if you split the definition of the function, 
the declaration of it being a friend, and the implementation:

// Declaration: there exists a function named "friend_inline"...
void friend_inline();

// Class declaration.
class P
  {
   // Class P allows a non-class function "friend_inline" to access its 
private variables...
   friend void friend_inline();
   static constexpr int Name = 20;
   static constexpr double p = 12.5;

   };

// Definition of the function "friend_inline"
void friend_inline()
{
   std::cout << P::Name << ' ' << P::p << std::endl;
}

Each of these things - declaration, friending, and definition - are 
separate things. They can be combined into one statement (as in your 
example) for brevity, but they still are 3 different things.

Also: be VERY CAREFUL about using friend - it's almost always a bad 
idea. You are almost always better off making one or more public member 
functions, and calling them, than you are exposing every last private 
member to a non-member function.

somewhat OT: I wouldn't put spaces between the class name, the colon, 
and the variable name in your code; they are all one thing - the name of 
the object being accessed. Also, use "std::endl" to end a sequence of 
insertions to a stream, not just '\n' - std::endl has more semantic 
meaning to the system, it really means "I am done with this line, do 
whatever you need to do, such as flushing it to the file", vs. "\n" 
which just means "insert a newline character".


  reply	other threads:[~2014-10-12 12:54 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-07 13:57 Question Graziano Servizi
2014-10-12 12:54 ` David Hagood [this message]
2014-10-13  9:55   ` Question Jonathan Wakely
  -- strict thread matches above, loose matches on Subject: below --
2022-11-29  9:03 Question Mo Alamili
2022-12-02  9:06 ` Question Mo Alamili
     [not found] <20200831201750.74266362@arch.localdomain>
     [not found] ` <20200903232726.ba28157e5ee86c0dbd76f723@wp.pl>
2020-09-04 22:49   ` Question, using gcc, forum tele
2020-09-04 23:44     ` Question tele
2014-07-21  8:51 question Graziano Servizi
2014-07-21  9:10 ` question Jonathan Wakely
2014-02-03 17:37 question Graziano Servizi
2014-02-03 17:53 ` question Ángel González
2014-02-04  8:11 ` question Jonathan Wakely
2005-10-29 21:02 Question Matias Trocki
2005-10-30  5:00 ` Question Ian Lance Taylor
2004-12-02 15:11 Question Roberto Ausas
2004-12-02 15:25 ` Question Leopold Palomo-Avellaneda
2004-12-02 15:36 ` Question Eljay Love-Jensen
2004-08-19 16:21 question balan
2004-08-19 16:27 ` question Eljay Love-Jensen
2002-06-13 16:17 question Brett Hunt
2002-06-13 10:54 question Antonio Fontinha
1999-12-15 11:06 question petar
1999-12-31 22:24 ` question petar
1999-10-18 10:03 Question Rui Pedro Fernandes
1999-10-31 13:57 ` Question Rui Pedro Fernandes

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=543A79EB.7040002@gmail.com \
    --to=david.hagood@gmail.com \
    --cc=Graziano.Servizi@bo.infn.it \
    --cc=gcc-help@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).