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

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

我知道 C++ 没有很好的宏函数,但我发现了这个。

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

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

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

那么我的问题 - 这绝对安全吗?它会导致创建 "bad situation" 吗?

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

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

Live on Coliru

宏很少是安全的,所以更喜欢使用(如果可以的话)适当的函数,它是类型检查等。