C++ to python conversions
This page shows what is automatically translated and to what.
On the left is the C++ and to the right what the corresponding interface in python will be.
Not converted means there will be no automatic translation to a corresponding python object (for example std::queue does not automatically translate to queue.Queue).
Note that any restriction this poses only applies to the public interface of your code (e.g. your public headers).
Conversion tables
| C++ | Python translation | 
|---|---|
| Namespace | Module | 
| Nested namespace | Submodule | 
| Class | Class | 
| Public function | Class function | 
| Private function | Not converted | 
| Virtual function | Overridable function | 
| Operator | Operator | 
| Static member function | Static class function | 
| Static member variable | Static class variable | 
| Public const member variable | Read only property | 
| Public non const member variable | Read write property | 
| Private member variable | Not converted | 
| Global variable | Module variable | 
| Global static variable | Static module variable | 
| Free function | Module function | 
| Overloaded function | Module function* | 
| Enum | Enum | 
| Scoped enum | Enum | 
| Templated class/function | Not converted** | 
| Specialized class template | Class*** | 
| Specialized function template | Function**** | 
| Documentation* | Documentation | 
* Will try to match arguments to types provided.
** No direct translation to python. Will not emit warning.
*** The naming convention for these classes can be found under the Template Naming Convention page.
**** Functions with different template arguments will behave as overloaded functions.
***** Refers to documentation comments before namespaces, functions, classes etc. See the examples for more information.
| C++ operator | Python operator | 
|---|---|
| operator+ | __add__ | 
| operator- | __sub__ | 
| operator* | __mul__ | 
| operator/ | __truediv__ | 
| operator% | __mod__ | 
| operator+= | __iadd__ | 
| operator-= | __isub__ | 
| operator*= | __imul__ | 
| operator/= | __itruediv__ | 
| operator%= | __imod__ | 
| operator== | __eq__ | 
| operator!= | __ne__ | 
| operator> | __gt__ | 
| operator>= | __ge__ | 
| operator< | __lt__ | 
| operator<= | __ge__ | 
| operator[] | __getitem__ | 
| operator() | __call__ | 
| operator= | Not converted | 
| operator<< | Not converted | 
| operator>> | Not converted | 
| operator++ | Not converted | 
| operator-- | Not converted | 
| C++ Standard library class | Python translation | 
|---|---|
| std::array | array | 
| std::complex | complex | 
| std::deque | array | 
| std::filesystem::path | pathlib.Path | 
| std::forward_list | Not converted | 
| std::function | function | 
| std::list | array | 
| std::map | dict | 
| std::multimap | Not converted | 
| std::multiset | Not converted | 
| std::optional | None || value | 
| std::pair | tuple | 
| std::priority_queue | Not converted | 
| std::queue | Not converted | 
| std::set | set | 
| std::shared_ptr | value | 
| std::stack | Not converted | 
| std::tuple | tuple | 
| std::unique_ptr | value* | 
| std::shared_ptr | value** | 
| std::unordered_map | dict | 
| std::unordered_multimap | Not converted | 
| std::unordered_multiset | Not converted | 
| std::unordered_set | set | 
| std::valarray | array | 
| std::variant | value | 
| std::vector | array | 
* Note that due to how python works internally, function argument of type std::unique_ptr is not allowed. For more info see the pybind11 documentation on smart pointers.
** When a user defined struct/class is managed by std::shared_ptr, it is marked as such in the resulting pybind11. For more info see the pybind11 documentation on smart pointers.
| C++ builtin type | Python translation | 
|---|---|
| bool | bool | 
| char | str | 
| char16_t | str | 
| char32_t | str | 
| double | float | 
| float | float | 
| int | int | 
| int8_t | int | 
| int16_t | int | 
| int32_t | int | 
| int64_t | int | 
| long double | int | 
| long int | int | 
| long long int | int | 
| short int | int | 
| signed char | str | 
| string | str | 
| string_view | str | 
| uint8_t | int | 
| uint16_t | int | 
| uint32_t | int | 
| uint64_t | int | 
| unsigned char | str | 
| unsigned int | int | 
| unsigned long int | int | 
| unsigned long long int | int | 
| unsigned short int | int | 
| wchar_t | str |