File: conversion.html

package info (click to toggle)
cppreference-doc 20170409-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 259,868 kB
  • sloc: xml: 570,184; python: 1,923; php: 520; makefile: 167; sh: 25; cpp: 9; ansic: 9
file content (689 lines) | stat: -rw-r--r-- 87,136 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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
<!DOCTYPE html>
<html lang="en" dir="ltr" class="client-nojs">
<head>
<title>Implicit conversions - cppreference.com</title>
<meta charset="UTF-8" />
<meta name="generator" content="MediaWiki 1.21.2" />
<link rel="alternate" type="application/x-wiki" title="Edit" href="http://en.cppreference.com/mwiki/index.php?title=c/language/conversion&amp;action=edit" />
<link rel="edit" title="Edit" href="http://en.cppreference.com/mwiki/index.php?title=c/language/conversion&amp;action=edit" />
<link rel="shortcut icon" href="../../../favicon.ico" />
<link rel="search" type="application/opensearchdescription+xml" href="../../../mwiki/opensearch_desc.php" title="cppreference.com (en)" />
<link rel="EditURI" type="application/rsd+xml" href="http://en.cppreference.com/mwiki/api.php?action=rsd" />
<link rel="alternate" type="application/atom+xml" title="cppreference.com Atom feed" href="http://en.cppreference.com/mwiki/index.php?title=Special:RecentChanges&amp;feed=atom" />
<link rel="stylesheet" href="../../../mwiki/load.php%3Fdebug=false&amp;lang=en&amp;modules=ext.gadget.ColiruCompiler%257Cext.rtlcite%257Cmediawiki.legacy.commonPrint%252Cshared%257Cskins.cppreference2&amp;only=styles&amp;skin=cppreference2&amp;*.css" />
<meta name="ResourceLoaderDynamicStyles" content="" />
<link rel="stylesheet" href="../../../mwiki/load.php%3Fdebug=false&amp;lang=en&amp;modules=site&amp;only=styles&amp;skin=cppreference2&amp;*.css" />
<style>a:lang(ar),a:lang(ckb),a:lang(fa),a:lang(kk-arab),a:lang(mzn),a:lang(ps),a:lang(ur){text-decoration:none}#toc{display:none}.editsection{display:none}
/* cache key: mwiki1-mwiki_en_:resourceloader:filter:minify-css:7:472787eddcf4605d11de8c7ef047234f */</style>

<script src="../../../mwiki/load.php%3Fdebug=false&amp;lang=en&amp;modules=startup&amp;only=scripts&amp;skin=cppreference2&amp;*"></script>
<script>if(window.mw){
mw.config.set({"wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"c/language/conversion","wgTitle":"c/language/conversion","wgCurRevisionId":85297,"wgArticleId":13920,"wgIsArticle":true,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Todo with reason"],"wgBreakFrames":false,"wgPageContentLanguage":"en","wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgMonthNamesShort":["","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"wgRelevantPageName":"c/language/conversion","wgRestrictionEdit":[],"wgRestrictionMove":[]});
}</script><script>if(window.mw){
mw.loader.implement("user.options",function(){mw.user.options.set({"ccmeonemails":0,"cols":80,"date":"default","diffonly":0,"disablemail":0,"disablesuggest":0,"editfont":"default","editondblclick":0,"editsection":0,"editsectiononrightclick":0,"enotifminoredits":0,"enotifrevealaddr":0,"enotifusertalkpages":1,"enotifwatchlistpages":0,"extendwatchlist":0,"externaldiff":0,"externaleditor":0,"fancysig":0,"forceeditsummary":0,"gender":"unknown","hideminor":0,"hidepatrolled":0,"imagesize":2,"justify":0,"math":1,"minordefault":0,"newpageshidepatrolled":0,"nocache":0,"noconvertlink":0,"norollbackdiff":0,"numberheadings":0,"previewonfirst":0,"previewontop":1,"quickbar":5,"rcdays":7,"rclimit":50,"rememberpassword":0,"rows":25,"searchlimit":20,"showhiddencats":0,"showjumplinks":1,"shownumberswatching":1,"showtoc":0,"showtoolbar":1,"skin":"cppreference2","stubthreshold":0,"thumbsize":2,"underline":2,"uselivepreview":0,"usenewrc":0,"watchcreations":0,"watchdefault":0,"watchdeletion":0,
"watchlistdays":3,"watchlisthideanons":0,"watchlisthidebots":0,"watchlisthideliu":0,"watchlisthideminor":0,"watchlisthideown":0,"watchlisthidepatrolled":0,"watchmoves":0,"wllimit":250,"variant":"en","language":"en","searchNs0":true,"searchNs1":false,"searchNs2":false,"searchNs3":false,"searchNs4":false,"searchNs5":false,"searchNs6":false,"searchNs7":false,"searchNs8":false,"searchNs9":false,"searchNs10":false,"searchNs11":false,"searchNs12":false,"searchNs13":false,"searchNs14":false,"searchNs15":false,"gadget-ColiruCompiler":1});;},{},{});mw.loader.implement("user.tokens",function(){mw.user.tokens.set({"editToken":"+\\","patrolToken":false,"watchToken":false});;},{},{});
/* cache key: mwiki1-mwiki_en_:resourceloader:filter:minify-js:7:ca03345b1e2c4d90a25d968753a73b92 */
}</script>
<script>if(window.mw){
mw.loader.load(["mediawiki.page.startup","mediawiki.legacy.wikibits","mediawiki.legacy.ajax"]);
}</script>
<style type="text/css">/*<![CDATA[*/
.source-c {line-height: normal;}
.source-c li, .source-c pre {
	line-height: normal; border: 0px none white;
}
/**
 * GeSHi Dynamically Generated Stylesheet
 * --------------------------------------
 * Dynamically generated stylesheet for c
 * CSS class: source-c, CSS id: 
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 * --------------------------------------
 */
.c.source-c .de1, .c.source-c .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;}
.c.source-c  {font-family:monospace;}
.c.source-c .imp {font-weight: bold; color: red;}
.c.source-c li, .c.source-c .li1 {font-weight: normal; vertical-align:top;}
.c.source-c .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}
.c.source-c .li2 {font-weight: bold; vertical-align:top;}
.c.source-c .kw1 {color: #0000dd;}
.c.source-c .kw2 {color: #0000ff;}
.c.source-c .kw3 {color: #0000dd;}
.c.source-c .kw4 {color: #0000ff;}
.c.source-c .co1 {color: #909090;}
.c.source-c .co2 {color: #339900;}
.c.source-c .coMULTI {color: #ff0000; font-style: italic;}
.c.source-c .es0 {color: #008000; font-weight: bold;}
.c.source-c .es1 {color: #008000; font-weight: bold;}
.c.source-c .es2 {color: #008000; font-weight: bold;}
.c.source-c .es3 {color: #008000; font-weight: bold;}
.c.source-c .es4 {color: #008000; font-weight: bold;}
.c.source-c .es5 {color: #008000; font-weight: bold;}
.c.source-c .br0 {color: #008000;}
.c.source-c .sy0 {color: #008000;}
.c.source-c .sy1 {color: #000080;}
.c.source-c .sy2 {color: #000040;}
.c.source-c .sy3 {color: #000040;}
.c.source-c .sy4 {color: #008080;}
.c.source-c .st0 {color: #008000;}
.c.source-c .nu0 {color: #000080;}
.c.source-c .nu6 {color:#000080;}
.c.source-c .nu8 {color:#000080;}
.c.source-c .nu12 {color:#000080;}
.c.source-c .nu16 {color:#000080;}
.c.source-c .nu17 {color:#000080;}
.c.source-c .nu18 {color:#000080;}
.c.source-c .nu19 {color:#000080;}
.c.source-c .ln-xtra, .c.source-c li.ln-xtra, .c.source-c div.ln-xtra {background-color: #ffc;}
.c.source-c span.xtra { display:block; }

/*]]>*/
</style><!--[if lt IE 7]><style type="text/css">body{behavior:url("/mwiki/skins/cppreference2/csshover.min.htc")}</style><![endif]--></head>
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-c_language_conversion skin-cppreference2 action-view cpp-navbar">
        <!-- header -->
        <div id="mw-head" class="noprint">
            <div id="cpp-head-first-base">
                <div id="cpp-head-first">
                    <h5><a href="../../../index.html">
                        cppreference.com                        </a></h5>
                    <div id="cpp-head-search">
                        
<!-- 0 -->
<div id="p-search">
	<h5><label for="searchInput">Search</label></h5>
	<form action="http://en.cppreference.com/mwiki/index.php" id="searchform">
		<input type='hidden' name="title" value="Special:Search"/>
				<div id="simpleSearch">
						<input name="search" title="Search cppreference.com [f]" accesskey="f" id="searchInput" />						<button type="submit" name="button" title="Search the pages for this text" id="searchButton"><img src="../../../mwiki/skins/cppreference2/images/search-ltr.png%3F303" alt="Search" /></button>					</div>
			</form>
</div>

<!-- /0 -->
                    </div>
                    <div id="cpp-head-personal">
                        
<!-- 0 -->
<div id="p-personal" class="">
<span id="pt-createaccount"><a href="http://en.cppreference.com/mwiki/index.php?title=Special:UserLogin&amp;returnto=c%2Flanguage%2Fconversion&amp;type=signup">Create account</a></span>	<div class="menu">
        <ul>
<li id="pt-login"><a href="http://en.cppreference.com/mwiki/index.php?title=Special:UserLogin&amp;returnto=c%2Flanguage%2Fconversion" title="You are encouraged to log in; however, it is not mandatory [o]" accesskey="o">Log in</a></li>        </ul>
    </div>
</div>

<!-- /0 -->
                    </div>

                </div>
            </div>
            <div id="cpp-head-second-base">
                <div id="cpp-head-second">
                    <div id="cpp-head-tools-left">
                        
<!-- 0 -->
<div id="p-namespaces" class="vectorTabs">
	<h5>Namespaces</h5>
	<ul>
					<li  id="ca-nstab-main" class="selected"><span><a href="conversion.html"  title="View the content page [c]" accesskey="c">Page</a></span></li>
					<li  id="ca-talk"><span><a href="http://en.cppreference.com/w/Talk:c/language/conversion"  title="Discussion about the content page [t]" accesskey="t">Discussion</a></span></li>
			</ul>
</div>

<!-- /0 -->

<!-- 1 -->
<div id="p-variants" class="vectorMenu emptyPortlet">
		<h5><span>Variants</span><a href="conversion.html#"></a></h5>
	<div class="menu">
		<ul>
					</ul>
	</div>
</div>

<!-- /1 -->
                    </div>
                    <div id="cpp-head-tools-right">
                        
<!-- 0 -->
<div id="p-views" class="vectorTabs">
	<h5>Views</h5>
	<ul>
					<li id="ca-view" class="selected"><span><a href="conversion.html" >View</a></span></li>
					<li id="ca-edit"><span><a href="http://en.cppreference.com/mwiki/index.php?title=c/language/conversion&amp;action=edit"  title="You can edit this page. Please use the preview button before saving [e]" accesskey="e">Edit</a></span></li>
					<li id="ca-history" class="collapsible"><span><a href="http://en.cppreference.com/mwiki/index.php?title=c/language/conversion&amp;action=history"  title="Past revisions of this page [h]" accesskey="h">History</a></span></li>
			</ul>
</div>

<!-- /0 -->

<!-- 1 -->
<div id="p-cactions" class="vectorMenu emptyPortlet">
	<h5><span>Actions</span><a href="conversion.html#"></a></h5>
	<div class="menu">
		<ul>
					</ul>
	</div>
</div>

<!-- /1 -->
                    </div>
                </div>
            </div>
        </div>
        <!-- /header -->
        <!-- content -->
        <div id="cpp-content-base">
            <div id="content">
                <a id="top"></a>
                <div id="mw-js-message" style="display:none;"></div>
                                <!-- firstHeading -->
                <h1 id="firstHeading" class="firstHeading">Implicit conversions</h1>
                <!-- /firstHeading -->
                <!-- bodyContent -->
                <div id="bodyContent">
                                        <!-- tagline -->
                    <div id="siteSub">From cppreference.com</div>
                    <!-- /tagline -->
                                        <!-- subtitle -->
                    <div id="contentSub"><span class="subpages">&lt; <a href="../../c.html" title="c">c</a>&lrm; | <a href="../language.1.html" title="c/language">language</a></span></div>
                    <!-- /subtitle -->
                                                            <!-- bodycontent -->
                    <div id="mw-content-text" lang="en" dir="ltr" class="mw-content-ltr"><div class="t-navbar" style=""><div class="t-navbar-sep">&#160;</div><div class="t-navbar-head"><a href="../../c.html" title="c"> C</a><div class="t-navbar-menu"><div><div><table class="t-nv-begin" cellpadding="0" style="line-height:1.1em;">
<tr class="t-nv"><td colspan="5"> <a href="../language.1.html" title="c/language"> Language</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../header.html" title="c/header"> headers</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../types.html" title="c/types"> Type support</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../memory.html" title="c/memory"> Dynamic memory management</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../error.html" title="c/error"> Error handling</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../program.html" title="c/program"> Program utilities</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../variadic.html" title="c/variadic"> Variadic function support</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../chrono.html" title="c/chrono"> Date and time utilities</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../string.html" title="c/string"> Strings library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../algorithm.html" title="c/algorithm"> Algorithms</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../numeric.html" title="c/numeric"> Numerics</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../io.html" title="c/io"> Input/output support</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../locale.html" title="c/locale"> Localization support</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../thread.html" title="c/thread"> Thread support</a> <span class="t-mark-rev t-since-c11">(C11)</span> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../atomic.html" title="c/atomic"> Atomic operations</a> <span class="t-mark-rev t-since-c11">(C11)</span> </td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="../experimental.html" title="c/experimental"><span class="t-lines"><span>Technical Specifications</span></span></a></div></div></td></tr>
</table></div><div><span class="editsection noprint plainlinks" title="Edit this template"><a rel="nofollow" class="external text" href="http://en.cppreference.com/mwiki/index.php?title=Template:c/navbar_content&amp;action=edit">&#91;edit&#93;</a></span></div></div></div></div><div class="t-navbar-sep">&#160;</div><div class="t-navbar-head"><a href="../language.1.html" title="c/language"> C language</a><div class="t-navbar-menu"><div><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="ascii.html" title="c/language/ascii"><span class="t-lines"><span>ASCII chart</span></span></a></div></div></td></tr>
<tr class="t-nv-h2"><td colspan="5"> <a href="basic_concepts.html" title="c/language/basic concepts">Basic concepts</a></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="translation_phases.html" title="c/language/translation phases"><span class="t-lines"><span>translation phases</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="../comment.html" title="c/comment"><span class="t-lines"><span>comment</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="identifier.html" title="c/language/identifier"><span class="t-lines"><span>identifier</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="scope.html" title="c/language/scope"><span class="t-lines"><span>scope</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="lifetime.html" title="c/language/lifetime"><span class="t-lines"><span>lifetime</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="name_space.html" title="c/language/name space"><span class="t-lines"><span>name space</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="compatible_type.html" title="c/language/type"><span class="t-lines"><span>type</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="arithmetic_types.html" title="c/language/arithmetic types"><span class="t-lines"><span>arithmetic types</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="object.html" title="c/language/object"><span class="t-lines"><span>object</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="main_function.html" title="c/language/main function"><span class="t-lines"><span>main function</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="memory_model.html" title="c/language/memory model"><span class="t-lines"><span>memory model</span></span></a></div></div></td></tr>
<tr class="t-nv-h2"><td colspan="5"> <a href="../keyword.html" title="c/keyword"> Keywords</a></td></tr>
<tr class="t-nv-h2"><td colspan="5"> <a href="../preprocessor.html" title="c/preprocessor"> Preprocessor</a></td></tr>
<tr class="t-nv-h2"><td colspan="5"> <a href="statements.html" title="c/language/statements"> Statements</a></td></tr>
<tr class="t-nv-h2"><td colspan="5"> <a href="expressions.html" title="c/language/expressions"> Expressions</a></td></tr>
<tr class="t-nv-h2"><td colspan="5"> <a href="initialization.html" title="c/language/initialization"> Initialization</a></td></tr>
<tr class="t-nv-h2"><td colspan="5"> <a href="declarations.html" title="c/language/declarations"> Declarations</a></td></tr>
<tr class="t-nv-h2"><td colspan="5"> <a href="functions.html" title="c/language/functions"> Functions</a></td></tr>
<tr class="t-nv-h2"><td colspan="5"> Miscellaneous</td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="history.html" title="c/language/history"><span class="t-lines"><span>history of C</span></span></a></div></div></td></tr>
<tr class="t-nv-h2"><td colspan="5"> <a href="../experimental.html" title="c/experimental">Technical Specifications</a> </td></tr>
</table></div><div><span class="editsection noprint plainlinks" title="Edit this template"><a rel="nofollow" class="external text" href="http://en.cppreference.com/mwiki/index.php?title=Template:c/language/navbar_content&amp;action=edit">&#91;edit&#93;</a></span></div></div></div></div><div class="t-navbar-sep">&#160;</div><div class="t-navbar-head"><a href="expressions.html" title="c/language/expressions"> Expressions</a><div class="t-navbar-menu"><div><div style="display:inline-block">
<div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv-h2"><td colspan="5"> General </td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="value_category.html" title="c/language/value category"><span class="t-lines"><span>value category</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="eval_order.html" title="c/language/eval order"><span class="t-lines"><span>evaluation order and sequence points</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="constant_expression.html" title="c/language/constant expression"><span class="t-lines"><span>constant expressions</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><strong class="selflink"><span class="t-lines"><span>implicit conversions</span></span></strong></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="generic.html" title="c/language/generic"><span class="t-lines"><span>generic selection</span></span></a></div><div><span class="t-lines"><span><span class="t-mark-rev t-since-c11">(C11)</span></span></span></div></div></td></tr>
<tr class="t-nv-h2"><td colspan="5"> <a href="expressions.html#Constants_and_literals" title="c/language/expressions">constants and literals</a> </td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="integer_constant.html" title="c/language/integer constant"><span class="t-lines"><span>integer constant</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="floating_constant.html" title="c/language/floating constant"><span class="t-lines"><span>floating constant</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="character_constant.html" title="c/language/character constant"><span class="t-lines"><span>character constant</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="string_literal.html" title="c/language/string literal"><span class="t-lines"><span>string literal</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="compound_literal.html" title="c/language/compound literal"><span class="t-lines"><span>compound literal</span></span></a></div><div><span class="t-lines"><span><span class="t-mark-rev t-since-c99">(C99)</span></span></span></div></div></td></tr>
<tr class="t-nv-h2"><td colspan="5"> <a href="expressions.html#Operators" title="c/language/expressions">operators</a> </td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="operator_precedence.html" title="c/language/operator precedence"><span class="t-lines"><span>operator precedence</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="operator_member_access.html" title="c/language/operator member access"><span class="t-lines"><span>member access and indirection</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="operator_logical.html" title="c/language/operator logical"><span class="t-lines"><span>logical operators</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="operator_comparison.html" title="c/language/operator comparison"><span class="t-lines"><span>comparison operators</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="operator_arithmetic.html" title="c/language/operator arithmetic"><span class="t-lines"><span>arithmetic operators</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="operator_assignment.html" title="c/language/operator assignment"><span class="t-lines"><span>assignment operators</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="operator_incdec.html" title="c/language/operator incdec"><span class="t-lines"><span>increment and decrement</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="operator_other.html" title="c/language/operator other"><span class="t-lines"><span>function call, comma, conditional operator</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="sizeof.html" title="c/language/sizeof"><span class="t-lines"><span>sizeof</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="alignof.html" title="c/language/ Alignof"><span class="t-lines"><span>alignof</span></span></a></div><div><span class="t-lines"><span><span class="t-mark-rev t-since-c11">(C11)</span></span></span></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="cast.html" title="c/language/cast"><span class="t-lines"><span>cast operators</span></span></a></div></div></td></tr>
</table></div>
</div><div><span class="editsection noprint plainlinks" title="Edit this template"><a rel="nofollow" class="external text" href="http://en.cppreference.com/mwiki/index.php?title=Template:c/language/expressions/navbar_content&amp;action=edit">&#91;edit&#93;</a></span></div></div></div></div><div class="t-navbar-sep">&#160;</div></div>
<p>When an expression is used in the context where a value of a different type is expected, <i>conversion</i> may occur:
</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="c source-c"><pre class="de1"><span class="kw4">int</span> n <span class="sy1">=</span> <span class="nu0">1L</span><span class="sy4">;</span> <span class="co1">// expression 1L has type long, int is expected</span>
n <span class="sy1">=</span> <span class="nu16">2.1</span><span class="sy4">;</span> <span class="co1">// expression 2.1 has type double, int is expected</span>
<span class="kw4">char</span> <span class="sy2">*</span>p <span class="sy1">=</span> <a href="../memory/malloc.html"><span class="kw403">malloc</span></a><span class="br0">&#40;</span><span class="nu0">10</span><span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">// expression malloc(10) has type void*, char* is expected</span></pre></div></div>
<p>Conversions take place in the following situations:
</p>
<table id="toc" class="toc"><tr><td><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="conversion.html#Conversion_as_if_by_assignment"><span class="tocnumber">1</span> <span class="toctext">Conversion as if by assignment</span></a></li>
<li class="toclevel-1 tocsection-2"><a href="conversion.html#Default_argument_promotions"><span class="tocnumber">2</span> <span class="toctext">Default argument promotions</span></a></li>
<li class="toclevel-1 tocsection-3"><a href="conversion.html#Usual_arithmetic_conversions"><span class="tocnumber">3</span> <span class="toctext">Usual arithmetic conversions</span></a></li>
<li class="toclevel-1 tocsection-4"><a href="conversion.html#Value_transformations"><span class="tocnumber">4</span> <span class="toctext">Value transformations</span></a>
<ul>
<li class="toclevel-2 tocsection-5"><a href="conversion.html#Lvalue_conversion"><span class="tocnumber">4.1</span> <span class="toctext">Lvalue conversion</span></a></li>
<li class="toclevel-2 tocsection-6"><a href="conversion.html#Array_to_pointer_conversion"><span class="tocnumber">4.2</span> <span class="toctext">Array to pointer conversion</span></a></li>
<li class="toclevel-2 tocsection-7"><a href="conversion.html#Function_to_pointer_conversion"><span class="tocnumber">4.3</span> <span class="toctext">Function  to pointer conversion</span></a></li>
</ul>
</li>
<li class="toclevel-1 tocsection-8"><a href="conversion.html#Implicit_conversion_semantics"><span class="tocnumber">5</span> <span class="toctext">Implicit conversion semantics</span></a>
<ul>
<li class="toclevel-2 tocsection-9"><a href="conversion.html#Compatible_types"><span class="tocnumber">5.1</span> <span class="toctext">Compatible types</span></a></li>
<li class="toclevel-2 tocsection-10"><a href="conversion.html#Integer_promotions"><span class="tocnumber">5.2</span> <span class="toctext">Integer promotions</span></a></li>
<li class="toclevel-2 tocsection-11"><a href="conversion.html#Boolean_conversion"><span class="tocnumber">5.3</span> <span class="toctext">Boolean conversion</span></a></li>
<li class="toclevel-2 tocsection-12"><a href="conversion.html#Integer_conversions"><span class="tocnumber">5.4</span> <span class="toctext">Integer conversions</span></a></li>
<li class="toclevel-2 tocsection-13"><a href="conversion.html#Real_floating-integer_conversions"><span class="tocnumber">5.5</span> <span class="toctext">Real floating-integer conversions</span></a></li>
<li class="toclevel-2 tocsection-14"><a href="conversion.html#Real_floating_point_conversions"><span class="tocnumber">5.6</span> <span class="toctext">Real floating point conversions</span></a></li>
<li class="toclevel-2 tocsection-15"><a href="conversion.html#Complex_type_conversions"><span class="tocnumber">5.7</span> <span class="toctext">Complex type conversions</span></a></li>
<li class="toclevel-2 tocsection-16"><a href="conversion.html#Imaginary_type_conversions"><span class="tocnumber">5.8</span> <span class="toctext">Imaginary type conversions</span></a></li>
<li class="toclevel-2 tocsection-17"><a href="conversion.html#Real-complex_conversions"><span class="tocnumber">5.9</span> <span class="toctext">Real-complex conversions</span></a></li>
<li class="toclevel-2 tocsection-18"><a href="conversion.html#Real-imaginary_conversions"><span class="tocnumber">5.10</span> <span class="toctext">Real-imaginary conversions</span></a></li>
<li class="toclevel-2 tocsection-19"><a href="conversion.html#Complex-imaginary_conversions"><span class="tocnumber">5.11</span> <span class="toctext">Complex-imaginary conversions</span></a></li>
<li class="toclevel-2 tocsection-20"><a href="conversion.html#Pointer_conversions"><span class="tocnumber">5.12</span> <span class="toctext">Pointer conversions</span></a></li>
</ul>
</li>
<li class="toclevel-1 tocsection-21"><a href="conversion.html#Notes"><span class="tocnumber">6</span> <span class="toctext">Notes</span></a></li>
<li class="toclevel-1 tocsection-22"><a href="conversion.html#References"><span class="tocnumber">7</span> <span class="toctext">References</span></a></li>
<li class="toclevel-1 tocsection-23"><a href="conversion.html#See_also"><span class="tocnumber">8</span> <span class="toctext">See also</span></a></li>
</ul>
</td></tr></table>
<h3><span class="editsection">[<a href="http://en.cppreference.com/mwiki/index.php?title=c/language/conversion&amp;action=edit&amp;section=1" title="Edit section: Conversion as if by assignment">edit</a>]</span> <span class="mw-headline" id="Conversion_as_if_by_assignment">Conversion as if by assignment</span></h3>
<ul><li> In the <a href="operator_assignment.html" title="c/language/operator assignment">assignment</a> operator, the value of the right-hand operand is converted to the unqualified type of the left-hand operand.
</li><li> In <a href="scalar_initialization.html" title="c/language/scalar initialization">scalar initialization</a>, the value of the initializer expression is converted to the unqualified type of the object being initialized
</li><li> In a <a href="operator_other.html" title="c/language/operator other">function-call expression</a>, to a function that has a prototype, the value of each argument expression is converted to the type of the unqualified declared types of the corresponding parameter
</li><li> In a <a href="return.html" title="c/language/return">return statement</a>, the value of the operand of <code>return</code> is converted to an object having the return type of the function
</li></ul>
<p>Note that actual assignment, in addition to the conversion, also removes extra range and precision from floating-point types and prohibits overlaps; those characteristics do not apply to conversion as if by assignment.
</p>
<h3><span class="editsection">[<a href="http://en.cppreference.com/mwiki/index.php?title=c/language/conversion&amp;action=edit&amp;section=2" title="Edit section: Default argument promotions">edit</a>]</span> <span class="mw-headline" id="Default_argument_promotions">Default argument promotions</span></h3>
<p>In a <a href="operator_other.html#Function_call" title="c/language/operator other">function call expression</a> when the call is made to
</p>
<div class="t-li1"><span class="t-li">1)</span> a <a href="function_declaration.html" title="c/language/function declaration">function without a prototype</a></div>
<div class="t-li1"><span class="t-li">2)</span> a <a href="variadic.html" title="c/language/variadic">variadic function</a>, where the argument expression is one of the trailing arguments that are matched against the ellipsis parameter</div>
<p>Each argument of integer type undergoes <i>integer promotion</i> (see below), and each argument of type <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">float</span></span></span> is implicitly converted to the type <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">double</span></span></span>
</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="c source-c"><pre class="de1"><span class="kw4">int</span> add_nums<span class="br0">&#40;</span><span class="kw4">int</span> count, ...<span class="br0">&#41;</span><span class="sy4">;</span>
<span class="kw4">int</span> sum <span class="sy1">=</span> add_nums<span class="br0">&#40;</span><span class="nu0">2</span>, <span class="st0">'c'</span>, <span class="kw2">true</span><span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">// add_nums is called with three ints: (2, 99, 1)</span></pre></div></div>
<p>Note that <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">float</span> <a href="../numeric/complex/complex.html"><span class="kw743">complex</span></a></span></span> and <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">float</span> <a href="../numeric/complex/imaginary.html"><span class="kw745">imaginary</span></a></span></span> are not promoted to <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">double</span> <a href="../numeric/complex/complex.html"><span class="kw743">complex</span></a></span></span> and <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">double</span> <a href="../numeric/complex/imaginary.html"><span class="kw745">imaginary</span></a></span></span> in this context.
</p>
<h3><span class="editsection">[<a href="http://en.cppreference.com/mwiki/index.php?title=c/language/conversion&amp;action=edit&amp;section=3" title="Edit section: Usual arithmetic conversions">edit</a>]</span> <span class="mw-headline" id="Usual_arithmetic_conversions">Usual arithmetic conversions</span></h3>
<p>The arguments of the following arithmetic operators undergo implicit conversions for the purpose of obtaining the <i>common real type</i>, which is the type in which the calculation is performed:
</p>
<ul><li> <a href="operator_arithmetic.html" title="c/language/operator arithmetic">binary arithmetic</a> *, /,&#160;%, +, -
</li><li> <a href="operator_comparison.html" title="c/language/operator comparison">relational operators</a> &lt;, &gt;, &lt;=, &gt;=, ==,&#160;!=
</li><li> <a href="operator_arithmetic.html" title="c/language/operator arithmetic">binary bitwise arithmetic</a> &amp;, ^, |, 
</li><li> the <a href="operator_other.html" title="c/language/operator other">conditional operator</a>&#160;?:
</li></ul>
<div class="t-li1"><span class="t-li">1)</span> If one operand is <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">long</span> <span class="kw4">double</span></span></span>, <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">long</span> <span class="kw4">double</span> <a href="../numeric/complex/complex.html"><span class="kw743">complex</span></a></span></span>, or <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">long</span> <span class="kw4">double</span> <a href="../numeric/complex/imaginary.html"><span class="kw745">imaginary</span></a></span></span>, the other operand is implicitly converted as follows:
<dl><dd><ul><li>integer or real floating type to <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">long</span> <span class="kw4">double</span></span></span>
</li><li>complex type to <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">long</span> <span class="kw4">double</span> <a href="../numeric/complex/complex.html"><span class="kw743">complex</span></a></span></span>
</li><li>imaginary type to <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">long</span> <span class="kw4">double</span> <a href="../numeric/complex/imaginary.html"><span class="kw745">imaginary</span></a></span></span></div>
</li></ul>
</dd></dl>
<div class="t-li1"><span class="t-li">2)</span> Otherwise, if one operand is <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">double</span></span></span>, <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">double</span> <a href="../numeric/complex/complex.html"><span class="kw743">complex</span></a></span></span>, or <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">double</span> <a href="../numeric/complex/imaginary.html"><span class="kw745">imaginary</span></a></span></span>, the other operand is implicitly converted as follows:
<dl><dd><ul><li>integer or real floating type to <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">double</span></span></span>
</li><li>complex type to <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">double</span> <a href="../numeric/complex/complex.html"><span class="kw743">complex</span></a></span></span>
</li><li>imaginary type to <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">double</span> <a href="../numeric/complex/imaginary.html"><span class="kw745">imaginary</span></a></span></span></div>
</li></ul>
</dd></dl>
<div class="t-li1"><span class="t-li">3)</span> Otherwise, if one operand is <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">float</span></span></span>, <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">float</span> <a href="../numeric/complex/complex.html"><span class="kw743">complex</span></a></span></span>, or <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">float</span> <a href="../numeric/complex/imaginary.html"><span class="kw745">imaginary</span></a></span></span>, the other operand is implicitly converted as follows:
<dl><dd><ul><li>integer type to <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">float</span></span></span> (the only real type possible is float, which remains as-is)
</li><li>complex type remains <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">float</span> <a href="../numeric/complex/complex.html"><span class="kw743">complex</span></a></span></span>
</li><li>imaginary type remains <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">float</span> <a href="../numeric/complex/imaginary.html"><span class="kw745">imaginary</span></a></span></span></div>
</li></ul>
</dd></dl>
<div class="t-li1"><span class="t-li">4)</span> Otherwise, both operands are integers. In that case, 
<dl><dd>First of all, both operands undergo <i>integer promotions</i> (see below). Then
<ul><li> If the types after promotion are the same, that type is the common type
</li><li> Otherwise, if both operands after promotion have the same signedness (both signed or both unsigned), the operand with the lesser <i>conversion rank</i> (see below) is implicitly converted to the type of the operand with the greater <i>conversion rank</i>
</li><li> Otherwise, the signedness is different: If the operand with the unsigned type has <i>conversion rank</i> greater or equal than the rank of the type of the signed operand, then the operand with the signed type is implicitly converted to the unsigned type
</li><li> Otherwise, the signedness is different and the signed operand's rank is greater than unsigned operand's rank. In this case, if the signed type can represent all values of the unsigned type, then the operand with the unsigned type is implicitly converted to the type of the signed operand.
</li><li> Otherwise, both operands undergo implicit conversion to the unsigned type counterpart of the signed operand's type.
</li></ul>
</dd></dl>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="c source-c"><pre class="de1"><span class="nu0">1</span>.<span class="me1">f</span> <span class="sy2">+</span> <span class="nu0">20000001</span><span class="sy4">;</span> <span class="co1">// int is converted to float, giving 20000000.00</span>
                <span class="co1">// addition and then rounding to float gives 20000000.00</span>
<span class="br0">&#40;</span><span class="kw4">char</span><span class="br0">&#41;</span><span class="st0">'a'</span> <span class="sy2">+</span> <span class="nu0">1L</span><span class="sy4">;</span> <span class="co1">// First, char is promoted back to int.</span>
                <span class="co1">// this is signed + signed case, different rank</span>
                <span class="co1">// int is converted to long, the result is 98 signed long</span>
2u <span class="sy2">-</span> <span class="nu0">10</span><span class="sy4">;</span> <span class="co1">// signed / unsigned, same rank</span>
         <span class="co1">// 10 is converted to unsigned, unsigned math is modulo UINT_MAX+1</span>
         <span class="co1">// assuming 32 bit ints, result is 4294967288 of type unsigned int (aka UINT_MAX-7)</span>
0UL <span class="sy2">-</span> 1LL<span class="sy4">;</span> <span class="co1">// signed/unsigned diff rank, rank of signed is greater.</span>
           <span class="co1">// If sizeof(long) == sizeof(long long), signed cannot represent all unsigned</span>
           <span class="co1">// this is the last case: both operands are converted to unsigned long long</span>
           <span class="co1">// the result is 18446744073709551615 (ULLONG_MAX) of type unsigned long long</span></pre></div></div></div>
<p>The result type is determined as follows:
</p>
<ul><li> if both operands are complex, the result type is complex
</li><li> if both operands are imaginary, the result type is imaginary 
</li><li> if both operands are real, the result type is real
</li><li> if the two floating-point operands have different type domains (complex vs. real, complex vs imaginary, or imaginary vs. real), the result type is complex
</li></ul>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="c source-c"><pre class="de1"><span class="kw4">double</span> <a href="../numeric/complex/complex.html"><span class="kw743">complex</span></a> z <span class="sy1">=</span> <span class="nu0">1</span> <span class="sy2">+</span> <span class="nu0">2</span><span class="sy2">*</span>I<span class="sy4">;</span>
<span class="kw4">double</span> f <span class="sy1">=</span> <span class="nu16">3.0</span><span class="sy4">;</span>
z <span class="sy2">+</span> f<span class="sy4">;</span> <span class="co1">// z remains as-is, f is converted to double, the result is double complex</span></pre></div></div>
<p>As always, the result of a floating-point operator may have greater range and precision than is indicated by its type (see <span class="t-lc"><a href="../types/limits/FLT_EVAL_METHOD.html" title="c/types/limits/FLT EVAL METHOD">FLT_EVAL_METHOD</a></span>).
</p><p>Note: real and imaginary operands are not implicitly converted to complex because doing so would require extra computation, while producing undesirable results in certain cases involving infinities, NaNs and signed zeros. For example, if reals were converted to complex, 2.0×(3.0+i∞)  would evaluate as (2.0+i0.0)×(3.0+i∞) ⇒ (2.0×3.0–0.0×∞) + i(2.0×∞+0.0×3.0) ⇒ NaN+i∞ rather than the correct 6.0+i∞. If imaginaries were converted to complex, i2.0×(∞+i3.0) would evaluate as (0.0+i2.0) × (∞+i3.0) ⇒ (0.0×∞ – 2.0×3.0) + i(0.0×3.0 + 2.0×∞) ⇒ NaN + i∞ instead of –6.0 + i∞.
</p><p>Note: regardless of usual arithmetic conversions, the calculation may always be performed in a narrower type than specifier by these rules under the <a href="http://en.cppreference.com/mwiki/index.php?title=c/language/as_if&amp;action=edit&amp;redlink=1" class="new" title="c/language/as if (page does not exist)">as-if rule</a> 
</p>
<h3><span class="editsection">[<a href="http://en.cppreference.com/mwiki/index.php?title=c/language/conversion&amp;action=edit&amp;section=4" title="Edit section: Value transformations">edit</a>]</span> <span class="mw-headline" id="Value_transformations">Value transformations</span></h3>
<h4><span class="editsection">[<a href="http://en.cppreference.com/mwiki/index.php?title=c/language/conversion&amp;action=edit&amp;section=5" title="Edit section: Lvalue conversion">edit</a>]</span> <span class="mw-headline" id="Lvalue_conversion">Lvalue conversion</span></h4>
<p>Any <a href="value_category.html" title="c/language/value category">lvalue expression</a> of any non-array type, when used in any context other than 
</p>
<ul><li> as the operand of the <a href="operator_member_access.html" title="c/language/operator member access">address-of operator</a> (if allowed)
</li><li> as the operand of the pre/post <a href="operator_incdec.html" title="c/language/operator incdec">increment and decrement operators</a>.
</li><li> as the left-hand operand of the <a href="operator_member_access.html" title="c/language/operator member access">member access</a> (dot) operator.
</li><li> as the left-hand operand of the <a href="operator_assignment.html" title="c/language/operator assignment">assignment and compound assignment</a> operators.
</li><li> as the operand of <a href="sizeof.html" title="c/language/sizeof">sizeof</a>
</li></ul>
<p>undergoes <i>lvalue conversion</i>: the type remains the same, but loses <a href="const.html" title="c/language/const">const</a>/<a href="volatile.html" title="c/language/volatile">volatile</a>/<a href="restrict.html" title="c/language/restrict">restrict</a>-qualifiers and <a href="atomic.html" title="c/language/atomic">atomic</a> properties, if any. The value remains the same, but loses its lvalue properties (the address may no longer be taken). 
</p><p>If the lvalue has incomplete type, the behavior is undefined.
</p><p>If the lvalue designates an object of automatic storage duration whose address was never taken and if that object was uninitialized (not declared with an initializer and no assignment to it has been performed prior to use), the behavior is undefined.
</p><p>This conversion models the memory load of the value of the object from its location.
</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="c source-c"><pre class="de1"><span class="kw4">volatile</span> <span class="kw4">int</span> n <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
<span class="kw4">int</span> x <span class="sy1">=</span> n<span class="sy4">;</span>            <span class="co1">// lvalue conversion on n reads the value of n</span>
<span class="kw4">volatile</span> <span class="kw4">int</span><span class="sy2">*</span> p <span class="sy1">=</span> <span class="sy3">&amp;</span>n<span class="sy4">;</span> <span class="co1">// no lvalue conversion: does not read the value of n</span></pre></div></div>
<h4><span class="editsection">[<a href="http://en.cppreference.com/mwiki/index.php?title=c/language/conversion&amp;action=edit&amp;section=6" title="Edit section: Array to pointer conversion">edit</a>]</span> <span class="mw-headline" id="Array_to_pointer_conversion">Array to pointer conversion</span></h4>
<p>Any <a href="value_category.html" title="c/language/value category">lvalue expression</a> of <a href="array.html" title="c/language/array">array type</a>, when used in any context other than 
</p>
<ul><li> as the operand of the <a href="operator_member_access.html" title="c/language/operator member access">address-of operator</a>
</li><li> as the operand of <a href="sizeof.html" title="c/language/sizeof">sizeof</a>
</li><li> as the string literal used for <a href="array_initialization.html" title="c/language/array initialization">array initialization</a> 
</li></ul>
<p>undergoes a conversion to the non-lvalue pointer to its first element.
</p><p>If the array was declared <a href="storage_duration.html" title="c/language/storage duration">register</a>, the behavior is undefined.
</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="c source-c"><pre class="de1"><span class="kw4">int</span> a<span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span>, b<span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">4</span><span class="br0">&#93;</span><span class="sy4">;</span>
<span class="kw4">int</span><span class="sy2">*</span> p <span class="sy1">=</span> a<span class="sy4">;</span>      <span class="co1">// conversion to &amp;a[0]</span>
<span class="kw4">int</span> <span class="br0">&#40;</span><span class="sy2">*</span>q<span class="br0">&#41;</span><span class="br0">&#91;</span><span class="nu0">4</span><span class="br0">&#93;</span> <span class="sy1">=</span> b<span class="sy4">;</span> <span class="co1">// conversion to &amp;b[0]</span></pre></div></div>
<h4><span class="editsection">[<a href="http://en.cppreference.com/mwiki/index.php?title=c/language/conversion&amp;action=edit&amp;section=7" title="Edit section: Function to pointer conversion">edit</a>]</span> <span class="mw-headline" id="Function_to_pointer_conversion">Function  to pointer conversion</span></h4>
<p>Any function designator expression, when used in any context other than 
</p>
<ul><li> as the operand of the <a href="operator_member_access.html" title="c/language/operator member access">address-of operator</a>
</li><li> as the operand of <a href="sizeof.html" title="c/language/sizeof">sizeof</a>
</li></ul>
<p>undergoes a conversion to the non-lvalue pointer to the function designated by the expression.
</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="c source-c"><pre class="de1"><span class="kw4">int</span> f<span class="br0">&#40;</span><span class="kw4">int</span><span class="br0">&#41;</span><span class="sy4">;</span>
<span class="kw4">int</span> <span class="br0">&#40;</span><span class="sy2">*</span>p<span class="br0">&#41;</span><span class="br0">&#40;</span><span class="kw4">int</span><span class="br0">&#41;</span> <span class="sy1">=</span> f<span class="sy4">;</span> <span class="co1">// conversion to &amp;f</span>
<span class="br0">&#40;</span><span class="sy2">***</span>p<span class="br0">&#41;</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">// repeated dereference to f and conversion back to &amp;f</span></pre></div></div>
<h3><span class="editsection">[<a href="http://en.cppreference.com/mwiki/index.php?title=c/language/conversion&amp;action=edit&amp;section=8" title="Edit section: Implicit conversion semantics">edit</a>]</span> <span class="mw-headline" id="Implicit_conversion_semantics">Implicit conversion semantics</span></h3>
<p>Implicit conversion, whether <i>as if by assignment</i> or a <i>usual arithmetic conversion</i>, consists of two stages:
</p>
<div class="t-li1"><span class="t-li">1)</span> value transformation (if applicable)</div>
<div class="t-li1"><span class="t-li">2)</span> one of the conversions listed below (if it can produce the target type)</div>
<h4><span class="editsection">[<a href="http://en.cppreference.com/mwiki/index.php?title=c/language/conversion&amp;action=edit&amp;section=9" title="Edit section: Compatible types">edit</a>]</span> <span class="mw-headline" id="Compatible_types">Compatible types</span></h4>
<p>Conversion of a value of any type to any <a href="types.html#Compatible_type" title="c/language/types" class="mw-redirect">compatible type</a> is always a no-op and does not change the representation.
</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="c source-c"><pre class="de1"><a href="../types/integer.html"><span class="kw120">uint8_t</span></a> <span class="br0">&#40;</span><span class="sy2">*</span>a<span class="br0">&#41;</span><span class="br0">&#91;</span><span class="nu0">10</span><span class="br0">&#93;</span><span class="sy4">;</span>         <span class="co1">// if uint8_t is a typedef to unsigned char</span>
<span class="kw4">unsigned</span> <span class="kw4">char</span> <span class="br0">&#40;</span><span class="sy2">*</span>b<span class="br0">&#41;</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy1">=</span> a<span class="sy4">;</span> <span class="co1">// then these pointer types are compatible</span></pre></div></div>
<h4><span class="editsection">[<a href="http://en.cppreference.com/mwiki/index.php?title=c/language/conversion&amp;action=edit&amp;section=10" title="Edit section: Integer promotions">edit</a>]</span> <span class="mw-headline" id="Integer_promotions">Integer promotions</span></h4>
<p>Integer promotion is the implicit conversion of a value of any integer type with <i>rank</i> less or equal to <i>rank</i> of int or of a <a href="bit_field.html" title="c/language/bit field">bit field</a> of type _Bool, int, signed int, unsigned int, to the value of type <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">int</span></span></span> or <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">unsigned</span> <span class="kw4">int</span></span></span>
</p><p>If <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">int</span></span></span> can represent the entire range of values of the original type (or the range of values of the original bit field), the value is converted to type <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">int</span></span></span>. Otherwise the value is converted to <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">unsigned</span> <span class="kw4">int</span></span></span>.
</p><p>Integer promotions preserve the value, including the sign:
</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="c source-c"><pre class="de1"><span class="kw4">int</span> main<span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
   <span class="kw4">void</span> f<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">// old-style function declaration</span>
   <span class="kw4">char</span> x <span class="sy1">=</span> <span class="st0">'a'</span><span class="sy4">;</span> <span class="co1">// integer conversion from int to char</span>
   f<span class="br0">&#40;</span>x<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">// integer promotion from char back to int</span>
<span class="br0">&#125;</span>
<span class="kw4">void</span> f<span class="br0">&#40;</span>x<span class="br0">&#41;</span> <span class="kw4">int</span> x<span class="sy4">;</span> <span class="br0">&#123;</span><span class="br0">&#125;</span> <span class="co1">// the function expects int</span></pre></div></div>
<p><i>rank</i> above is a property of every <a href="compatible_type.html" title="c/language/type">integer type</a> and is defined as follows:
</p>
<div class="t-li1"><span class="t-li">1)</span> the ranks of all signed integer types are different and increase with their precision: rank of signed char &lt; rank of short &lt; rank of int &lt; rank of long int &lt; rank of long long int</div>
<div class="t-li1"><span class="t-li">2)</span> the ranks of all signed integer types equal the ranks of the corresponding unsigned integer types</div>
<div class="t-li1"><span class="t-li">3)</span> the rank of any standard integer type is greater than the rank of any extended integer type of the same size (that is, rank of __int64 &lt; rank of long long int, but rank of long long &lt; rank of __int128 due to the rule <span class="t-v">(1)</span>)</div>
<div class="t-li1"><span class="t-li">4)</span> rank of char equals rank of signed char and rank of unsigned char</div>
<div class="t-li1"><span class="t-li">5)</span> the rank of _Bool is less than the rank of any other standard integer type</div>
<div class="t-li1"><span class="t-li">6)</span> the rank of any enumerated type equals the rank of its compatible integer type</div>
<div class="t-li1"><span class="t-li">7)</span> ranking is transitive: if rank of T1 &lt; rank of T2 and rank of T2 &lt; rank of T3 then rank of T1 &lt; rank of T3</div>
<div class="t-li1"><span class="t-li">8)</span> any aspects of relative ranking of extended integer types not covered above are implementation defined</div>
<p>Note: integer promotions are applied only
</p>
<ul><li> as part of <i>usual arithmetic conversions</i> (see above)
</li><li> as part of <i>default argument promotions</i> (see above)
</li><li> to the operand of the unary arithmetic operators + and -
</li><li> to the operand of the unary bitwise operator ~
</li><li> to both operands of the shift operators &lt;&lt; and &gt;&gt;
</li></ul>
<h4><span class="editsection">[<a href="http://en.cppreference.com/mwiki/index.php?title=c/language/conversion&amp;action=edit&amp;section=11" title="Edit section: Boolean conversion">edit</a>]</span> <span class="mw-headline" id="Boolean_conversion">Boolean conversion</span></h4>
<p>A value of any scalar type can be implicitly converted to _Bool. The values that compare equal to zero are converted to <span class="t-c"><span class="mw-geshi c source-c">​<span class="nu0">0</span>​</span></span>, all other values are converted to <span class="t-c"><span class="mw-geshi c source-c"><span class="nu0">1</span></span></span>
</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="c source-c"><pre class="de1">bool b1 <span class="sy1">=</span> <span class="nu16">0.5</span><span class="sy4">;</span>              <span class="co1">// b1 == 1 (0.5 converted to int would be zero)</span>
bool b2 <span class="sy1">=</span> <span class="nu16">2.0</span><span class="sy2">*</span><a href="../numeric/complex/Imaginary_I.html"><span class="kw746">_Imaginary_I</span></a><span class="sy4">;</span> <span class="co1">// b2 == 1 (but converted to int would be zero)</span>
bool b3 <span class="sy1">=</span> <span class="nu16">0.0</span> <span class="sy2">+</span> <span class="nu16">3.0</span><span class="sy2">*</span>I<span class="sy4">;</span>      <span class="co1">// b3 == 1 (but converted to int would be zero)</span>
bool b4 <span class="sy1">=</span> <span class="nu16">0.0</span><span class="sy2">/</span><span class="nu16">0.0</span><span class="sy4">;</span>          <span class="co1">// b4 == 1 (NaN does not compare equal to zero)</span></pre></div></div>
<h4><span class="editsection">[<a href="http://en.cppreference.com/mwiki/index.php?title=c/language/conversion&amp;action=edit&amp;section=12" title="Edit section: Integer conversions">edit</a>]</span> <span class="mw-headline" id="Integer_conversions">Integer conversions</span></h4>
<p>A value of any integer type can be implicitly converted to any other integer type. Except where covered by promotions and boolean conversions above, the rules are:
</p>
<ul><li> if the target type can represent the entire range of values of the source type, the value is unchanged
</li><li> otherwise, if the target type is unsigned, the value <span class="texhtml" style="white-space: nowrap;">2<span class="t-su">b<br /></span></span>, where <span class="texhtml" style="white-space: nowrap;">b</span> is the number of bits in the target type, is repeatedly subtracted or added to the source value until the result fits in the target type. In other words, unsigned integers implement modulo arithmetic.
</li><li> otherwise, if the target type is signed, the behavior is implementation-defined (which may include raising a signal)
</li></ul>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="c source-c"><pre class="de1"><span class="kw4">char</span> x <span class="sy1">=</span> <span class="st0">'a'</span><span class="sy4">;</span> <span class="co1">// int -&gt; char, result unchanged</span>
<span class="kw4">unsigned</span> <span class="kw4">char</span> n <span class="sy1">=</span> <span class="sy2">-</span><span class="nu0">123456</span><span class="sy4">;</span> <span class="co1">// target is unsigned, result is 192 (that is, -123456+483*256)</span>
<span class="kw4">signed</span> <span class="kw4">char</span> m <span class="sy1">=</span> <span class="nu0">123456</span><span class="sy4">;</span>    <span class="co1">// target is signed, result is implementation-defined</span></pre></div></div>
<h4><span class="editsection">[<a href="http://en.cppreference.com/mwiki/index.php?title=c/language/conversion&amp;action=edit&amp;section=13" title="Edit section: Real floating-integer conversions">edit</a>]</span> <span class="mw-headline" id="Real_floating-integer_conversions">Real floating-integer conversions</span></h4>
<p>A finite value of any real floating type can be implicitly converted to any integer type. Except where covered by boolean conversion above, the rules are:
</p>
<ul><li> The fractional part is discarded (truncated towards zero).
</li></ul>
<dl><dd><ul><li> If the resulting value can be represented by the target type, that value is used
</li><li> otherwise, the behavior is undefined 
</li></ul>
</dd></dl>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="c source-c"><pre class="de1"><span class="kw4">int</span> n <span class="sy1">=</span> <span class="nu16">3.14</span><span class="sy4">;</span> <span class="co1">// n == 3</span>
<span class="kw4">int</span> x <span class="sy1">=</span> <span class="nu19">1e10</span><span class="sy4">;</span> <span class="co1">// undefined behavior for 32-bit int</span></pre></div></div>
<p>A value of any integer type can be implicitly converted to any real floating type. 
</p>
<ul><li> if the value can be represented exactly by the target type, it is unchanged
</li><li> if the value can be represented, but cannot be represented exactly, the result is the nearest higher or the nearest lower value (in other words, rounding direction is implementation-defined), although if IEEE arithmetic is supported, rounding is to nearest. It is unspecified whether <span class="t-lc"><a href="../numeric/fenv/FE_exceptions.html" title="c/numeric/fenv/FE exceptions">FE_INEXACT</a></span> is raised in this case.
</li><li> if the value cannot be represented, the behavior is undefined, although if IEEE arithmetic is supported, <span class="t-lc"><a href="../numeric/fenv/FE_exceptions.html" title="c/numeric/fenv/FE exceptions">FE_INVALID</a></span> is raised and the result value is unspecified.
</li></ul>
<p>The result of this conversion may have greater range and precision than its target type indicates (see <span class="t-lc"><a href="../types/limits/FLT_EVAL_METHOD.html" title="c/types/limits/FLT EVAL METHOD">FLT_EVAL_METHOD</a></span>.
</p><p>If control over <span class="t-lc"><a href="../numeric/fenv/FE_exceptions.html" title="c/numeric/fenv/FE exceptions">FE_INEXACT</a></span> is needed in floating-to-integer conversions, <span class="t-lc"><a href="../numeric/math/rint.html" title="c/numeric/math/rint">rint</a></span> and <span class="t-lc"><a href="../numeric/math/nearbyint.html" title="c/numeric/math/nearbyint">nearbyint</a></span> may be used.
</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="c source-c"><pre class="de1"><span class="kw4">double</span> d <span class="sy1">=</span> <span class="nu0">10</span><span class="sy4">;</span> <span class="co1">// d = 10.00</span>
<span class="kw4">float</span> f <span class="sy1">=</span> <span class="nu0">20000001</span><span class="sy4">;</span> <span class="co1">// f = 20000000.00 (FE_INEXACT)</span>
<span class="kw4">float</span> x <span class="sy1">=</span> <span class="nu0">1</span><span class="sy2">+</span><span class="br0">&#40;</span><span class="kw4">long</span> <span class="kw4">long</span><span class="br0">&#41;</span><a href="../types/limits.html"><span class="kw377">FLT_MAX</span></a><span class="sy4">;</span> <span class="co1">// undefined behavior</span></pre></div></div>
<h4><span class="editsection">[<a href="http://en.cppreference.com/mwiki/index.php?title=c/language/conversion&amp;action=edit&amp;section=14" title="Edit section: Real floating point conversions">edit</a>]</span> <span class="mw-headline" id="Real_floating_point_conversions">Real floating point conversions</span></h4>
<p>A value of any real floating type can be implicitly converted to any other real floating type.
</p>
<ul><li> If the value can be represented by the target type exactly, it is unchanged
</li><li> if the value can be represented, but cannot be represented exactly, the result is the nearest higher or the nearest lower value (in other words, rounding direction is implementation-defined), although if IEEE arithmetic is supported, rounding is to nearest
</li><li> if the value cannot be represented, the behavior is undefined <table class="metadata plainlinks ambox mbox-small-left ambox-notice" style=""><tr><td class="mbox-empty-cell"></td><td class="mbox-text" style="">This section is incomplete<br />Reason: check IEEE if appropriately-signed infinity is required </td></tr></table>
</li></ul>
<p>The result of this conversion may have greater range and precision than its target type indicates (see <span class="t-lc"><a href="../types/limits/FLT_EVAL_METHOD.html" title="c/types/limits/FLT EVAL METHOD">FLT_EVAL_METHOD</a></span>.
</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="c source-c"><pre class="de1"><span class="kw4">double</span> d <span class="sy1">=</span> <span class="nu16">0.1</span><span class="sy4">;</span> <span class="co1">// d = 0.1000000000000000055511151231257827021181583404541015625</span>
<span class="kw4">float</span> f <span class="sy1">=</span> d<span class="sy4">;</span>    <span class="co1">// f = 0.100000001490116119384765625</span>
<span class="kw4">float</span> x <span class="sy1">=</span> <span class="nu0">2</span><span class="sy2">*</span><span class="br0">&#40;</span><span class="kw4">double</span><span class="br0">&#41;</span><a href="../types/limits.html"><span class="kw377">FLT_MAX</span></a><span class="sy4">;</span> <span class="co1">// undefined</span></pre></div></div>
<h4><span class="editsection">[<a href="http://en.cppreference.com/mwiki/index.php?title=c/language/conversion&amp;action=edit&amp;section=15" title="Edit section: Complex type conversions">edit</a>]</span> <span class="mw-headline" id="Complex_type_conversions">Complex type conversions</span></h4>
<p>A value of any complex type can be implicitly converted to any other complex type. The real part and the imaginary part individually follow the conversion rules for the real floating types.
</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="c source-c"><pre class="de1"><span class="kw4">double</span> <a href="../numeric/complex/complex.html"><span class="kw743">complex</span></a> d <span class="sy1">=</span> <span class="nu16">0.1</span> <span class="sy2">+</span> <span class="nu16">0.1</span><span class="sy2">*</span>I<span class="sy4">;</span>
<span class="kw4">float</span> <a href="../numeric/complex/complex.html"><span class="kw743">complex</span></a> f <span class="sy1">=</span> d<span class="sy4">;</span> <span class="co1">// f is (0.100000001490116119384765625, 0.100000001490116119384765625)</span></pre></div></div>
<h4><span class="editsection">[<a href="http://en.cppreference.com/mwiki/index.php?title=c/language/conversion&amp;action=edit&amp;section=16" title="Edit section: Imaginary type conversions">edit</a>]</span> <span class="mw-headline" id="Imaginary_type_conversions">Imaginary type conversions</span></h4>
<p>A value of any imaginary type can be implicitly converted to any other imaginary  type. The imaginary part follows the conversion rules for the real floating types.
</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="c source-c"><pre class="de1"><span class="kw4">double</span> <a href="../numeric/complex/imaginary.html"><span class="kw745">imaginary</span></a> d <span class="sy1">=</span> <span class="nu16">0.1</span><span class="sy2">*</span><a href="../numeric/complex/Imaginary_I.html"><span class="kw746">_Imaginary_I</span></a><span class="sy4">;</span>
<span class="kw4">float</span> <a href="../numeric/complex/imaginary.html"><span class="kw745">imaginary</span></a> f <span class="sy1">=</span> d<span class="sy4">;</span> <span class="co1">// f is 0.100000001490116119384765625*I</span></pre></div></div>
<h4><span class="editsection">[<a href="http://en.cppreference.com/mwiki/index.php?title=c/language/conversion&amp;action=edit&amp;section=17" title="Edit section: Real-complex conversions">edit</a>]</span> <span class="mw-headline" id="Real-complex_conversions">Real-complex conversions</span></h4>
<p>A value of any real floating type can be implicitly converted to any complex type. 
</p>
<ul><li> The real part of the result is determined by the conversion rules for the real floating types
</li><li> The imaginary part of the result is positive zero (or unsigned zero on non-IEEE systems)
</li></ul>
<p>A value of any complex type can be implicitly converted to any real floating type
</p>
<ul><li> The real part is converted following the rules for the real floating types
</li><li> The imaginary part is discarded
</li></ul>
<p>Note: in complex-to-real conversion, a NaN in the imaginary part will not propagate to the real result.
</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="c source-c"><pre class="de1">&#160;</pre></div></div>
<h4><span class="editsection">[<a href="http://en.cppreference.com/mwiki/index.php?title=c/language/conversion&amp;action=edit&amp;section=18" title="Edit section: Real-imaginary conversions">edit</a>]</span> <span class="mw-headline" id="Real-imaginary_conversions">Real-imaginary conversions</span></h4>
<p>A value of any imaginary type can be implicitly converted to any real type (integer or floating-point). The result is always a positive (or unsigned) zero, except when the target type is _Bool, in which case boolean conversion rules apply.
</p><p>A value of any real type can be implicitly converted to any imaginary type. The result is always a positive imaginary zero.
</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="c source-c"><pre class="de1">&#160;</pre></div></div>
<h4><span class="editsection">[<a href="http://en.cppreference.com/mwiki/index.php?title=c/language/conversion&amp;action=edit&amp;section=19" title="Edit section: Complex-imaginary conversions">edit</a>]</span> <span class="mw-headline" id="Complex-imaginary_conversions">Complex-imaginary conversions</span></h4>
<p>A value of any imaginary type can be implicitly converted to any complex type.
</p>
<ul><li> The real part of the result is the positive zero
</li><li> The imaginary part of the result follows the conversion rules for the corresponding real types
</li></ul>
<p>A value of any complex type can be implicitly converted to any imaginary type
</p>
<ul><li> The real part is discarded
</li><li> The imaginary part of the result follows the conversion rules for the corresponding real types
</li></ul>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="c source-c"><pre class="de1"><span class="kw4">double</span> <a href="../numeric/complex/imaginary.html"><span class="kw745">imaginary</span></a> z <span class="sy1">=</span> I <span class="sy2">*</span> <span class="br0">&#40;</span><span class="nu0">3</span><span class="sy2">*</span>I<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">// the complex result -3.0+0i loses real part, gives zero</span></pre></div></div>
<h4><span class="editsection">[<a href="http://en.cppreference.com/mwiki/index.php?title=c/language/conversion&amp;action=edit&amp;section=20" title="Edit section: Pointer conversions">edit</a>]</span> <span class="mw-headline" id="Pointer_conversions">Pointer conversions</span></h4>
<p>A pointer to <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">void</span></span></span> can be implicitly converted to and from any pointer to object type with the following semantics:
</p>
<ul><li> If a pointer to object is converted to a pointer to void and back, its value compares equal to the original pointer.
</li><li> No other guarantees are offered
</li></ul>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="c source-c"><pre class="de1"><span class="kw4">int</span><span class="sy2">*</span> p <span class="sy1">=</span> <a href="../memory/malloc.html"><span class="kw403">malloc</span></a><span class="br0">&#40;</span><span class="nu0">10</span> <span class="sy2">*</span> <span class="kw4">sizeof</span><span class="br0">&#40;</span><span class="kw4">int</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">// malloc returns void*</span></pre></div></div>
<p>A pointer to an unqualified type may be implicitly converted to the pointer to qualified version of that type (in other words, <a href="const.html" title="c/language/const">const</a>, <a href="volatile.html" title="c/language/volatile">volatile</a>, and <a href="restrict.html" title="c/language/restrict">restrict</a> qualifiers can be added. The original pointer and the result compare equal.
</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="c source-c"><pre class="de1"><span class="kw4">int</span> n<span class="sy4">;</span>
<span class="kw4">const</span> <span class="kw4">int</span><span class="sy2">*</span> p <span class="sy1">=</span> <span class="sy3">&amp;</span>n<span class="sy4">;</span> <span class="co1">// &amp;n has type int*</span></pre></div></div>
<p>Any integer <a href="constant_expression.html" title="c/language/constant expression">constant expression</a> with value <span class="t-c"><span class="mw-geshi c source-c">​<span class="nu0">0</span>​</span></span> as well as integer pointer expression with value zero cast to the type <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">void</span><span class="sy2">*</span></span></span> can be implicitly converted to any pointer type (both pointer to object and pointer to function). The result is the null pointer value of its type, guaranteed to compare unequal to any non-null pointer value of that type. This integer or void* expression is known as <i>null pointer constant</i> and the standard library provides one definition of this constant as the macro <span class="t-lc"><a href="../types/NULL.html" title="c/types/NULL">NULL</a></span> .
</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="c source-c"><pre class="de1"><span class="kw4">int</span><span class="sy2">*</span> p <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="kw4">double</span><span class="sy2">*</span> q <span class="sy1">=</span> <a href="../types/NULL.html"><span class="kw103">NULL</span></a><span class="sy4">;</span></pre></div></div>
<h3><span class="editsection">[<a href="http://en.cppreference.com/mwiki/index.php?title=c/language/conversion&amp;action=edit&amp;section=21" title="Edit section: Notes">edit</a>]</span> <span class="mw-headline" id="Notes">Notes</span></h3>
<p>Although signed integer overflow in any arithmetic operator is undefined behavior, overflowing a signed integer type in an integer conversion is merely unspecified behavior.
</p><p>On the other hand, although unsigned integer overflow in any arithmetic operator (and in integer conversion) is a well-defined operation and follows the rules of modulo arithmetic, overflowing an unsigned integer in a floating-to-integer conversion is undefined behavior: the values of real floating type that can be converted to unsigned integer are the values from the open interval <span class="texhtml" style="white-space: nowrap;">(-1; Unnn_MAX+1)</span>.
</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="c source-c"><pre class="de1"><span class="kw4">unsigned</span> <span class="kw4">int</span> n <span class="sy1">=</span> <span class="sy2">-</span><span class="nu16">1.0</span><span class="sy4">;</span> <span class="co1">// undefined behavior</span></pre></div></div>
<p>Conversions between pointers and integers (except from pointer to _Bool and from integer constant expression with the value zero to pointer), between pointers to objects (except where either to or from is a pointer to void) and conversions between pointers to functions (except when the functions have compatible types) are never implicit and require a <a href="cast.html" title="c/language/cast">cast operator</a>.
</p><p>There are no conversions (implicit or explicit) between pointers to functions and pointers to objects (including void*) or integers.
</p>
<h3><span class="editsection">[<a href="http://en.cppreference.com/mwiki/index.php?title=c/language/conversion&amp;action=edit&amp;section=22" title="Edit section: References">edit</a>]</span> <span class="mw-headline" id="References">References</span></h3>
<div class="t-ref-std-11">
<ul><li> C11 standard (ISO/IEC 9899:2011): 
</li></ul>
<dl><dd><ul><li> 6.3 Conversions (p: 50-56)
</li></ul>
</dd></dl>
<div class="t-ref-std-c99">
<ul><li> C99 standard (ISO/IEC 9899:1999): 
</li></ul>
<dl><dd><ul><li> 6.3 Conversions (p: 42-48)
</li></ul>
</dd></dl>
<div class="t-ref-std-c89">
<ul><li> C89/C90 standard (ISO/IEC 9899:1990): 
</li></ul>
<dl><dd><ul><li> 3.2 Conversions 
</li></ul>
</dd></dl>
</div>
<h3><span class="editsection">[<a href="http://en.cppreference.com/mwiki/index.php?title=c/language/conversion&amp;action=edit&amp;section=23" title="Edit section: See also">edit</a>]</span> <span class="mw-headline" id="See_also">See also</span></h3>
<table class="t-dsc-begin">

<tr class="t-dsc">
<td colspan="2"> <div class="t-dsc-see"><span><a href="../../cpp/language/implicit_cast.html" title="cpp/language/implicit cast" class="mw-redirect">C++ documentation</a></span> for <span class="t-dsc-see-tt"><span>Implicit conversions</span></span></div>
</td></tr>

</table></div>
</div>

<!-- 
NewPP limit report
Preprocessor visited node count: 4737/1000000
Preprocessor generated node count: 9544/1000000
Post‐expand include size: 83284/2097152 bytes
Template argument size: 16934/2097152 bytes
Highest expansion depth: 17/40
Expensive parser function count: 0/100
-->

<!-- Saved in parser cache with key mwiki1-mwiki_en_:pcache:idhash:13920-0!*!0!!en!*!* and timestamp 20160414200710 -->
</div>                    <!-- /bodycontent -->
                                        <!-- printfooter -->
                    <div class="printfooter">
                    Retrieved from "<a href="http://en.cppreference.com/mwiki/index.php?title=c/language/conversion&amp;oldid=85297">http://en.cppreference.com/mwiki/index.php?title=c/language/conversion&amp;oldid=85297</a>"                    </div>
                    <!-- /printfooter -->
                                                            <!-- catlinks -->
                    <div id='catlinks' class='catlinks'><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="http://en.cppreference.com/w/Special:Categories" title="Special:Categories">Category</a>: <ul><li><a href="http://en.cppreference.com/w/Category:Todo_with_reason" title="Category:Todo with reason">Todo with reason</a></li></ul></div></div>                    <!-- /catlinks -->
                                                            <div class="visualClear"></div>
                    <!-- debughtml -->
                                        <!-- /debughtml -->
                </div>
                <!-- /bodyContent -->
            </div>
        </div>
        <!-- /content -->
        <!-- footer -->
        <div id="cpp-footer-base" class="noprint">
            <div id="footer">
                        <div id="cpp-navigation">
            <h5>Navigation</h5>
            <ul>
<li id="n-Support-us"><a href="http://www.cppreference.com/support" rel="nofollow">Support us</a></li><li id="n-recentchanges"><a href="http://en.cppreference.com/w/Special:RecentChanges" title="A list of recent changes in the wiki [r]" accesskey="r">Recent changes</a></li><li id="n-FAQ"><a href="http://en.cppreference.com/w/Cppreference:FAQ">FAQ</a></li><li id="n-Offline-version"><a href="http://en.cppreference.com/w/Cppreference:Archives">Offline version</a></li>            </ul>
        </div>
                        <div id="cpp-toolbox">
            <h5><span>Toolbox</span><a href="conversion.html#"></a></h5>
            <ul>
<li id="t-whatlinkshere"><a href="http://en.cppreference.com/w/Special:WhatLinksHere/c/language/conversion" title="A list of all wiki pages that link here [j]" accesskey="j">What links here</a></li><li id="t-recentchangeslinked"><a href="http://en.cppreference.com/w/Special:RecentChangesLinked/c/language/conversion" title="Recent changes in pages linked from this page [k]" accesskey="k">Related changes</a></li><li id="t-upload"><a href="http://upload.cppreference.com/w/Special:Upload" title="Upload files [u]" accesskey="u">Upload file</a></li><li id="t-specialpages"><a href="http://en.cppreference.com/w/Special:SpecialPages" title="A list of all special pages [q]" accesskey="q">Special pages</a></li><li id="t-print"><a href="http://en.cppreference.com/mwiki/index.php?title=c/language/conversion&amp;printable=yes" rel="alternate" title="Printable version of this page [p]" accesskey="p">Printable version</a></li><li id="t-permalink"><a href="http://en.cppreference.com/mwiki/index.php?title=c/language/conversion&amp;oldid=85297" title="Permanent link to this revision of the page">Permanent link</a></li><li id="t-info"><a href="http://en.cppreference.com/mwiki/index.php?title=c/language/conversion&amp;action=info">Page information</a></li>            </ul>
        </div>
                        <div id="cpp-languages">
            <div><ul><li>In other languages</li></ul></div>
            <div><ul>
<li class="interwiki-ar"><a href="http://ar.cppreference.com/w/c/language/conversion" title="c/language/conversion" lang="ar" hreflang="ar">العربية</a></li><li class="interwiki-cs"><a href="http://cs.cppreference.com/w/c/language/conversion" title="c/language/conversion" lang="cs" hreflang="cs">Česky</a></li><li class="interwiki-de"><a href="http://de.cppreference.com/w/c/language/conversion" title="c/language/conversion" lang="de" hreflang="de">Deutsch</a></li><li class="interwiki-es"><a href="http://es.cppreference.com/w/c/language/conversion" title="c/language/conversion" lang="es" hreflang="es">Español</a></li><li class="interwiki-fr"><a href="http://fr.cppreference.com/w/c/language/conversion" title="c/language/conversion" lang="fr" hreflang="fr">Français</a></li><li class="interwiki-it"><a href="http://it.cppreference.com/w/c/language/conversion" title="c/language/conversion" lang="it" hreflang="it">Italiano</a></li><li class="interwiki-ja"><a href="http://ja.cppreference.com/w/c/language/conversion" title="c/language/conversion" lang="ja" hreflang="ja">日本語</a></li><li class="interwiki-ko"><a href="http://ko.cppreference.com/w/c/language/conversion" title="c/language/conversion" lang="ko" hreflang="ko">한국어</a></li><li class="interwiki-pl"><a href="http://pl.cppreference.com/w/c/language/conversion" title="c/language/conversion" lang="pl" hreflang="pl">Polski</a></li><li class="interwiki-pt"><a href="http://pt.cppreference.com/w/c/language/conversion" title="c/language/conversion" lang="pt" hreflang="pt">Português</a></li><li class="interwiki-ru"><a href="http://ru.cppreference.com/w/c/language/conversion" title="c/language/conversion" lang="ru" hreflang="ru">Русский</a></li><li class="interwiki-tr"><a href="http://tr.cppreference.com/w/c/language/conversion" title="c/language/conversion" lang="tr" hreflang="tr">Türkçe</a></li><li class="interwiki-zh"><a href="http://zh.cppreference.com/w/c/language/conversion" title="c/language/conversion" lang="zh" hreflang="zh">中文</a></li>            </ul></div>
        </div>
            <ul id="footer-info">
                                    <li id="footer-info-lastmod"> This page was last modified on 14 April 2016, at 13:07.</li>
                                    <li id="footer-info-viewcount">This page has been accessed 5,222 times.</li>
                            </ul>
                    <ul id="footer-places">
                                    <li id="footer-places-privacy"><a href="http://en.cppreference.com/w/Cppreference:Privacy_policy" title="Cppreference:Privacy policy">Privacy policy</a></li>
                                    <li id="footer-places-about"><a href="http://en.cppreference.com/w/Cppreference:About" title="Cppreference:About">About cppreference.com</a></li>
                                    <li id="footer-places-disclaimer"><a href="http://en.cppreference.com/w/Cppreference:General_disclaimer" title="Cppreference:General disclaimer">Disclaimers</a></li>
                            </ul>
                                    <ul id="footer-icons" class="noprint">
                                    <li id="footer-poweredbyico">
                                            <a href="http://www.mediawiki.org/"><img src="../../../mwiki/skins/common/images/poweredby_mediawiki_88x31.png" alt="Powered by MediaWiki" width="88" height="31" /></a>                                            <a href="http://qbnz.com/highlighter/"><img src="../../../../upload.cppreference.com/mwiki/images/2/2b/powered_by_geshi_88x31.png" alt="Powered by GeSHi" height="31" width="88" /></a>                                            <a href="http://www.tigertech.net/referral/cppreference.com"><img src="../../../../upload.cppreference.com/mwiki/images/9/94/powered_by_tigertech_88x31.png" alt="Hosted by Tiger Technologies" height="31" width="88" /></a>                                        </li>
                                </ul>
                        <div style="clear:both">
            </div>
            </div>
        </div>
        <!-- /footer -->
        <script>if(window.mw){
mw.loader.state({"site":"loading","user":"missing","user.groups":"ready"});
}</script>
<script src="../../../mwiki/load.php%3Fdebug=false&amp;lang=en&amp;modules=skins.cppreference2&amp;only=scripts&amp;skin=cppreference2&amp;*"></script>
<script>if(window.mw){
mw.loader.load(["mediawiki.action.view.postEdit","mediawiki.user","mediawiki.page.ready","mediawiki.searchSuggest","mediawiki.hidpi","ext.gadget.ColiruCompiler"], null, true);
}</script>
<script src="../../../mwiki/load.php%3Fdebug=false&amp;lang=en&amp;modules=site&amp;only=scripts&amp;skin=cppreference2&amp;*"></script>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-2828341-1']);
_gaq.push(['_setDomainName', 'cppreference.com']);
_gaq.push(['_trackPageview']);
</script><!-- Served in 0.164 secs. -->
	</body>
<!-- Cached 20160414201347 -->
</html>