【发布时间】:2017-05-31 05:41:34
【问题描述】:
g++ -std=c++11 编译器编译以下代码失败。
# include<iostream>
# include<vector>
using namespace std;
# define stlf(x) x.begin(), x.end()
# define repf(it, a, b) for(auto it = a ; it != b ; ++it)
/*
// Also, following alternative fails
# define repf(it, a, b) for(auto it = a ; it != b ; ++it)
# define stlf(x) x.begin(), x.end()
*/
typedef vector<int > vi;
# define pd(x) printf("%d", x);
int main(void){
vi arr(10, -1);
repf(arr, stlf(arr))
pd(arr[i]);
return 0;
}
1.为什么会这样?
2. 对于 C++ 预处理器的实现者来说,他们避免了这个特性可能是什么实现问题?
3.我怎样才能使用这样的快捷方式??
【问题讨论】:
-
你最好避免这样的“捷径”,它只会让别人难以阅读你的代码
标签: c++ c++11 macros c-preprocessor