蓝桥ROS机器人之现代C++学习笔记2.1常量

举报
zhangrelay 发表于 2022/04/01 00:15:10 2022/04/01
【摘要】   nullptr C++11 引入了 nullptr 关键字,专门用来区分空指针、0。 #include <iostream>#include <type_traits> void foo(char *);void foo(int); int main() { if (std::is_...

 

nullptr

C++11 引入了 nullptr 关键字,专门用来区分空指针、0。


  
  1. #include <iostream>
  2. #include <type_traits>
  3. void foo(char *);
  4. void foo(int);
  5. int main() {
  6. if (std::is_same<decltype(NULL), decltype(0)>::value)
  7. std::cout << "NULL == 0" << std::endl;
  8. if (std::is_same<decltype(NULL), decltype((void*)0)>::value)
  9. std::cout << "NULL == (void *)0" << std::endl;
  10. if (std::is_same<decltype(NULL), std::nullptr_t>::value)
  11. std::cout << "NULL == nullptr" << std::endl;
  12. foo(0); // will call foo(int)
  13. // foo(NULL); // doesn't compile
  14. foo(nullptr); // will call foo(char*)
  15. return 0;
  16. }
  17. void foo(char *) {
  18. std::cout << "foo(char*) is called" << std::endl;
  19. }
  20. void foo(int i) {
  21. std::cout << "foo(int) is called" << std::endl;
  22. }

 g++ -std=c++17 2.01.nullptr.cpp -o nullptr.out


constexpr


  
  1. #include <iostream>
  2. #define LEN 10
  3. int len_foo() {
  4. int i = 2;
  5. return i;
  6. }
  7. constexpr int len_foo_constexpr() {
  8. return 5;
  9. }
  10. // error in c++11
  11. // constexpr int fibonacci(const int n) {
  12. // if(n == 1) return 1;
  13. // if(n == 2) return 1;
  14. // return fibonacci(n-1) + fibonacci(n-2);
  15. // }
  16. // ok
  17. constexpr int fibonacci(const int n) {
  18. return n == 1 || n == 2 ? 1 : fibonacci(n-1) + fibonacci(n-2);
  19. }
  20. int main() {
  21. char arr_1[10]; // legal
  22. char arr_2[LEN]; // legal
  23. int len = 10;
  24. // char arr_3[len]; // illegal
  25. const int len_2 = len + 1;
  26. constexpr int len_2_constexpr = 1 + 2 + 3;
  27. // char arr_4[len_2]; // illegal, but ok for most of the compilers
  28. char arr_4[len_2_constexpr]; // legal
  29. // char arr_5[len_foo()+5]; // illegal
  30. char arr_6[len_foo_constexpr() + 1]; // legal
  31. // 1, 1, 2, 3, 5, 8, 13, 21, 34, 55
  32. std::cout << fibonacci(10) << std::endl;
  33. return 0;
  34. }

 g++ -std=c++17 2.02.constexpr.cpp -o constexpr.out

如果需要都输出加个循环即可;

 

 


  
  1. for(int i=1;i<11;i++)
  2. {
  3. std::cout << fibonacci(i) << std::endl;
  4. }

 

 

 

文章来源: zhangrelay.blog.csdn.net,作者:zhangrelay,版权归原作者所有,如需转载,请联系作者。

原文链接:zhangrelay.blog.csdn.net/article/details/123858807

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。