# C++ Support
## Basic Concepts
As one of the most widely used programming languages, C++ supports features, such as classes, encapsulation, and overloading. It is an object-oriented programming language developed based on the C language.
## Working Principles
The compiler supports C++ code identification. The system calls the constructors of global objects to perform initialization operations.
## Development Guidelines
### Available APIs
**Table 1** APIs supported by C++
Function
|
API
|
Description
|
Prerequisites for using C++ features
|
LOS_CppSystemInit
|
Initializes C++ constructors.
|
### How to Develop
Before using C++ features, you need to call **LOS\_CppSystemInit** to initialize C++ constructors. The initialized constructors are stored in the **init\_array** section, and the section range is passed by the variables **\_\_init\_array\_start\_\_** and **\_\_init\_array\_end\_\_**.
**Table 2** Parameter description
Parameter
|
Description
|
__init_array_start__
|
Start of the init_array section
|
__init_array_end__
|
End of the init_array section
|
>![](../public_sys-resources/icon-note.gif) **NOTE:**
>The **LOS\_CppSystemInit** function must be called before a C++ service. When the C library used by the third-party compiler is not musl libc, some classes or APIs \(such as **std::thread** and **std::mutex**\) that are closely related to system resources have compatibility issues and are not recommended to use.
### Development Example
```
void app_init(void)
{
......
/* Initialize C++ in the startup phase. */
LOS_CppSystemInit((UINTPTR)&__init_array_start__, (UINTPTR)&__init_array_end__);
/* C++ service */
......
}
```