C++具有不同类型作为参数的条件运算符

JSh*_*hoe 1 c++ pointers conditional-operator

我正在尝试在int和*节点上使用条件运算符(?)(节点是自定义结构).这是我的代码,以及由此产生的错误.

节点:

struct node {
  int num;
  node *next;
};
Run Code Online (Sandbox Code Playgroud)

条件实施:

void PrintNodes(node *head_p) {
  int done = 0;
  while (!done) {
    PrintNodeData(head_p);
    // if (head_p->next==NULL) {
    //   done++;
    // } else {
    //   head_p++;
    // }
    ((head_p->next==NULL) ? done : head_p)++;
  }
}
Run Code Online (Sandbox Code Playgroud)

if...then...else在条件语句上面的注释中有相同的声明,我只想将其修剪为一行.

编辑

错误:

test.cc: In function ‘void PrintNodes(node*)’:
test.cc:28:36: error: operands to ?: have different types ‘int’ and ‘node*’
make: *** [all] Error 1
Run Code Online (Sandbox Code Playgroud)

And*_*owl 6

我在条件语句上面的注释中有等效的if ... then ... else语句,我只想将其修剪为一行.

不要这样做.首先,因为它会使您的代码不必要地更难阅读.其次,因为条件运算符中的两个表达式的类型都不能转换为另一个表达式的类型.

根据C++ 11标准的第5.16/3段:

[...]如果第二个和第三个操作数具有不同的类型并且具有(可能是cv限定的)类类型,或者如果两者都是相同值类别的glvalues和除cv-qualification之外的相同类型,则尝试将每个操作数转换为另一个操作数的类型.[...]


Seb*_*edl 5

只是不要.做明确的事情.

答案很长的答案是C++有一个类型系统,而你试图做的事情违反了它.