File: InteropOddities.md

package info (click to toggle)
swiftlang 6.1.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,791,532 kB
  • sloc: cpp: 9,901,743; ansic: 2,201,431; asm: 1,091,827; python: 308,252; objc: 82,166; f90: 80,126; lisp: 38,358; pascal: 25,559; sh: 20,429; ml: 5,058; perl: 4,745; makefile: 4,484; awk: 3,535; javascript: 3,018; xml: 918; fortran: 664; cs: 573; ruby: 396
file content (25 lines) | stat: -rw-r--r-- 1,410 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[** ‼️ The official C++ interoperability documentation is live at Swift.org and provides an up-to-date guide for mixing Swift and C++ ‼️ **](https://www.swift.org/documentation/cxx-interop/)

# C++ Interoperability Oddities

C++ APIs may have slightly different behavior than other C++ APIs. This is a general catch-all document where these
oddities are recorded along with a few other things that are good to know when using C++ interop.

**Parameters with reference types**

Parameters that have mutable reference types are bridged as inout. Parameters with immutable reference types (const ref)
are bridged as value types. ⚠️ This will change as soon as Swift has a way to represent immutable borrows. ⚠️

**Lifetimes**

Currently, lifetimes are extended to the end of the lexical scope if any unsafe pointers are used in that scope. TODO:
this should be updated to extend lifetimes whenever a C++ type is used in that scope. Currently, if there is no
unsafe pointer used in the scope, then normal Swift lifetime rules apply.

**Borrowing Self**

For mutating methods, self is borrowed and the access to self lasts for the duration of the call. For non-mutating
methods, the access to self is currently instantaneous. ⚠️ In the very near future we plan to borrow self in both cases.
This will be a source breaking change from what native Swift methods do. ⚠️

_More to come soon :)_