蓝桥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。


      #include <iostream>
      #include <type_traits>
      void foo(char *);
      void foo(int);
      int main() {
         if (std::is_same<decltype(NULL), decltype(0)>::value)
              std::cout << "NULL == 0" << std::endl;
         if (std::is_same<decltype(NULL), decltype((void*)0)>::value)
              std::cout << "NULL == (void *)0" << std::endl;
         if (std::is_same<decltype(NULL), std::nullptr_t>::value)
              std::cout << "NULL == nullptr" << std::endl;
         foo(0);          // will call foo(int)
         // foo(NULL); // doesn't compile
         foo(nullptr);    // will call foo(char*)
         return 0;
      }
      void foo(char *) {
          std::cout << "foo(char*) is called" << std::endl;
      }
      void foo(int i) {
          std::cout << "foo(int) is called" << std::endl;
      }
  
 

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


constexpr


      #include <iostream>
      #define LEN 10
      int len_foo() {
         int i = 2;
         return i;
      }
      constexpr int len_foo_constexpr() {
         return 5;
      }
      // error in c++11
      // constexpr int fibonacci(const int n) {
      // if(n == 1) return 1;
      // if(n == 2) return 1;
      // return fibonacci(n-1) + fibonacci(n-2);
      // }
      // ok
      constexpr int fibonacci(const int n) {
         return n == 1 || n == 2 ? 1 : fibonacci(n-1) + fibonacci(n-2);
      }
      int main() {
         char arr_1[10];                      // legal
         char arr_2[LEN];                     // legal
         int len = 10;
         // char arr_3[len]; // illegal
         const int len_2 = len + 1;
         constexpr int len_2_constexpr = 1 + 2 + 3;
         // char arr_4[len_2]; // illegal, but ok for most of the compilers
         char arr_4[len_2_constexpr];         // legal
         // char arr_5[len_foo()+5]; // illegal
         char arr_6[len_foo_constexpr() + 1]; // legal
         // 1, 1, 2, 3, 5, 8, 13, 21, 34, 55
          std::cout << fibonacci(10) << std::endl;
         return 0;
      }
  
 

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

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

 

 


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

 

 

 

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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