Everything You Ever Wanted To Know About Move Semantics
|
|
- Amber Harrell
- 6 years ago
- Views:
Transcription
1 Everything You Ever Wanted To Know About Move Semantics (and then some) Howard Hinnant Ripple Jul 25, 2016
2 Outline The genesis of move semantics Special member functions Introduction to the special move members Best practices for the move members Details, details
3 How Did Move Semantics Get Started? It was all about optimizing std::vector<t>. And everything else just rode along on its coattails.
4 What is std::vector? Anatomy of a vector (simplified) vector begin() end() capacity() vector s data
5 How does a vector? vector vector vector s data vector s data
6 How does a vector move? vector vector nullptr nullptr nullptr vector s data
7 How Did Move Semantics Get Started? Remember these fundamentals about move semantics and vector, and you will have a basic understanding of all of move semantics. The rest is just details
8 Outline The genesis of move semantics Special member functions Introduction to the special move members Best practices for the move members Details, details
9 Special Members What are they?
10 Special Members Special members are those member functions that the compiler can be asked to automatically generate code for.
11 Special Members How many special members are there? 6
12 Special Members They are: default destructor assignment move move assignment X(); ~X(); X(X const&); X& operator=(x const&); X(X&&); X& operator=(x&&);
13 Special Members The special members can be: implicitly user or or or deleted user-defined
14 Special Members What counts as user-? struct X { X() {} // user- X(); // user- X() = default; // user- X() = delete; // user- };
15 Special Members What is the difference between - and deleted? Consider: struct X { template <class...args> X(Args&&...args); // The default }; // is
16 Special Members struct X { template <class...args> X(Args&&...args); // The default }; // is X can be default constructed by using the variadic.
17 Special Members struct X { template <class...args> X(Args&&...args); X() = default; }; Now X() binds to the default instead of the variadic.
18 Special Members struct X { template <class...args> X(Args&&...args); }; X() = delete; Now X() binds to the deleted default instead of the variadic. X is no longer default constructible.
19 Special Members struct X { template <class...args> X(Args&&...args); }; X() = delete; Deleted members participate in overload resolution. Members - do participate in overload resolution.
20 Special Members Under what circumstances are special members implicitly provided?
21 Special Members compiler implicitly declares default destructor assignment move move assignment Nothing user declares If the user declares no special members or s, all 6 special members will be. This part is no different from C++98/03
22 Special Members compiler implicitly declares default destructor assignment move move assignment Nothing user declares Any If the user declares any, this will inhibit the implicit declaration of the default.
23 Special Members compiler implicitly declares default destructor assignment move move assignment Nothing user declares Any default user A user- default will inhibit any other special member.
24 Special Members compiler implicitly declares default destructor assignment move move assignment Nothing user declares Any default destructor user user A user- destructor will inhibit the implicit declaration of the move members. The implicitly members are deprecated. If you declare a destructor, declare your members too, even though necessary.
25 Special Members compiler implicitly declares default destructor assignment move move assignment Nothing Any user declares default destructor user user user A user- will inhibit the default and move members.
26 Special Members compiler implicitly declares default destructor assignment move move assignment Nothing user declares Any default destructor assignment user user user user A user- assignment will inhibit the move members.
27 Special Members compiler implicitly declares default destructor assignment move move assignment Nothing user declares Any default destructor assignment move user user user user deleted deleted user A user- move member will implicitly delete the members.
28 Special Members compiler implicitly declares default destructor assignment move move assignment Nothing user declares Any default destructor assignment move move assignment user user user user deleted deleted deleted deleted user user
29 Special Members compiler implicitly declares default destructor assignment Nothing user declares Any default destructor user user user This is C++98/03 assignment user
30 Special Members compiler implicitly declares default destructor assignment move move assignment Nothing user declares Any default destructor assignment move move assignment user user user user deleted deleted deleted deleted user user
31 Outline The genesis of move semantics Special member functions Introduction to the special move members Best practices for the move members Details, details
32 What does a move do? class X : public Base { Member m_; X(X&& x) : Base(static_cast<Base&&>(x)), m_(static_cast<member&&>(x.m_)) {} };
33 What does a typical userdefined move do? class X : public Base { Member m_; X(X&& x) : Base(std::move(x)), m_(std::move(x.m_)) { x.set_to_resourceless_state(); }
34 What does a move assignment do? class X : public Base { Member m_; X& operator=(x&& x) { Base::operator= (static_cast<base&&>(x)); m_ = static_cast<member&&>(x.m_); return *this; }
35 What does a typical userdefined move assignment do? class X : public Base { Member m_; X& operator=(x&& x) { Base::operator=(std::move(x)); m_ = std::move(x.m_); x.set_to_resourceless_state(); return *this; }
36 Outline The genesis of move semantics Special member functions Introduction to the special move members Best practices for the move members Details, details
37 Can I define one special member in terms of aher? Yes.
38 Should I define one special member in terms of aher? No!
39 Should I define one special member in terms of aher? No! Give each special member the tender loving care it deserves. The entire point of move semantics is to boost performance.
40 Should I define one special member in terms of aher? Case study: the /swap idiom class X { std::vector<int> v_; public: X& operator=(x x) { // Implements v_.swap(x.v_); // both and return *this; // move assignment } }; What s to love?
41 Should I define one special member in terms of aher? Case study: the /swap idiom class X { std::vector<int> v_; public: I ve written highly optimized versions of the and move assignment operators. X& operator=(x const& x); X& operator=(x&& x); };
42 Should I define one special member in terms of aher? /swap penalty Case study: the /swap idiom lhs always needs to reallocate vector lhs never needs to reallocate vector Average case (70% slower) 1.8 Worst case 1.7 (almost 8 times slower) Best case 1.4 (same speed) % 25% 50% 75% 100% How often is lhs capacity sufficient? Speed of optimized assignment operator vs / swap assignment
43 Should I define one special member in terms of aher? Case study: the /swap idiom How hard is it to make separate optimized and move assignment operators for this case?
44 Should I define one special member in terms of aher? Case study: the /swap idiom class X { std::vector<int> v_; public: // Just keep your grubby fingers // off of the keyboard. // The defaults are optimal! }; What s to love?
45 Should I define one special member in terms of aher? Case study: the /swap idiom But the /swap idiom gives me strong exception safety! Good point. Are all of your clients willing to pay a giant performance penalty for strong exception safety on assignment?
46 Should I define one special member in terms of aher? Case study: the /swap idiom Perhaps you could interest the portion of your clients that do need strong exception safety in this generic function: template <class C> C& strong_assign(c& dest, C src) { using std::swap; swap(dest, src); return dest; }
47 Should I define one special member in terms of aher? Case study: the /swap idiom Now clients who need speed can: x = y; And clients who need strong exception safety can: strong_assign(x, y);
48 In A Hurry? If you don t have time to carefully consider all 6 special members, then just delete the members: class X { public: X(X const&) = delete; X& operator=(x const&) = delete; };
49 Outline The genesis of move semantics Special member functions Introduction to the special move members Best practices for the move members Details, details
50 What can I do with a movedfrom object? The following is a myth: All you can do with a moved-from object is destruct it or assign it a new value. That might be true for a type which has such documented preconditions.
51 What is the state of a movedfrom object? The state of a moved-from object is generally unspecified.
52 What can I do with a movedfrom object? You can do anything with a moved-from object that does require a precondition.
53 What is a precondition? A requirement in the function specification which restricts the state of the object prior to the call. For example: vector<t>::pop_back(); Requires: empty() shall be false. Precondition!
54 What can I do with a movedfrom object? Anything that does require a precondition. For example, vector<t>: destruct it. assign it a new value. get its size(). clear() it. Do pop_back() it! No precondition No precondition No precondition No precondition Precondition!
55 Guideline: Never delete the move members Deleted move members are at best redundant, and at worst, a bug
56 Guideline: Never delete the move members class X { public: X(X const&) = default; X& operator=(x const&) = default; X(X&&) = delete; X& operator=(x&&) = delete; }; Incorrect way to make a able type with no move members:
57 Guideline: Never delete the move members class X { public: X x = get_x(); // error! X(X const&) = default; X& operator=(x const&) = default; X(X&&) = delete; X& operator=(x&&) = delete; }; This type can be copied from an rvalue. Is that intended?!
58 Guideline: Never delete the move members class X { public: X(X const&) = default; X& operator=(x const&) = default; }; Correct way to make a able type with no move members:
59 Guideline: Never delete the move members class X { public: X(X const&) = delete; X& operator=(x const&) = delete; X(X&&) = delete; X& operator=(x&&) = delete; }; Correct but unadvised way to make class non-able and non-movable.
60 Guideline: Never delete the move members class X { public: X(X const&) = delete; X& operator=(x const&) = delete; X(X&&) = delete; X& operator=(x&&) = delete; }; Deleted move members are redundant.
61 Guideline: Never delete the move members class X { public: X(X const&) = delete; X& operator=(x const&) = delete; }; Better way to make class non-able and non-movable.
62 Summary Know when the compiler is defaulting or deleting special members for you, and what members will do. Always define or delete a special member when the compiler s implicit action is correct. Give tender loving care to each of the 6 special members, even if the result is to let the compiler handle it.
Special Member Functions
CS 247: Software Engineering Principles Special Member Functions Readings: Eckel, Vol. 1 Ch. 11 References and the Copy Constructor Ch. 12 Operator Overloading ( operator= ) U Waterloo CS247 (Spring 2017)
More informationSpecial Member Functions. Compiler-Generated Destructor. Compiler-Generated Default Constructor. Special Member Functions
Special Member Functions CS 247: Software Engineering Principles Special Member Functions Readings: Eckel, Vol. 1 Ch. 11 References and the Copy Constructor Ch. 12 Operator Overloading ( operator= ) C++
More informationRvalue References, Move Semantics, Universal References
Rvalue References, Move Semantics, Universal References PV264 Advanced Programming in C++ Nikola Beneš Jan Mrázek Vladimír Štill Faculty of Informatics, Masaryk University Spring 2018 PV264: Rvalue References,
More informationRvalue References & Move Semantics
Rvalue References & Move Semantics PB173 Programming in Modern C++ Nikola Beneš, Vladimír Štill, Jiří Weiser Faculty of Informatics, Masaryk University spring 2016 PB173 Modern C++: Rvalue References &
More informationCOMP6771 Advanced C++ Programming
1. COMP6771 Advanced C++ Programming Week 4 Part One: (continued) and 2016 www.cse.unsw.edu.au/ cs6771 2. Inline Constructors, Accessors and Mutators Question (from 2015): In the week 3 examples, constructors
More informationObject-Oriented Principles and Practice / C++
Object-Oriented Principles and Practice / C++ Alice E. Fischer October 10, 2016 OOPP / C++ Lecture 7... 1/15 Construction and Destruction Kinds of Constructors Move Semantics OOPP / C++ Lecture 7... 2/15
More information04-19 Discussion Notes
04-19 Discussion Notes PIC 10B Spring 2018 1 Constructors and Destructors 1.1 Copy Constructor The copy constructor should copy data. However, it s not this simple, and we need to make a distinction here
More informationAdvanced Programming in C++ Container Design I
Advanced Programming in C++ Container Design I This is an exercise on container design, especially in the view of robustness, iterators, and storage management. The container will be developed step-by-step,
More informationCS11 Advanced C++ Spring 2018 Lecture 1
CS11 Advanced C++ Spring 2018 Lecture 1 Welcome to CS11 Advanced C++! A deeper dive into C++ programming language topics Prerequisites: CS11 Intro C++ track is strongly recommended (obvious) You should
More informationObject-Oriented Principles and Practice / C++
Object-Oriented Principles and Practice / C++ Alice E. Fischer September 26, 2016 OOPP / C++ Lecture 4... 1/33 Global vs. Class Static Parameters Move Semantics OOPP / C++ Lecture 4... 2/33 Global Functions
More information3.Constructors and Destructors. Develop cpp program to implement constructor and destructor.
3.Constructors and Destructors Develop cpp program to implement constructor and destructor. Constructors A constructor is a special member function whose task is to initialize the objects of its class.
More informationOutline. 1 Function calls and parameter passing. 2 Pointers, arrays, and references. 5 Declarations, scope, and lifetimes 6 I/O
Outline EDAF30 Programming in C++ 2. Introduction. More on function calls and types. Sven Gestegård Robertz Computer Science, LTH 2018 1 Function calls and parameter passing 2 Pointers, arrays, and references
More informationDesign Patterns in C++
Design Patterns in C++ Safety to exceptions Giuseppe Lipari http://retis.sssup.it/~lipari Scuola Superiore Sant Anna Pisa April 15, 2011 G. Lipari (Scuola Superiore Sant Anna) Exception Safety April 15,
More informationObject Oriented Software Design - II
Object Oriented Software Design - II Safety to exceptions Giuseppe Lipari http://retis.sssup.it/~lipari Scuola Superiore Sant Anna Pisa April 12, 2012 G. Lipari (Scuola Superiore Sant Anna) Exception Safety
More informationProposal for Extending the switch statement
Doc No: N1741=04-0181 Project: Programming Language C++ Date: Friday, November 05, 2004 Author: Francis Glassborow email: francis@robinton.demon.co.uk Proposal for Extending the switch statement Note this
More informationTDDD38 - Advanced programming in C++
TDDD38 - Advanced programming in C++ Templates III Christoffer Holm Department of Computer and information science 1 Dependent Names 2 More on Templates 3 SFINAE 1 Dependent Names 2 More on Templates 3
More informationAnd Even More and More C++ Fundamentals of Computer Science
And Even More and More C++ Fundamentals of Computer Science Outline C++ Classes Special Members Friendship Classes are an expanded version of data structures (structs) Like structs, the hold data members
More informationModern and Lucid C++ Advanced for Professional Programmers. Part 3 Move Semantics. Department I - C Plus Plus Advanced
Department I - C Plus Plus Advanced Modern and Lucid C++ Advanced for Professional Programmers Part 3 Move Semantics Thomas Corbat / Prof. Peter Sommerlad Rapperswil, 09.03.2018 HS2018 Move Semantics 2
More informationPart X. Advanced C ++
Part X Advanced C ++ topics Philip Blakely (LSC) Advanced C++ 158 / 217 References The following are highly regarded books. They are fairly in-depth, and I haven t read them in their entirity. However,
More informationObject-Oriented Principles and Practice / C++
Object-Oriented Principles and Practice / C++ Alice E. Fischer May 13, 2013 OOPP / C++ Lecture 7... 1/27 Construction and Destruction Allocation and Deallocation Move Semantics Template Classes Example:
More informationMidterm Review. PIC 10B Spring 2018
Midterm Review PIC 10B Spring 2018 Q1 What is size t and when should it be used? A1 size t is an unsigned integer type used for indexing containers and holding the size of a container. It is guarenteed
More informationMove Semantics, Rvalue References, and Perfect Forwarding
Move Semantics, Rvalue References, and Perfect Forwarding Scott Meyers, Ph.D. Software Development Consultant smeyers@aristeia.com Voice: 503/638 6028 Fax: 503/974 1887 Last Revised: 3/16/11 C++0x Warning
More informationCh. 12: Operator Overloading
Ch. 12: Operator Overloading Operator overloading is just syntactic sugar, i.e. another way to make a function call: shift_left(42, 3); 42
More informationC++ (Non for C Programmer) (BT307) 40 Hours
C++ (Non for C Programmer) (BT307) 40 Hours Overview C++ is undoubtedly one of the most widely used programming language for implementing object-oriented systems. The C++ language is based on the popular
More informationThe issues. Programming in C++ Common storage modes. Static storage in C++ Session 8 Memory Management
Session 8 Memory Management The issues Dr Christos Kloukinas City, UoL http://staff.city.ac.uk/c.kloukinas/cpp (slides originally produced by Dr Ross Paterson) Programs manipulate data, which must be stored
More informationSplicing Maps and Sets (Revision 1)
Document number: N3645 Date: 2013-05-04 Project: Programming Language C++ Reference: N3485 Reply to: Alan Talbot cpp@alantalbot.com Howard Hinnant howard.hinnant@gmail.com James Dennett jdennett@google.com
More informationQUIZ on Ch.5. Why is it sometimes not a good idea to place the private part of the interface in a header file?
QUIZ on Ch.5 Why is it sometimes not a good idea to place the private part of the interface in a header file? Example projects where we don t want the implementation visible to the client programmer: The
More informationCS11 Advanced C++ Spring 2018 Lecture 2
CS11 Advanced C++ Spring 2018 Lecture 2 Lab 2: Completing the Vector Last week, got the basic functionality of our Vector template working It is still missing some critical functionality Iterators are
More informationAssignment operator overloading in c++ syntax. Assignment operator overloading in c++ syntax.zip
Assignment operator overloading in c++ syntax Assignment operator overloading in c++ syntax.zip I am working with writing the big five(copy constructor, copy assignment operator, move constructor, move
More information// Initially NULL, points to the dynamically allocated array of bytes. uint8_t *data;
Creating a Data Type in C Bytes For this assignment, you will use the struct mechanism in C to implement a data type that represents an array of bytes. This data structure could be used kind of like a
More informationQUIZ Friends class Y;
QUIZ Friends class Y; Is a forward declaration neeed here? QUIZ Friends QUIZ Friends - CONCLUSION Forward (a.k.a. incomplete) declarations are needed only when we declare member functions as friends. They
More informationModern C++ for Computer Vision and Image Processing. Igor Bogoslavskyi
Modern C++ for Computer Vision and Image Processing Igor Bogoslavskyi Outline Move semantics Classes Operator overloading Making your class copyable Making your class movable Rule of all or nothing Inheritance
More informationOverload Resolution. Ansel Sermersheim & Barbara Geller Amsterdam C++ Group March 2019
Ansel Sermersheim & Barbara Geller Amsterdam C++ Group March 2019 1 Introduction Prologue Definition of Function Overloading Determining which Overload to call How Works Standard Conversion Sequences Examples
More informationC++11/14 Rocks. Clang Edition. Alex Korban
C++11/14 Rocks Clang Edition Alex Korban 1 Contents Introduction 9 C++11 guiding principles... 9 Type Inference 11 auto... 11 Some things are still manual... 12 More than syntactic sugar... 12 Why else
More informationTemplates Templates are functions or classes that are parameterized. We have already seen a few in STL:
Templates Templates are functions or classes that are parameterized. We have already seen a few in STL: std::vector< int > std::vector< double > std::list< std::vector< >> std::unordered_map< int, bool
More information2 ADT Programming User-defined abstract data types
Preview 2 ADT Programming User-defined abstract data types user-defined data types in C++: classes constructors and destructors const accessor functions, and inline functions special initialization construct
More informationExplicit Conversion Operator Draft Working Paper
Explicit Conversion Operator Draft Working Paper Lois Goldthwaite, Michael Wong IBM michaelw@ca.ibm.com ACCU Lois@LoisGoldthwaite.com Document number: N2223=07-0083 Date: 2007-03-11 Project: Programming
More informationOperator Dot Wording
2016-10-16 Operator Dot Wording Bjarne Stroustrup (bs@ms.com) Gabriel Dos Reis (gdr@microsoft.com) Abstract This is the proposed wording for allowing a user-defined operator dot (operator.()) for specifying
More informationFast Introduction to Object Oriented Programming and C++
Fast Introduction to Object Oriented Programming and C++ Daniel G. Aliaga Note: a compilation of slides from Jacques de Wet, Ohio State University, Chad Willwerth, and Daniel Aliaga. Outline Programming
More informationAllocation & Efficiency Generic Containers Notes on Assignment 5
Allocation & Efficiency Generic Containers Notes on Assignment 5 CS 311 Data Structures and Algorithms Lecture Slides Friday, October 30, 2009 Glenn G. Chappell Department of Computer Science University
More informationCOMP6771 Advanced C++ Programming
1.. COMP6771 Advanced C++ Programming Week 5 Part Two: Dynamic Memory Management 2016 www.cse.unsw.edu.au/ cs6771 2.. Revisited 1 #include 2 3 struct X { 4 X() { std::cout
More informationCSE 333 Midterm Exam 5/9/14 Sample Solution
Question 1. (20 points) C programming. Implement the C library function strncpy. The specification of srncpy is as follows: Copy characters (bytes) from src to dst until either a '\0' character is found
More informationObject Oriented Programming in C#
Introduction to Object Oriented Programming in C# Class and Object 1 You will be able to: Objectives 1. Write a simple class definition in C#. 2. Control access to the methods and data in a class. 3. Create
More informationCSE 333. Lecture 11 - constructor insanity. Hal Perkins Paul G. Allen School of Computer Science & Engineering University of Washington
CSE 333 Lecture 11 - constructor insanity Hal Perkins Paul G. Allen School of Computer Science & Engineering University of Washington Administrivia Exercises: - New exercise out today, due Monday morning
More informationVariant: Discriminated Union with Value Semantics
Variant: Discriminated Union with Value Semantics Document #: P0080 Date: 2015-07-28 Project: Programming Language C++ Library Evolution Group Reply-to: Michael Park Contents 1 Introduction
More informationuse static size for this buffer
Software Design (C++) 4. Templates and standard library (STL) Juha Vihavainen University of Helsinki Overview Introduction to templates (generics) std::vector again templates: specialization by code generation
More informationAgenda. The main body and cout. Fundamental data types. Declarations and definitions. Control structures
The main body and cout Agenda 1 Fundamental data types Declarations and definitions Control structures References, pass-by-value vs pass-by-references The main body and cout 2 C++ IS AN OO EXTENSION OF
More informationThe Rule of Seven. (plus or minus two) or, Modern C++ Boilerplate.
The Rule of Seven (plus or minus two) or, Modern C++ Boilerplate http://www.club.cc.cmu.edu/~ajo/disseminate/c++now2015.pdf The Rule of Zero Write your classes in a way that you do not need to declare/define
More informationCMSC 341 Lecture 10 Binary Search Trees
CMSC 341 Lecture 10 Binary Search Trees John Park Based on slides from previous iterations of this course Review: Tree Traversals 2 Traversal Preorder, Inorder, Postorder H X M A K B E N Y L G W UMBC CMSC
More informationCreating a String Data Type in C
C Programming Creating a String Data Type in C For this assignment, you will use the struct mechanism in C to implement a data type that models a character string: struct _String { char data; dynamically-allocated
More informationCPSC 427: Object-Oriented Programming
CPSC 427: Object-Oriented Programming Michael J. Fischer Lecture 11 October 3, 2018 CPSC 427, Lecture 11, October 3, 2018 1/24 Copying and Assignment Custody of Objects Move Semantics CPSC 427, Lecture
More informationAdvanced C++ Topics. Alexander Warg, 2017
www.kernkonzept.com Advanced C++ Topics Alexander Warg, 2017 M I C R O K E R N E L M A D E I N G E R M A N Y Overview WHAT IS BEHIND C++ Language Magics Object Life Time Object Memory Layout INTRODUCTION
More informationSequential Containers. Ali Malik
Sequential Containers Ali Malik malikali@stanford.edu Game Plan Recap Overview of STL Sequence Containers std::vector std::deque Container Adapters Announcements Recap getline vs >> Bug favnum = fullname
More informationObject oriented programming. Encapsulation. Polymorphism. Inheritance OOP
OOP Object oriented programming Polymorphism Encapsulation Inheritance OOP Class concepts Classes can contain: Constants Delegates Events Fields Constructors Destructors Properties Methods Nested classes
More informationA Standard flat_map. 1 Revisions. 2 Introduction. 3 Motivation and Scope. 1.1 Changes from R Changes from R0
A Standard flat_map Document Number: P0429R2 Date: 2016-08-31 Reply to: Zach Laine whatwasthataddress@gmail.com Audience: LWG/LEWG 1 Revisions 1.1 Changes from R1 Add deduction guides. Change value_type
More informationCSCI 104 Templates. Mark Redekopp David Kempe
1 CSCI 104 Templates Mark Redekopp David Kempe 2 Overview C++ Templates allow alternate versions of the same code to be generated for various data types FUNCTION TEMPLATES 3 4 How To's Example reproduced
More informationCS 485 Advanced Object Oriented Design C++ Lambda, Function Objects, Brace Initializers constexpr, Move Constructors/Rvalue references.
CS 485 Advanced Object Oriented Design C++ Lambda, Function Objects, Brace Initializers constexpr, Move Constructors/Rvalue references Spring 2017 Meyers 7,15, 31-34 Reading Inline Functions Declare function
More informationException Safety. CS 311 Data Structures and Algorithms Lecture Slides Wednesday, October 28, Glenn G. Chappell. continued
continued CS 311 Data Structures and Algorithms Lecture Slides Wednesday, October 28, 2009 Glenn G. Chappell Department of Computer Science University of Alaska Fairbanks CHAPPELLG@member.ams.org 2005
More informationADT Unsorted List. Outline
Chapter 3 ADT Unsorted List Fall 2017 Yanjun Li CS2200 1 Outline Abstract Data Type Unsorted List Array-based Implementation Linked Implementation Comparison Fall 2017 Yanjun Li CS2200 2 struct NodeType
More informationDetermine a word is a palindrome? bool ispalindrome(string word, int front, int back) { Search if a number is in an array
Recursion review Thinking recursion: if I know the solution of the problem of size N-, can I use that to solve the problem of size N. Writing recursive routines: Decide the prototype Can formulate both
More informationProgramming in C ++ Prof. Partha Pratim Das Department of Computer Science and Engineering Indian Institute of Technology, Kharagpur
Programming in C ++ Prof. Partha Pratim Das Department of Computer Science and Engineering Indian Institute of Technology, Kharagpur Lecture 27 Copy Constructor and Copy Assignment Operator (Contd.) Welcome
More informationContainers: Stack. The Stack ADT. The Stack ADT. The Stack ADT
Containers: Stack The Stack ADT A stack is a list of objects in which insertions and deletions can only be performed at the top of the list. Also known as LIFO Last In, First Out) push insert an element
More informationContainers: Stack. Jordi Cortadella and Jordi Petit Department of Computer Science
Containers: Stack Jordi Cortadella and Jordi Petit Department of Computer Science The Stack ADT A stack is a list of objects in which insertions and deletions can only be performed at the top of the list.
More informationOverload Resolution. Ansel Sermersheim & Barbara Geller ACCU / C++ June 2018
Ansel Sermersheim & Barbara Geller ACCU / C++ June 2018 1 Introduction Definition of Function Overloading Determining which Overload to call How Overload Resolution Works Standard Conversion Sequences
More informationExposing Uninitialized Variables: Strengthening and Extending Run-Time Checks in Ada
Exposing Uninitialized Variables: Strengthening and Extending Run-Time Checks in Ada Uninitialized Variables Common cause of bugs that are difficult to find Often lead to unpredictable behavior May show
More informationCIS 190: C/C++ Programming. Classes in C++
CIS 190: C/C++ Programming Classes in C++ Outline Header Protection Functions in C++ Procedural Programming vs OOP Classes Access Constructors Headers in C++ done same way as in C including user.h files:
More informationOutline. User-dened types Categories. Constructors. Constructors. 4. Classes. Concrete classes. Default constructor. Default constructor
Outline EDAF50 C++ Programming 4. Classes Sven Gestegård Robertz Computer Science, LTH 2018 1 Classes the pointer this const for objects and members Copying objects friend inline 4. Classes 2/1 User-dened
More informationCS11 Intro C++ Spring 2018 Lecture 2
CS11 Intro C++ Spring 2018 Lecture 2 C++ Compilation You type: g++ -Wall -Werror units.cpp convert.cpp -o convert What happens? C++ compilation is a multi-step process: Preprocessing Compilation Linking
More informationC++ for numerical computing - part 2
C++ for numerical computing - part 2 Rupert Nash r.nash@epcc.ed.ac.uk 1 / 36 Recap 2 / 36 Iterators std::vector data = GetData(n); // C style iteration - fully explicit for (auto i=0; i!= n; ++i)
More informationOBJECT ORIENTED PROGRAMMING USING C++ CSCI Object Oriented Analysis and Design By Manali Torpe
OBJECT ORIENTED PROGRAMMING USING C++ CSCI 5448- Object Oriented Analysis and Design By Manali Torpe Fundamentals of OOP Class Object Encapsulation Abstraction Inheritance Polymorphism Reusability C++
More informationHardening the C++ Standard Template Library
Hardening the C++ Standard Template Library Marshall Clow Qualcomm Euro LLVM, April 17, 2018 Marshall Clow (Qualcomm) Hardening the C++ Standard Template Library Euro LLVM, April 17, 2018 1 / 16 About
More informationItem 18: Implement the Standard Dispose Pattern
Item 18: Implement the Standard Dispose Pattern 1 Item 18: Implement the Standard Dispose Pattern We ve discussed the importance of disposing of objects that hold unmanaged resources. Now it s time to
More informationException Safe Coding
Exception Safe Coding Dirk Hutter hutter@compeng.uni-frankfurt.de Prof. Dr. Volker Lindenstruth FIAS Frankfurt Institute for Advanced Studies Goethe-Universität Frankfurt am Main, Germany http://compeng.uni-frankfurt.de
More informationOperator Overloading and Templates. Linear Search. Linear Search in C++ second attempt. Linear Search in C++ first attempt
Operator Overloading and Templates Week 6 Gaddis: 8.1, 14.5, 16.2-16.4 CS 5301 Fall 2015 Jill Seaman Linear Search! Search: find a given target item in an array, return the index of the item, or -1 if
More informationCopy Constructors & Destructors
Copy Constructors & Destructors 2-07-2013 Implementing a vector class local functions implicit constructors Destructors Copy Constructors Project #1: MiniMusicPlayer Quiz today 2/7/13 vectors and reading
More informationG52CPP C++ Programming Lecture 13
G52CPP C++ Programming Lecture 13 Dr Jason Atkin http://www.cs.nott.ac.uk/~jaa/cpp/ g52cpp.html 1 Last lecture Function pointers Arrays of function pointers Virtual and non-virtual functions vtable and
More informationInstantiation of Template class
Class Templates Templates are like advanced macros. They are useful for building new classes that depend on already existing user defined classes or built-in types. Example: stack of int or stack of double
More informationPairing off iterators
Pairing off iterators Anthony Williams 8th May 2002 1 Introduction Recently, a colleague approached me with an interesting problem; he had two containers with corresponding elements, so the n-th entry
More informationA Standard flat_set. This paper outlines what a (mostly) API-compatible, non-node-based set might look like.
A Standard flat_set Document Number: P1222R0 Date: 2018-10-02 Reply to: Zach Laine whatwasthataddress@gmail.com Audience: LEWG 1 Introduction This paper outlines what a (mostly) API-compatible, non-node-based
More informationAdd shift to <algorithm>
Document number: P0769R1 Date: 2018, Feb. 5 Author: Dan Raviv Audience: LWG I. Introduction Add shift to This paper proposes adding shift algorithms to the C++ STL which
More informationCOMP6771 Advanced C++ Programming
1.... COMP6771 Advanced C++ Programming Week 5 Part One: Exception Handling 2016 www.cse.unsw.edu.au/ cs6771 2.... Memory Management & Exception Handling.1 Part I: Exception Handling Exception objects
More informationC++ Constructor Insanity
C++ Constructor Insanity CSE 333 Spring 2018 Instructor: Justin Hsia Teaching Assistants: Danny Allen Dennis Shao Eddie Huang Kevin Bi Jack Xu Matthew Neldam Michael Poulain Renshu Gu Robby Marver Waylon
More informationMove semantics. Zoltán Porkoláb: C++11/14 1
Move semantics Pointers and arrays References Value vs move semantics Right value references Move semantics in C++11 Perfect forwarding Traps and pitfalls Zoltán Porkoláb: C++11/14 1 Arrays An array is
More informationCS 215 Fundamentals of Programming II Spring 2018 Project 5
CS 215 Fundamentals of Programming II Spring 2018 Project 5 30 points Out: March 23, 2018 Due: April 9, 2018 (Monday) As explained in Project 3, a line editor is a text editor that operates on lines of
More informationnptr = new int; // assigns valid address_of_int value to nptr std::cin >> n; // assigns valid int value to n
Static and Dynamic Memory Allocation In this chapter we review the concepts of array and pointer and the use of the bracket operator for both arrays and pointers. We also review (or introduce) pointer
More informationThe C++ Programming Language, Core Working Group. Title: Unary Folds and Empty Parameter Packs (revision 1)
1 Document number: P0036 Date: 2015-09-10 Project: The C++ Programming Language, Core Working Group Title: Unary Folds and Empty Parameter Packs (revision 1) Revises: N4358 Reply-to: Thibaut Le Jehan lejehan.thibaut@gmail.com
More informationCSCI 104 Templates. Mark Redekopp David Kempe
CSCI 104 Templates Mark Redekopp David Kempe Overview C++ Templates allow alternate versions of the same code to be generated for various data types 2 FUNCTION TEMPLATES 3 How To's Example reproduced from:
More informationC The new standard
C++11 - The new standard Lars Kühne Institut für Informatik Lehrstuhl für theoretische Informatik II Friedrich-Schiller-Universität Jena January 16, 2013 Overview A little bit of history: C++ was initially
More informationVariant: a type-safe union without undefined behavior (v2).
Variant: a type-safe union without undefined behavior (v2). P0087R0, ISO/IEC JTC1 SC22 WG21 Axel Naumann (axel@cern.ch), 2015-09-28 Contents Introduction 3 Version control 4 Discussion 4 Empty state and
More informationPatterns: Working with Arrays
Steven Zeil October 14, 2013 Outline 1 Static & Dynamic Allocation Static Allocation Dynamic Allocation 2 Partially Filled Arrays Adding Elements Searching for Elements Removing Elements 3 Arrays and Templates
More informationAmerican National Standards Institute Reply to: Josee Lajoie
Accredited Standards Committee X3 Information Processing Systems Operating under the procedures of American National Standards Institute Doc No: X3J16/95-0051 WG21/N0651 Date: March 3, 1995 Page 1 of 15
More informationDefault arguments, documentation
, documentation Comp Sci 1570 Introduction to C++ Outline 1 2 to functions A default parameter (also called an optional parameter or a default argument) is a function parameter that has a default value
More informationC++ Coding Standards. 101 Rules, Guidelines, and Best Practices. Herb Sutter Andrei Alexandrescu. Boston. 'Y.'YAddison-Wesley
C++ Coding Standards 101 Rules, Guidelines, and Best Practices Herb Sutter Andrei Alexandrescu 'Y.'YAddison-Wesley Boston Contents Prefaee xi Organizational and Poliey Issues 1 o. Don't sweat the small
More informationOverview of C Feabhas Ltd 2012
1 2 Copying objects may not be the best solution in many situations. In such cases we typically just want to transfer data from one object to another, rather than make an (expensive, and then discarded)
More informationSequential Containers. Ali Malik
Sequential Containers Ali Malik malikali@stanford.edu Game Plan Recap Stream wrapup Overview of STL Sequence Containers std::vector std::deque Container Adapters Announcements Recap stringstream Sometimes
More informationConstraining unique_ptr
Constraining unique_ptr Document: N2853=09-0043 Date: 2009-03-20 Reply to: Alisdair Meredith public@alisdairm.net Introduction Unique_ptr is a new class template introduced in C++0x to simplify the use
More informationEngineering Robust Server Software
Engineering Robust Server Software Exceptions Exceptions Handling problems: exceptions C++ Java temp-and-swap RAII Smart Pointers finally specifications finalizers (and why they are not what you need for
More informationCS250 Final Review Questions
CS250 Final Review Questions The following is a list of review questions that you can use to study for the final. I would first make sure that you review all previous exams and make sure you fully understand
More informationCS558 Programming Languages
CS558 Programming Languages Fall 2017 Lecture 3a Andrew Tolmach Portland State University 1994-2017 Binding, Scope, Storage Part of being a high-level language is letting the programmer name things: variables
More informationstd::optional from Scratch
std::optional from Scratch https://wg21.link/n4606 http://en.cppreference.com/w/cpp/utility/optional http://codereview.stackexchange.com/questions/127498/an-optionalt-implementation An optional object
More information