And also, it has nothing to do with the syntax (+ 1 1), the keyword is homoiconicity.
And also, it has nothing to do with the syntax (+ 1 1), the keyword is homoiconicity.
No decent-performing system totally skips compilation. You just don't notice that it is happening. Even a web browser compiles the javascript before running it; that is what a JIT does.
I mentioned the syntax "(+ 1 1)" because you're trying to disqualify C++ homoiconicity on a superficial syntactic basis. If you can do that, then it is equally valid to say that LISP can't do simple addition.
C++ can manipulate itself. Granted, you'll want a library such as LLVM, but you can get the job done yourself if you are a glutton for punishment.
Code is represented via data structures on normal (von Neumann) hardware. LISP is every bit as compiled as C++. Both forms of C++, human-readable and compiled, can be manipulated. It's the same as LISP, except that "human readable" is debatable for any form of LISP.
BTW, in LISP, actual usage of the homoiconicity is the surest way to make a mess of unmaintainable code.