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 |