C++ to Objective-C 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 Objective-C will be. Not converted means there will be no automatic translation to a corresponding language object.

Note that any restriction this poses only applies to the public interface of your code (e.g. your public headers). Your internal code can use anything from C++.

Conversion tables

C++ Objective-C translation
Namespace Prefix*
Nested namespace Prefix*
Class Class
Public function Class function
Private function Not converted
Virtual function ???
Operator ???
Static member function Static class function
Static member variable Static class variable
Public const member variable Readonly property
Public non const member variable Readwrite property
Private member variable Not converted
Global variable Static class property**
Global static variable Static class property**
Free function Static class function**
Overloaded function Class function***
Scoped enum NS_ENUM
Templated class/function Not converted****
Specialized class template Class***
Specialized function template Function***
Documentation Documentation

* Prefix on all classes and free functions in the namespace.

** Wrapped in a class with a name that starts with the module name.

*** The naming convention for these classes and functions can be found under the Naming Convention page.

**** No direct translation to Objective-C. Will not emit warning.

C++ operator Objective-C operator
operator+ ???
operator- ???
operator* ???
operator/ ???
operator% ???
operator+= ???
operator-= ???
operator*= ???
operator/= ???
operator%= ???
operator== ???
operator!= ???
operator> ???
operator>= ???
operator< ???
operator<= ???
operator[] ???
operator() ???
operator= Not converted
operator<< Not converted
operator>> Not converted
operator++ Not converted
operator-- Not converted
C++ Standard library class Objective-C translation
std::array NSArray
std::complex ???
std::deque NSArray
std::filesystem::path NSString
std::forward_list Not converted
std::function ???
std::list NSArray
std::map NSDictionary
std::multimap Not converted
std::multiset Not converted
std::optional Value or nil
std::pair NSArray
std::priority_queue Not converted
std::queue Not converted
std::set NSOrderedSet
std::shared_ptr Value*
std::stack Not converted
std::string NSString
std::string_view NSString
std::tuple NSArray
std::unique_ptr Value
std::unordered_map NSDictionary
std::unordered_multimap Not converted
std::unordered_multiset Not converted
std::unordered_set NSSet
std::valarray NSArray
std::variant ???
std::vector NSArray

* After using a shared_ptr, the object is now always managed by a shared_ptr.

C++ builtin type Objective-C translation
bool bool
char char
char16_t char16_t
char32_t char32_t
double double
float float
int int
int8_t int8_t
int16_t int16_t
int32_t int32_t
int64_t int64_t
long double long double
long int long int
long long int long long int
short int short int
signed char signed char
uint8_t uint8_t
uint16_t uint16_t
uint32_t uint32_t
uint64_t uint64_t
unsigned char unsigned char
unsigned int unsigned int
unsigned long int unsigned long int
unsigned long long int unsigned long long int
unsigned short int unsigned short int
wchar_t wchar_t
void void