Re: Is it legal code?
On Feb 20, 5:48 pm, "Paul" <pchris...@yahoo.co.uk> wrote:
"James Kanze" <james.ka...@gmail.com> wrote in message
news:4d77d6ac-8b83-4dd3-bc23-a5426efd7c81@s9g2000yqm.googlegroups.com...
On Feb 20, 1:09 am, "Paul" <pchris...@yahoo.co.uk> wrote:
"gwowen" <gwo...@gmail.com> wrote in message
news:d411186f-2faa-4429-bcbc-286e7d4c32a4@e21g2000yqe.googlegroups.com.=
...
On Feb 19, 11:27 am, "Paul" <pchris...@yahoo.co.uk> wrote:
Is it legal to invoke a (non static) member function without an obje=
ct?
I read something in the C++ standard that it may not be standard
compliant
code to invoke a (non static)member function directly from a pointer=
..
--If the pointer points to an object that still exists, its fine.
--Otherwise, no. Essentially the same as dereferencing the pointer.
So given that the following is true:
"If a nonstatic member function of a class X is called for an
object that is not of type X, or of a type derived from X, the
behavior is undefined."
It follows that if an object(or derived object) does not exist then it=
is
undefined behaviour to call its respective nonstatic member function?
Therefore it must be true that a member function does not exist withou=
t
an
object.
I don't quite follow you here. If I have a function:
void f(int&);
, it's undefined behavior for me to call f without a an object
of type int.
You must've forgot we are talking about *member functions*.
The function f(int&) still "exists". For some
definition of "exists"---this is getting a bit too metaphysical
for me. One could argue that in C++, only "objects" exist, and
references and functions aren't objects, so can't "exist".
An object(instance of a class type) has a lifetime, it exists for the
duration of its lifetime.
Because C++ disallows calling nonstatic member functions, without an obje=
ct
of , or derived from, the respective class type. A non static member
function cannot exist unless an object exists.
Does the following also work?
An object(instance of a class type) has a lifetime, it exists for the
duration of its lifetime.
Because C++ disallows calling global functions with a class reference
parameter, without an object of , or derived from, the respective
class type. Such function cannot exist unless an object exists.
struct A {};
void foo( A& )
{
}
// foo does not exist here.
int main()
{
//foo does not exist here either.
A a;
// aah there you go, now foo exists.
foo( a );
}
itaj