我想将(var-1) > 0? var - 1: 0定义为内联替换。比如
#define MAX(VAR) as (VAR-1) > 0? VAR- 1: 0
像using之类的吗?
发布于 2021-11-24 09:27:58
您定义了一个函数,并将其留给实现来适当地内联它。
 constexpr int max(int var) { return (var - 1) > 0 ? (var - 1) : 0; }旁白:max不是一个很好的名字,我建议使用像clamp_positive这样的名字
发布于 2021-11-24 09:31:47
您可以使用inline关键字:
inline int max(int var) 
{ 
    return (var - 1) > 0 ? (var - 1) : 0; 
}但是,这不会强制内联,它只是建议编译器应该使此函数内联。即使您不使用inline关键字,编译器也可以拒绝您的建议,或者使其内联
发布于 2021-11-24 09:25:40
语法是#定义,因为预处理器是简单的
#define Name(...args) (replacement)不使用as或=
所以你的定义应该是
#define MAX(VAR) (VAR-1) > 0? VAR- 1: 0在我的经验中,我总是发现像这样的定义用括号包装是很有用的,以避免歧义,你永远不知道它会被替换在哪里,例如MAX(x)*5会给出与MAX(x)相同的(x-1) > 0 ? x-1 : 0*5。
#define MAX(VAR) ((VAR-1) > 0? VAR- 1: 0)如果您想要使用注释中建议的函数
int MAX(int v){
  return (v-1)>0? v-1:0;
}或者作为模板函数
template<typename Tp>
Tp MAX(const _Tp &v){
  return (v-1)>0? v-1:0;
}https://stackoverflow.com/questions/70093402
复制相似问题