More Related Content
Similar to Effective modern C++ 勉強会 #3 Item 12
Similar to Effective modern C++ 勉強会 #3 Item 12 (20)
Effective modern C++ 勉強会 #3 Item 12
- 5. reference qualifierの例
class Widget {
public:
using DataType = std::vector<double>;
DataType &data() { return values; }
private:
DataType values;
};
...
// Widgetを作る関数
Widget makeWidget();
// ふつう
Widget w;
auto vals1 = w.data();
// Widgetオブジェクトは右辺値なので
// vectorのコピーが無駄
auto vals2 = makeWidget().data();
- 6. reference qualifierの例
class Widget {
public:
using DataType = std::vector<double>;
DataType &data() & { return values; }
DataType data() && {
return std::move(values);
}
private:
DataType values;
};
// lvalue overloadが呼ばれる
Widget w;
auto vals1 = w.data();
// rvalue overloadが呼ばれる
auto vals2 = makeWidget().data();
- 11. 間違いの例
class Base {
public:
virtual void mf1() const;
virtual void mf2(int x);
virtual void mf3() &;
void mf4() const;
};
class Drived : public Base {
public:
virtual void mf1();
virtual void mf2(unsigned int x);
virtual void mf3() &&;
void mf4() const;
};
- 12. 間違いの例
class Base {
public:
virtual void mf1() const;
virtual void mf2(int x);
virtual void mf3() &;
void mf4() const;
};
class Drived : public Base {
public:
virtual void mf1();
virtual void mf2(unsigned int x);
virtual void mf3() &&;
void mf4() const;
};
const qualifierが違う
- 13. 間違いの例
class Base {
public:
virtual void mf1() const;
virtual void mf2(int x);
virtual void mf3() &;
void mf4() const;
};
class Drived : public Base {
public:
virtual void mf1();
virtual void mf2(unsigned int x);
virtual void mf3() &&;
void mf4() const;
};
const qualifierが違う
仮引数の型が違う
- 14. 間違いの例
class Base {
public:
virtual void mf1() const;
virtual void mf2(int x);
virtual void mf3() &;
void mf4() const;
};
class Drived : public Base {
public:
virtual void mf1();
virtual void mf2(unsigned int x);
virtual void mf3() &&;
void mf4() const;
};
const qualifierが違う
仮引数の型が違う
reference qualifierが違う
- 15. 間違いの例
class Base {
public:
virtual void mf1() const;
virtual void mf2(int x);
virtual void mf3() &;
void mf4() const;
};
class Drived : public Base {
public:
virtual void mf1();
virtual void mf2(unsigned int x);
virtual void mf3() &&;
void mf4() const;
};
const qualifierが違う
仮引数の型が違う
reference qualifierが違う
基底クラスでvirtual宣言を忘れている
Editor's Notes
-
----- 会議メモ (3/25/15 19:24) -----
来てクラスでの&の有無