C++ Primer, Fifth Edition
• There is at least one argument for which the match is better than the match
provided by any other viable function
If after looking at each argument there is no single function that is preferable, then
the call is in error. The compiler will complain that the call is ambiguous.
In this call, when we look only at the first argument, we find that the function
f(int, int) is an exact match. To match the second function, the int argument
42 must be converted to double. A match through a built-in conversion is “less
good” than one that is exact. Considering only the first argument, f(int, int) is a
better match than f(double, double).
When we look at the second argument, f(double, double) is an exact match to
the argument 2.56. Calling f(int, int) would require that 2.56 be converted
from double to int. When we consider only the second parameter, the function
f(double, double) is a better match.
The compiler will reject this call because it is ambiguous: Each viable function is a
better match than the other on one of the arguments to the call. It might be tempting
to force a match by explicitly casting (§ 4.11.3, p. 162) one of our arguments.
However, in well-designed systems, argument casts should not be necessary.
Best Practices
Casts should not be needed to call an overloaded function. The need for a
cast suggests that the parameter sets are designed poorly.
Exercises Section 6.6
Exercise 6.49: What is a candidate function? What is a viable function?
Exercise 6.50: Given the declarations for f from page 242, list the viable
functions, if any for each of the following calls. Indicate which function is the
best match, or if the call is illegal whether there is no match or why the call
is ambiguous.
(a) f(2.56, 42)
(b) f(42)
(c) f(42, 0)
(d) f(2.56, 3.14)
Exercise 6.51: Write all four versions of f. Each function should print a
distinguishing message. Check your answers for the previous exercise. If your
answers were incorrect, study this section until you understand why your
answers were wrong.
www.it-ebooks.info
Convert pdf pages into powerpoint slides - C# Create PDF from PowerPoint Library to convert pptx, ppt to PDF in C#.net, ASP.NET MVC, WinForms, WPF
Online C# Tutorial for Creating PDF from Microsoft PowerPoint Presentation
how to add pdf to powerpoint presentation; convert pdf to powerpoint online
Convert pdf pages into powerpoint slides - VB.NET Create PDF from PowerPoint Library to convert pptx, ppt to PDF in vb.net, ASP.NET MVC, WinForms, WPF
VB.NET Tutorial for Export PDF file from Microsoft Office PowerPoint
how to change pdf file to powerpoint; convert pdf to ppt online without email
C++ Primer, Fifth Edition
6.6.1. Argument Type Conversions
In order to determine the best match, the compiler ranks the conversions that could
be used to convert each argument to the type of its corresponding parameter.
Conversions are ranked as follows:
1. An exact match. An exact match happens when:
• The argument and parameter types are identical.
• The argument is converted from an array or function type to the corresponding
pointer type. (§ 6.7 (p. 247) covers function pointers.)
• A top-level const is added to or discarded from the argument.
2. Match through a const conversion (§ 4.11.2, p. 162).
3. Match through a promotion (§ 4.11.1, p. 160).
4. Match through an arithmetic (§ 4.11.1, p. 159) or pointer conversion (§ 4.11.2,
p. 161).
5. Match through a class-type conversion. (§ 14.9 (p. 579) covers these
conversions.)
Matches Requiring Promotion or Arithmetic Conversion
Warning
Promotions and conversions among the built-in types can yield surprising
results in the context of function matching. Fortunately, well-designed
systems rarely include functions with parameters as closely related as those
in the following examples.
In order to analyze a call, it is important to remember that the small integral types
always promote to int or to a larger integral type. Given two functions, one of which
takes an int and the other a short, the short version will be called only on values
of type short. Even though the smaller integral values might appear to be a closer
match, those values are promoted to int, whereas calling the short version would
require a conversion:
Click here to view code image
void ff(int);
void ff(short);
www.it-ebooks.info
C# PowerPoint - How to Process PowerPoint
NET PowerPoint control, developers are able to split a PowerPoint into two or It enables you to move out useless PowerPoint document pages simply with
convert pdf to powerpoint slide; export pdf into powerpoint
VB.NET PowerPoint: Process & Manipulate PPT (.pptx) Slide(s)
split one PPT (.pptx) document file into smaller sub library SDK, this VB.NET PowerPoint processing control & profession imaging controls, PDF document, image
how to add pdf to powerpoint; how to convert pdf to powerpoint in
C++ Primer, Fifth Edition
ff('a');   // char promotes to int; calls f(int)
All the arithmetic conversions are treated as equivalent to each other. The
conversion from int to unsigned int, for example, does not take precedence over
the conversion from int to double. As a concrete example, consider
Click here to view code image
void manip(long);
void manip(float);
manip(3.14); // error: ambiguous call
The literal 3.14 is a double. That type can be converted to either long or float.
Because there are two possible arithmetic conversions, the call is ambiguous.
Function Matching and 
const
Arguments
When we call an overloaded function that differs on whether a reference or pointer
parameter refers or points to const, the compiler uses the constness of the
argument to decide which function to call:
Click here to view code image
Record lookup(Account&);       // function that takes a reference to
Account
Record lookup(const Account&); // new function that takes a const
reference
const Account a;
Account b;
lookup(a);   // calls lookup(const Account&)
lookup(b);   // calls lookup(Account&)
In the first call, we pass the const object a. We cannot bind a plain reference to a
const object. In this case the only viable function is the version that takes a
reference to const. Moreover, that call is an exact match to the argument a.
In the second call, we pass the nonconst object b. For this call, both functions are
viable. We can use b to initialize a reference to either const or nonconst type.
However, initializing a reference to const from a nonconst object requires a
conversion. The version that takes a nonconst parameter is an exact match for b.
Hence, the nonconst version is preferred.
Pointer parameters work in a similar way. If two functions differ only as to whether
a pointer parameter points to const or nonconst, the compiler can distinguish which
function to call based on the constness of the argument: If the argument is a pointer
to const, the call will match the function that takes a const*; otherwise, if the
argument is a pointer to nonconst, the function taking a plain pointer is called.
www.it-ebooks.info
VB.NET PowerPoint: Merge and Split PowerPoint Document(s) with PPT
one of the split PPT document will contain slides/pages 1-4 &ltsummary> ''' Split a document into 2 sub Note: If you want to see more PDF processing functions in
convert pdf into ppt; convert pdf to editable ppt online
VB.NET PowerPoint: Extract & Collect PPT Slide(s) Using VB Sample
and you want to combine these extracted slides into a new of document 1 and some pages of document powerful & profession imaging controls, PDF document, image
convert pdf file to powerpoint; convert pdf into powerpoint
C++ Primer, Fifth Edition
Exercises Section 6.6.1
Exercise 6.52: Given the following declarations,
void manip(int, int);
double dobj;
what is the rank (§ 6.6.1, p. 245) of each conversion in the following calls?
(a) manip('a', 'z');
(b) manip(55.4, dobj);
Exercise 6.53: Explain the effect of the second declaration in each one of
the following sets of declarations. Indicate which, if any, are illegal.
(a) int calc(int&, int&);
int calc(const int&, const int&);
(b) int calc(char*, char*);
int calc(const char*, const char*);
(c) int calc(char*, char*);
int calc(char* const, char* const);
6.7. Pointers to Functions
A function pointer is just that—a pointer that denotes a function rather than an
object. Like any other pointer, a function pointer points to a particular type. A
function’s type is determined by its return type and the types of its parameters. The
function’s name is not part of its type. For example:
Click here to view code image
// compares lengths of two strings
bool lengthCompare(const string &, const string &);
has type bool(const string&, const string&). To declare a pointer that can
point at this function, we declare a pointer in place of the function name:
Click here to view code image
// pf points to a function returning bool that takes two const string references
bool (*pf)(const string &, const string &);  // uninitialized
Starting from the name we are declaring, we see that pf is preceded by a *, so pf is
a pointer. To the right is a parameter list, which means that pf points to a function.
Looking left, we find that the type the function returns is bool. Thus, pf points to a
function that has two const string& parameters and returns bool.
www.it-ebooks.info
VB.NET PowerPoint: Sort and Reorder PowerPoint Slides by Using VB.
clip art or screenshot to PowerPoint document slide large amount of robust PPT slides/pages editing methods & profession imaging controls, PDF document, image
how to convert pdf to ppt using; adding pdf to powerpoint slide
VB.NET PowerPoint: Use PowerPoint SDK to Create, Load and Save PPT
guide for PPT document, we divide this page into three parts in VB.NET to create an empty PowerPoint file with or local file and get the exact PPT slides number;
convert pdf into powerpoint online; convert pdf to powerpoint using
C++ Primer, Fifth Edition
Note
The parentheses around *pf are necessary. If we omit the parentheses, then
we declare pf as a function that returns a pointer to bool:
Click here to view code image
// declares a function named pf that returns a bool*
bool *pf(const string &, const string &);
Using Function Pointers
When we use the name of a function as a value, the function is automatically
converted to a pointer. For example, we can assign the address of lengthCompare
to pf as follows:
Click here to view code image
pf = lengthCompare;  // pf now points to the function named lengthCompare
pf = &lengthCompare; // equivalent assignment: address-of operator is optional
Moreover, we can use a pointer to a function to call the function to which the
pointer points. We can do so directly—there is no need to dereference the pointer:
Click here to view code image
bool b1 = pf("hello", "goodbye");    // calls lengthCompare
bool b2 = (*pf)("hello", "goodbye"); // equivalent call
bool b3 = lengthCompare("hello", "goodbye"); // equivalent call
There is no conversion between pointers to one function type and pointers to
another function type. However, as usual, we can assign nullptr (§ 2.3.2, p. 53) or
a zero-valued integer constant expression to a function pointer to indicate that the
pointer does not point to any function:
Click here to view code image
string::size_type sumLength(const string&, const string&);
bool cstringCompare(const char*, const char*);
pf = 0;              // ok: pf points to no function
pf = sumLength;      // error: return type differs
pf = cstringCompare; // error: parameter types differ
pf = lengthCompare;  // ok: function and pointer types match exactly
Pointers to Overloaded Functions
www.it-ebooks.info
VB.NET PowerPoint: Convert & Render PPT into PDF Document
Using this VB.NET PowerPoint to PDF converting demo code below, you can easily convert all slides of source PowerPoint document into a multi-page PDF file.
online pdf converter to powerpoint; adding pdf to powerpoint
VB.NET PowerPoint: Add Image to PowerPoint Document Slide/Page
can separate a multi-page PPT document into 2, 4 How to Sort and Reorder PPT Document Pages. provide powerful & profession imaging controls, PDF document, tiff
convert pdf file to ppt online; conversion of pdf into ppt
C++ Primer, Fifth Edition
As usual, when we use an overloaded function, the context must make it clear which
version is being used. When we declare a pointer to an overloaded function
Click here to view code image
void ff(int*);
void ff(unsigned int);
void (*pf1)(unsigned int) = ff;  // pf1 points to ff(unsigned)
the compiler uses the type of the pointer to determine which overloaded function to
use. The type of the pointer must match one of the overloaded functions exactly:
Click here to view code image
void (*pf2)(int) = ff;    // error: no ff with a matching parameter list
double (*pf3)(int*) = ff; // error: return type of ff and pf3 don't match
Function Pointer Parameters
Just as with arrays (§ 6.2.4, p. 214), we cannot define parameters of function type
but can have a parameter that is a pointer to function. As with arrays, we can write a
parameter that looks like a function type, but it will be treated as a pointer:
Click here to view code image
// third parameter is a function type and is automatically treated as a pointer to function
void useBigger(const string &s1, const string &s2,
bool pf(const string &, const string &));
// equivalent declaration: explicitly define the parameter as a pointer to function
void useBigger(const string &s1, const string &s2,
bool (*pf)(const string &, const string &));
When we pass a function as an argument, we can do so directly. It will be
automatically converted to a pointer:
Click here to view code image
// automatically converts the function lengthCompare to a pointer to function
useBigger(s1, s2, lengthCompare);
As we’ve just seen in the declaration of useBigger, writing function pointer types
quickly gets tedious. Type aliases (§ 2.5.1, p. 67), along with decltype (§ 2.5.3, p.
70), let us simplify code that uses function pointers:
Click here to view code image
// Func and Func2 have function type
typedef bool Func(const string&, const string&);
typedef decltype(lengthCompare) Func2; // equivalent type
// FuncP and FuncP2 have pointer to function type
www.it-ebooks.info
C# PowerPoint: C# Codes to Combine & Split PowerPoint Documents
pages of document 1 and some pages of document &ltsummary> /// Split a document into 2 sub to provide powerful & profession imaging controls, PDF document, tiff
convert pdf to ppt; how to convert pdf into powerpoint on
VB.NET PowerPoint: Read, Edit and Process PPTX File
How to convert PowerPoint to PDF, render PowerPoint to SVG to read, create, annotate, view, convert and watermark NET PowerPoint reading control SDK into VB.NET
how to add pdf to powerpoint slide; converting pdf to ppt
C++ Primer, Fifth Edition
typedef bool(*FuncP)(const string&, const string&);
typedef decltype(lengthCompare) *FuncP2;  // equivalent type
Here we’ve used typedef to define our types. Both Func and Func2 are function
types, whereas FuncP and FuncP2 are pointer types. It is important to note that
decltype returns the function type; the automatic conversion to pointer is not done.
Because decltype returns a function type, if we want a pointer we must add the *
ourselves. We can redeclare useBigger using any of these types:
Click here to view code image
// equivalent declarations of useBigger using type aliases
void useBigger(const string&, const string&, Func);
void useBigger(const string&, const string&, FuncP2);
Both declarations declare the same function. In the first case, the compiler will
automatically convert the function type represented by Func to a pointer.
Returning a Pointer to Function
As with arrays (§ 6.3.3, p. 228), we can’t return a function type but can return a
pointer to a function type. Similarly, we must write the return type as a pointer type;
the compiler will not automatically treat a function return type as the corresponding
pointer type. Also as with array returns, by far the easiest way to declare a function
that returns a pointer to function is by using a type alias:
Click here to view code image
using F = int(int*, int);     // F is a function type, not a pointer
using PF = int(*)(int*, int); // PF is a pointer type
Here we used type alias declarations (§ 2.5.1, p. 68) to define F as a function type
and PF as a pointer to function type. The thing to keep in mind is that, unlike what
happens to parameters that have function type, the return type is not automatically
converted to a pointer type. We must explicitly specify that the return type is a pointer
type:
Click here to view code image
PF f1(int); // ok: PF is a pointer to function; f1 returns a pointer to function
F f1(int);  // error: F is a function type; f1 can't return a function
F *f1(int); // ok: explicitly specify that the return type is a pointer to function
Of course, we can also declare f1 directly, which we’d do as
int (*f1(int))(int*, int);
Reading this declaration from the inside out, we see that f1 has a parameter list, so
f1 is a function. f1 is preceded by a * so f1 returns a pointer. The type of that
pointer itself has a parameter list, so the pointer points to a function. That function
returns an int.
www.it-ebooks.info
C++ Primer, Fifth Edition
For completeness, it’s worth noting that we can simplify declarations of functions
that return pointers to function by using a trailing return (§ 6.3.3, p. 229):
Click here to view code image
auto f1(int) -> int (*)(int*, int);
Using auto or decltype for Function Pointer Types
If we know which function(s) we want to return, we can use decltype to simplify
writing a function pointer return type. For example, assume we have two functions,
both of which return a string::size_type and have two const string&
parameters. We can write a third function that takes a string parameter and returns
a pointer to one of these two functions as follows:
Click here to view code image
string::size_type sumLength(const string&, const string&);
string::size_type largerLength(const string&, const string&);
// depending on the value of its string parameter,
// getFcn returns a pointer to sumLength or to largerLength
decltype(sumLength) *getFcn(const string &);
The only tricky part in declaring getFcn is to remember that when we apply
decltype to a function, it returns a function type, not a pointer to function type. We
must add a * to indicate that we are returning a pointer, not a function.
Exercises Section 6.7
Exercise 6.54: Write a declaration for a function that takes two int
parameters and returns an int, and declare a vector whose elements have
this function pointer type.
Exercise 6.55: Write four functions that add, subtract, multiply, and divide
two int values. Store pointers to these values in your vector from the
previous exercise.
Exercise 6.56: Call each element in the vector and print their result.
Chapter Summary
Functions are named units of computation and are essential to structuring even
modest programs. Every function has a return type, a name, a (possibly empty) list of
parameters, and a function body. The function body is a block that is executed when
the function is called. When a function is called, the arguments passed to the function
www.it-ebooks.info
C++ Primer, Fifth Edition
must be compatible with the types of the corresponding parameters.
In C++, functions may be overloaded: The same name may be used to define
different functions as long as the number or types of the parameters in the functions
differ. The compiler automatically figures out which function to call based on the
arguments in a call. The process of selecting the right function from a set of
overloaded functions is referred to as function matching.
Defined Terms
ambiguous call Compile-time error that results during function matching when
two or more functions provide an equally good match for a call.
arguments Values supplied in a function call that are used to initialize the
function’s parameters.
assert Preprocessor macro that takes a single expression, which it uses as a
condition. When the preprocessor variable NDEBUG is not defined, assert
evaluates the condition and, if the condition is false, writes a message and
terminates the program.
automatic objects Objects that exist only during the execution of a function.
They are created when control passes through their definition and are destroyed
at the end of the block in which they are defined.
best match Function selected from a set of overloaded functions for a call. If a
best match exists, the selected function is a better match than all the other viable
candidates for at least one argument in the call and is no worse on the rest of
the arguments.
call by reference See pass by reference.
call by value See pass by value.
candidate functions Set of functions that are considered when resolving a
function call. The candidate functions are all the functions with the name used in
the call for which a declaration is in scope at the time of the call.
constexpr Function that may return a constant expression. A constexpr
function is implicitly inline.
default argument Value specified to be used when an argument is omitted in a
call to the function.
executable file File, which the operating system executes, that contains code
corresponding to our program.
function Callable unit of computation.
www.it-ebooks.info
C++ Primer, Fifth Edition
function body Block that defines the actions of a function.
function matching Compiler process by which a call to an overloaded function is
resolved. Arguments used in the call are compared to the parameter list of each
overloaded function.
function prototype Function declaration, consisting of the name, return type,
and parameter types of a function. To call a function, its prototype must have
been declared before the point of call.
hidden names Names declared inside a scope hide previously declared entities
with the same names declared outside that scope.
initializer_list Library class that represents a comma-separated list of objects of
a single type enclosed inside curly braces.
inline function Request to the compiler to expand a function at the point of call,
if possible. Inline functions avoid the normal function-calling overhead.
link Compilation step in which multiple object files are put together to form an
executable program.
local static objects Local objects whose value persists across calls to the
function. Local static objects that are created and initialized before control
reaches their use and are destroyed when the program ends.
local variables Variables defined inside a block.
no match Compile-time error that results during function matching when there is
no function with parameters that match the arguments in a given call.
object code Format into which the compiler transforms our source code.
object file File holding object code generated by the compiler from a given
source file. An executable file is generated from one or more object files after the
files are linked together.
object lifetime Every object has an associated lifetime. Nonstatic objects that
are defined inside a block exist from when their definition is encountered until the
end of the block in which they are defined. Global objects are created during
program startup. Local static objects are created before the first time execution
passes through the object’s definition. Global objects and local static objects
are destroyed when the main function ends.
overload resolution See function matching.
overloaded function Function that has the same name as at least one other
function. Overloaded functions must differ in the number or type of their
parameters.
www.it-ebooks.info
Documents you may be interested
Documents you may be interested