What & How & Why

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
cs:programming:cpp:courses:cpp_basic_deep:chpt_2 [2024/08/11 03:41] – [extern keyword] codingharecs:programming:cpp:courses:cpp_basic_deep:chpt_2 [2024/08/11 03:50] (当前版本) – [常量表达式指针] codinghare
行 242: 行 242:
 ==指针的引用== ==指针的引用==
   * 指针是对象,因此存在指针的引用:   * 指针是对象,因此存在指针的引用:
-  * 引用不是对象,因此不存在引用的+  * 引用不是对象,因此不存在引用的
 <code cpp> <code cpp>
 int* &refPx = ptr; int* &refPx = ptr;
行 305: 行 305:
 // y1 是在运行期确定的(运行期常量) // y1 是在运行期确定的(运行期常量)
 const int y1 = y; const int y1 = y;
-// y2 是在编译期确定的(编译常量)+// y2 是在编译期确定的(编译常量)
 const int y2 = 3; const int y2 = 3;
 </code> </code>
行 311: 行 311:
   * ''y1'' 会以“期待运行期有输入的”方式进行汇编   * ''y1'' 会以“期待运行期有输入的”方式进行汇编
   * ''y2'' 对编译器可见,那么 ''y2 == 3'' 一定为真。因此,编译器不会进行 ''if'' 的判断,而会直接执行该 if 下的代码段。(优化)   * ''y2'' 对编译器可见,那么 ''y2 == 3'' 一定为真。因此,编译器不会进行 ''if'' 的判断,而会直接执行该 if 下的代码段。(优化)
-也就是说,编译器常量是可以被编译器优化的。这也是常量表达式的由来:C++ 11 中通过 ''constexpr'' 关键字,将常量直接声明为**编译期量**。也就是说,上述的 ''const int y2 = 3'' 可以写为:+也就是说,编译器常量是可以被编译器优化的。这也是常量表达式的由来:C++ 11 中通过 ''constexpr'' 关键字,将常量直接声明为**编译期量**。也就是说,上述的 ''const int y2 = 3'' 可以写为:
 <code cpp> <code cpp>
 // y2 被显式的声明为编译期常量 // y2 被显式的声明为编译期常量
行 319: 行 319:
 </code> </code>
 ==常量表达式指针== ==常量表达式指针==
-指针也可以作为编译常量。这种情况下,需要满足两个条件:+指针也可以作为编译常量。这种情况下,需要满足两个条件:
   * 指针是常量   * 指针是常量
   * 指针指向的内容也是常量   * 指针指向的内容也是常量
-只有满足这两个条件,指针才能作为编译常量对编译器可见。也就是说,这种情况下的指针类型是 ''const type* const''+只有满足这两个条件,指针才能作为编译常量对编译器可见。也就是说,这种情况下的指针类型是 ''const type* const''
 <code cpp> <code cpp>
 constexpr const int* ptr = nullptr; constexpr const int* ptr = nullptr;