C-Plus-Plus-Expressions.html 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <!-- Copyright (C) 1988-2020 Free Software Foundation, Inc.
  4. Permission is granted to copy, distribute and/or modify this document
  5. under the terms of the GNU Free Documentation License, Version 1.3 or
  6. any later version published by the Free Software Foundation; with the
  7. Invariant Sections being "Free Software" and "Free Software Needs
  8. Free Documentation", with the Front-Cover Texts being "A GNU Manual,"
  9. and with the Back-Cover Texts as in (a) below.
  10. (a) The FSF's Back-Cover Text is: "You are free to copy and modify
  11. this GNU Manual. Buying copies from GNU Press supports the FSF in
  12. developing GNU and promoting software freedom." -->
  13. <!-- Created by GNU Texinfo 5.1, http://www.gnu.org/software/texinfo/ -->
  14. <head>
  15. <title>Debugging with GDB: C Plus Plus Expressions</title>
  16. <meta name="description" content="Debugging with GDB: C Plus Plus Expressions">
  17. <meta name="keywords" content="Debugging with GDB: C Plus Plus Expressions">
  18. <meta name="resource-type" content="document">
  19. <meta name="distribution" content="global">
  20. <meta name="Generator" content="makeinfo">
  21. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  22. <link href="index.html#Top" rel="start" title="Top">
  23. <link href="Concept-Index.html#Concept-Index" rel="index" title="Concept Index">
  24. <link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
  25. <link href="C.html#C" rel="up" title="C">
  26. <link href="C-Defaults.html#C-Defaults" rel="next" title="C Defaults">
  27. <link href="C-Constants.html#C-Constants" rel="previous" title="C Constants">
  28. <style type="text/css">
  29. <!--
  30. a.summary-letter {text-decoration: none}
  31. blockquote.smallquotation {font-size: smaller}
  32. div.display {margin-left: 3.2em}
  33. div.example {margin-left: 3.2em}
  34. div.indentedblock {margin-left: 3.2em}
  35. div.lisp {margin-left: 3.2em}
  36. div.smalldisplay {margin-left: 3.2em}
  37. div.smallexample {margin-left: 3.2em}
  38. div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
  39. div.smalllisp {margin-left: 3.2em}
  40. kbd {font-style:oblique}
  41. pre.display {font-family: inherit}
  42. pre.format {font-family: inherit}
  43. pre.menu-comment {font-family: serif}
  44. pre.menu-preformatted {font-family: serif}
  45. pre.smalldisplay {font-family: inherit; font-size: smaller}
  46. pre.smallexample {font-size: smaller}
  47. pre.smallformat {font-family: inherit; font-size: smaller}
  48. pre.smalllisp {font-size: smaller}
  49. span.nocodebreak {white-space:nowrap}
  50. span.nolinebreak {white-space:nowrap}
  51. span.roman {font-family:serif; font-weight:normal}
  52. span.sansserif {font-family:sans-serif; font-weight:normal}
  53. ul.no-bullet {list-style: none}
  54. -->
  55. </style>
  56. </head>
  57. <body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
  58. <a name="C-Plus-Plus-Expressions"></a>
  59. <div class="header">
  60. <p>
  61. Next: <a href="C-Defaults.html#C-Defaults" accesskey="n" rel="next">C Defaults</a>, Previous: <a href="C-Constants.html#C-Constants" accesskey="p" rel="previous">C Constants</a>, Up: <a href="C.html#C" accesskey="u" rel="up">C</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
  62. </div>
  63. <hr>
  64. <a name="C_002b_002b-Expressions"></a>
  65. <h4 class="subsubsection">15.4.1.3 C<tt>++</tt> Expressions</h4>
  66. <a name="index-expressions-in-C_002b_002b"></a>
  67. <p><small>GDB</small> expression handling can interpret most C<tt>++</tt> expressions.
  68. </p>
  69. <a name="index-debugging-C_002b_002b-programs"></a>
  70. <a name="index-C_002b_002b-compilers"></a>
  71. <a name="index-debug-formats-and-C_002b_002b"></a>
  72. <a name="index-GCC-and-C_002b_002b"></a>
  73. <blockquote>
  74. <p><em>Warning:</em> <small>GDB</small> can only debug C<tt>++</tt> code if you use
  75. the proper compiler and the proper debug format. Currently,
  76. <small>GDB</small> works best when debugging C<tt>++</tt> code that is compiled
  77. with the most recent version of <small>GCC</small> possible. The DWARF
  78. debugging format is preferred; <small>GCC</small> defaults to this on most
  79. popular platforms. Other compilers and/or debug formats are likely to
  80. work badly or not at all when using <small>GDB</small> to debug C<tt>++</tt>
  81. code. See <a href="Compilation.html#Compilation">Compilation</a>.
  82. </p></blockquote>
  83. <ol>
  84. <li> <a name="index-member-functions"></a>
  85. Member function calls are allowed; you can use expressions like
  86. <div class="smallexample">
  87. <pre class="smallexample">count = aml-&gt;GetOriginal(x, y)
  88. </pre></div>
  89. </li><li> <a name="index-this_002c-inside-C_002b_002b-member-functions"></a>
  90. <a name="index-namespace-in-C_002b_002b"></a>
  91. While a member function is active (in the selected stack frame), your
  92. expressions have the same namespace available as the member function;
  93. that is, <small>GDB</small> allows implicit references to the class instance
  94. pointer <code>this</code> following the same rules as C<tt>++</tt>. <code>using</code>
  95. declarations in the current scope are also respected by <small>GDB</small>.
  96. </li><li> <a name="index-call-overloaded-functions"></a>
  97. <a name="index-overloaded-functions_002c-calling"></a>
  98. <a name="index-type-conversions-in-C_002b_002b"></a>
  99. You can call overloaded functions; <small>GDB</small> resolves the function
  100. call to the right definition, with some restrictions. <small>GDB</small> does not
  101. perform overload resolution involving user-defined type conversions,
  102. calls to constructors, or instantiations of templates that do not exist
  103. in the program. It also cannot handle ellipsis argument lists or
  104. default arguments.
  105. <p>It does perform integral conversions and promotions, floating-point
  106. promotions, arithmetic conversions, pointer conversions, conversions of
  107. class objects to base classes, and standard conversions such as those of
  108. functions or arrays to pointers; it requires an exact match on the
  109. number of function arguments.
  110. </p>
  111. <p>Overload resolution is always performed, unless you have specified
  112. <code>set overload-resolution off</code>. See <a href="Debugging-C-Plus-Plus.html#Debugging-C-Plus-Plus"><small>GDB</small> Features for C<tt>++</tt></a>.
  113. </p>
  114. <p>You must specify <code>set overload-resolution off</code> in order to use an
  115. explicit function signature to call an overloaded function, as in
  116. </p><div class="smallexample">
  117. <pre class="smallexample">p 'foo(char,int)'('x', 13)
  118. </pre></div>
  119. <p>The <small>GDB</small> command-completion facility can simplify this;
  120. see <a href="Completion.html#Completion">Command Completion</a>.
  121. </p>
  122. </li><li> <a name="index-reference-declarations"></a>
  123. <small>GDB</small> understands variables declared as C<tt>++</tt> lvalue or rvalue
  124. references; you can use them in expressions just as you do in C<tt>++</tt>
  125. source&mdash;they are automatically dereferenced.
  126. <p>In the parameter list shown when <small>GDB</small> displays a frame, the values of
  127. reference variables are not displayed (unlike other variables); this
  128. avoids clutter, since references are often used for large structures.
  129. The <em>address</em> of a reference variable is always shown, unless
  130. you have specified &lsquo;<samp>set print address off</samp>&rsquo;.
  131. </p>
  132. </li><li> <small>GDB</small> supports the C<tt>++</tt> name resolution operator <code>::</code>&mdash;your
  133. expressions can use it just as expressions in your program do. Since
  134. one scope may be defined in another, you can use <code>::</code> repeatedly if
  135. necessary, for example in an expression like
  136. &lsquo;<samp><var>scope1</var>::<var>scope2</var>::<var>name</var></samp>&rsquo;. <small>GDB</small> also allows
  137. resolving name scope by reference to source files, in both C and C<tt>++</tt>
  138. debugging (see <a href="Variables.html#Variables">Program Variables</a>).
  139. </li><li> <small>GDB</small> performs argument-dependent lookup, following the C<tt>++</tt>
  140. specification.
  141. </li></ol>
  142. <hr>
  143. <div class="header">
  144. <p>
  145. Next: <a href="C-Defaults.html#C-Defaults" accesskey="n" rel="next">C Defaults</a>, Previous: <a href="C-Constants.html#C-Constants" accesskey="p" rel="previous">C Constants</a>, Up: <a href="C.html#C" accesskey="u" rel="up">C</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
  146. </div>
  147. </body>
  148. </html>