模板
详见我的博客 【笔记】 C++ 模板(template)。
宏定义
Example 1
#define PI 3.1415926535
现在的 Visual Studio 提示可以用
constexpr double PI = 3.1415926535;
来代替。
Example 2
#define me (*this)
Example 3(多行的define
)
(功能,遍历矩阵所有元素)
#define enumMatrix(m, p) \
for(int __y__ = 0; __y__ < m.GetRowCount(); ++__y__) \
{ \
for (int __x__ = 0; __x__ < m.GetCilCount(); ++__x__) \
{ \
auto& p = m[__y__][__x__];
#define enumMatrixEnd }}
(做求和的一个例子:)
Matrix<double> m; // 定义的矩阵类(二维数组或者vector<vector<T>>也可以)
double sum = 0;
enumMatrix(m, p)
{
sum += p;
}
enumMatrixEnd;
- 注意反斜杠后不要有空格。
- 现在的 Visual Studio 提示可以用
inline function
代替。
Warning
慎用宏定义!牢记宏定义只是字面替换!!!下面举一个典型的错误示例:
#define add(a, b) a + b
/* do something */
int c = add(a, b) * 3;
此时该式实际表示:
int c = a + b * 3;
所以括号一定要加好。
如果用 inline 函数的写法:
inline int add(a, b) // if you are not sure of the type, you can use the tmplate
{
return a + b;
}
/* do something */
int c = add(a, b) * 3;
这样的函数虽然也是替换,不过不完全是字面替换,是保证先后率的;与一般函数的区别在于这并没有分配新的内存进行计算,而是在原来的地方加上这些运算。
ALL RIGHTS RESERVED © 2020 Teddy van Jerry
欢迎转载,转载请注明出处。