簡體   English   中英

條件運算符可以返回引用?

[英]conditional operator can return reference?

我遇到了一行代碼,從未想過它可能會運行良好。 我認為條件運算符返回值並且不能與引用一起使用。

一些偽代碼:

#include <iostream>

using namespace std;

class A {
public:
  A(int input) : v(input) {};
  void print() const { cout << "print: " << v  << " @ " << this << endl; }
  int v;
private:
  //A A(const A&);
  //A operator=(const A&);
};

class C {
public:
  C(int in1, int in2): a(in1), b(in2) {}
  const A& getA() { return a;}
  const A& getB() { return b;}
  A a;
  A b;
};

int main() {
  bool test = false;
  C c(1,2);
  cout << "A @ " << &(c.getA()) << endl;
  cout << "B @ " << &(c.getB()) << endl;

  (test ? c.getA() : c.getB()).print();  // its working
}

誰能解釋一下? 謝謝。

你對條件運算符的假設是錯誤的。 表達式的類型是表達式c.getA()c.getB()具有的任何類型,如果它們具有相同的類型,並且如果它們表示左值,那么整個表達式也是如此。 (確切的規則在C ++標准的第5.16節中。)

你甚至可以這樣做:

(condition? a: b) = value;

有條件地將ab設置為value 請注意,這是特定於C ++的; 在C中,條件運算符不表示左值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM