c 0x
play

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


  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

  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.

  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 or python ❼ The language doesn’t use a standard character-encoding set for non-ascii, but only provides containers for the bits.

  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

  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

  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"

  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 of 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

  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.

  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 operator (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 operator recieves the value of the literal. For example, the literal 3.5i will perform the following call: operator "i" ( parameters );

  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.

  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

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend