On an AVR, there is little difference between a "software interrupt" and a "call" instruction, especially without an OS to make svcalls to,
Arduino uses avr-g++, so it supports C and C++, but due to the restrictive hardware environment (2k RAM), many of the C++ constructs you may be used to in a desktop environment are not present. No STL, no libc++, no exceptions, no cout/cin, and very limited dynamic memory allocation. (some of these can be added, sort-of.)
Arduino on ARM. ESP. and RiscV microcontrollers is less limited (there is usually STL), but still not what you'd be used to, due to low RAM.