C++0x New String Literals and User-defined Literals Pascal Andreas - - PowerPoint PPT Presentation

c 0x
SMART_READER_LITE
LIVE PREVIEW

C++0x New String Literals and User-defined Literals Pascal Andreas - - PowerPoint PPT Presentation

Literals New String Literals User-defined Literals Sources C++0x New String Literals and User-defined Literals Pascal Andreas dHermilly Anders Boesen Lindbo Larsen Datalogisk Institut Kbenhavns Universitet April 25, 2008 Literals


slide-1
SLIDE 1

Literals New String Literals User-defined Literals Sources

C++0x

New String Literals and User-defined Literals Pascal Andreas d’Hermilly Anders Boesen Lindbo Larsen

Datalogisk Institut Københavns Universitet

April 25, 2008

slide-2
SLIDE 2

Literals New String Literals User-defined Literals Sources

Literals

A literal is a notation for representing a value within source code, e.g.:

❼ "hello" (string) ❼ ’c’ (character) ❼ 14 (integer) ❼ 3.1 (double) ❼ 3.1f (float)

We call the f in 3.1f the suffix modifier. The type of a literal is thus determined from its syntactic form. In the following we shall se how the C++ handling of literals is changed with C++0x.

slide-3
SLIDE 3

Literals New String Literals User-defined Literals Sources

String Literals

❼ Lots of demands for cross-platform functionality. ❼ Current standing for C++: not good, compared to e.g. java

  • r python

❼ The language doesn’t use a standard character-encoding set

for non-ascii, but only provides containers for the bits.

slide-4
SLIDE 4

Literals New String Literals User-defined Literals Sources

Current String Literals

String literals is an array consisting of either:

❼ char ❼ wchar t

Examples of current string literals:

❼ ”A string literal in double quotes” being a const char ❼ L”Example” being a const wchar t

In C++0x, better support for Unicode will be introduced. Encodings that will be supported: UTF-8, UTF-16, and UTF-32

slide-5
SLIDE 5

Literals New String Literals User-defined Literals Sources

New String Literals

New character types:

❼ char16 t ❼ char32 t

Examples of new string literals:

❼ u8"UTF-8 string" ❼ u"UTF-16 string" ❼ U"UTF-32 string"

using const char[], const char16[], and const char32[] respectively. Also inline insertion of unicode-codepoint will be available:

❼ u8"Unicode character:

\u2018 " The code that follows \u is hex for a 16 bit Unicode codepoint. 32 bit, use \U

slide-6
SLIDE 6

Literals New String Literals User-defined Literals Sources

Raw Strings

Raw strings allow you to create strings without having to escape special characters. Examples:

❼ R"[ls /home/pascal/ | grep ".pdf" ]" ❼ R"delim[ls /home/pascal/ | grep ".pdf" ]delim"

slide-7
SLIDE 7

Literals New String Literals User-defined Literals Sources

User-defined Literals

The current problem

❼ C++ recognizes literals only for the built-in data types, e.g.:

integers, strings and booleans.

❼ These types are not sufficient to maintain C compatibility!

(C99 has introduced new data types, that requires recognition

  • f new literals)

The goal of C++0x

❼ Make it possible to define new kinds of literal modifiers that

will construct user-defined objects.

❼ C compatibility should be maintained as far as possible

slide-8
SLIDE 8

Literals New String Literals User-defined Literals Sources

Examples of User-defined Literals

Some of the possibilities with user-defined literals:

❼ "hello"s (std::string) ❼ 3.5i (imaginary type for complex numbers) ❼ 10011011b (binary literals) ❼ 1234567890123456789xxl (arbitrary range/precision)

Notice the use of suffixes to identify the literal type.

slide-9
SLIDE 9

Literals New String Literals User-defined Literals Sources

Proposed Solution

Every user-defined literal is interpreted as a call to a new kind of

  • perator (called literal operator):

X operator "suffix" (parameters ); where X is the return type of the newly defined literal with the suffix suffix. parameters decides in which format the literal

  • perator recieves the value of the literal.

For example, the literal 3.5i will perform the following call:

  • perator "i" (parameters );
slide-10
SLIDE 10

Literals New String Literals User-defined Literals Sources

Examples of Literal Operators

A cooked-form literal operator can have the following form: X operator "suffix" (unsigned int); For example: cm t operator "cm" (unsigned int); cm t n = 45cm; In this case, 45 is given as parameter to the literal operator. A raw-form literal operator can have the following form: X operator "suffix" (char const*); Example: long number operator "xxl" (const char*); long number n = 123456789012345xxl; In this case, the null-terminated C string "123456789012345" is given as parameter to the literal operator.

slide-11
SLIDE 11

Literals New String Literals User-defined Literals Sources

Sources

The C++ Standards Committee, n2378

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2378.pdf

The C++ Standards Committee, n2442

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm

Wikipedia, C++0x

http://en.wikipedia.org/wiki/C++0x