这个用于写入任何数组内容的宏是否100%安全?c++11

Is this macro for writing out any array content 100 % safe? c++11

本文关键字:是否 100% 安全 c++11 用于 数组 任何      更新时间:2023-10-16

我知道C++不能很好地获得宏函数,但我发现了这一点。

#define show(array)              
    for (auto& x : (array))      
    std::cout << x << std::endl; 

我们不能用内联函数来替代这个宏,因为数组是作为指针发送给函数的,所以这是不可能的。这样,即使我们试图应用一些不雅的东西,也只会导致编译时错误(如果对象不可迭代),这是显而易见的:

'begin' was not declared in this scope: show(5);

那么我的问题是——这绝对安全吗?这会造成"糟糕的局面"吗?

可以使用100%C++模板函数,通过引用传递数组并推导其大小和类型,数组不会衰减为指针:

template<typename T, size_t N>
void print_arr(const T(&arr)[N])
{
    for(auto&& elem: arr)
        std::cout << elem;
}

在Coliru上直播

宏很少是安全的,所以更喜欢使用(如果可以的话)正确的函数,该函数是经过类型检查的。