蓝桥ROS机器人之现代C++学习笔记2.4 控制流

Posted zhangrelay

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥ROS机器人之现代C++学习笔记2.4 控制流相关的知识,希望对你有一定的参考价值。

if constexpr

#include <iostream>

template<typename T>
auto print_type_info(const T& t) 
    if constexpr (std::is_integral<T>::value) 
        return t + 1;
     else 
        return t + 0.001;
    


// at compiling time
// int print_type_info(const int& t) 
//     return t + 1;
// 
// double print_type_info(const double& t) 
//     return t + 0.001;
// 

int main() 
    std::cout << print_type_info(5) << std::endl;
    std::cout << print_type_info(3.14) << std::endl;

g++ -std=c++17 2.10.if.constexpr.cpp -o ifcon 

在如下这篇博客中介绍了这一类问题出现的原因:

☞ 蓝桥ROS机器人之现代C++学习笔记2.2变量及其初始化 

此处给出一个简单方式:

en.cppreference.com/w/cpp/language/constexpr

在此网页直接可以编译并运行代码:

更进一步:

coliru.stacked-crooked.com

比蓝桥ROS还快捷,毕竟这是专业学习C++的^_^ 


区间 for 迭代

#include <iostream>
#include <vector>
#include <algorithm>

int main() 
    std::vector<int> vec = 1, 2, 3, 4;
    if (auto itr = std::find(vec.begin(), vec.end(), 3); itr != vec.end()) *itr = 4;
    for (auto element : vec)
        std::cout << element << std::endl; // read only
    for (auto &element : vec) 
        element += 1;                      // writeable
    
    for (auto element : vec)
        std::cout << element << std::endl; // read only

(⊙﹏⊙)

 


shiyanlou:2/ (master*) $ g++ -std=c++17 2.10.if.constexpr.cpp -o ifcon
2.10.if.constexpr.cpp: In function \\u2018auto print_type_info(const T&)\\u2019:
2.10.if.constexpr.cpp:14:8: error: expected \\u2018(\\u2019 before \\u2018constexpr\\u2019
     if constexpr (std::is_integral<T>::value) 
        ^
2.10.if.constexpr.cpp:16:7: error: \\u2018else\\u2019 without a previous \\u2018if\\u2019
      else 
       ^
shiyanlou:2/ (master*) $ g++ -std=c++17 2.11.for.loop.cpp -o forloop [16:21:20]
2.11.for.loop.cpp: In function \\u2018int main()\\u2019:
2.11.for.loop.cpp:16:56: error: expected \\u2018)\\u2019 before \\u2018;\\u2019 token
     if (auto itr = std::find(vec.begin(), vec.end(), 3); itr != vec.end()) *itr
                                                        ^
2.11.for.loop.cpp:16:56: error: could not convert \\u2018itr\\u2019 from \\u2018__gnu_cxx::__normal_iterator<int*, std::vector<int> >\\u2019 to \\u2018bool\\u2019
2.11.for.loop.cpp:16:58: error: \\u2018itr\\u2019 was not declared in this scope
     if (auto itr = std::find(vec.begin(), vec.end(), 3); itr != vec.end()) *itr
                                                          ^
shiyanlou:2/ (master*) $                                             

 

 

以上是关于蓝桥ROS机器人之现代C++学习笔记2.4 控制流的主要内容,如果未能解决你的问题,请参考以下文章

蓝桥ROS机器人之现代C++学习笔记之路径规划

蓝桥ROS机器人之现代C++学习笔记2.5 模板

蓝桥ROS机器人之现代C++学习笔记7.3 期物

蓝桥ROS机器人之现代C++学习笔记资料

蓝桥ROS机器人之现代C++学习笔记3.1 Lambda 表达式

蓝桥ROS机器人之现代C++学习笔记7.5 内存模型