【发布时间】:2010-03-11 05:47:20
【问题描述】:
你可以编写预处理指令来返回一个 std::string 或 char* 吗?
例如:如果是整数:
#define square(x) (x*x)
int main()
{
int x = square(5);
}
我希望做同样的事情,但使用类似 switch-case 模式的字符串。如果通过 1 它应该返回 "One" 和 2 对于 "Two" 等等..
【问题讨论】:
-
为什么不只是一个普通的功能?
-
Martin 所说的 - 以及您的
square()宏示例说明了一个原因:很容易出错。square()宏应该更像#define square(x) ((x)*(x))以避免出现square(1 + 4)返回 9 而不是 25 之类的问题。即使使用该修复程序,也很难防止带有副作用的参数的错误行为。一个函数可以避免这些问题,并且可能不会对性能产生明显影响(特别是如果它可以设为inline)。 -
通过使用简单的宏或内联函数,是只在编译时或运行时才能达到性能吗?
标签: c++ c-preprocessor