13,009
回編集
(→メソッド) |
|||
81行目: | 81行目: | ||
double area() { | double area() { | ||
return width * height; | return width * height; | ||
} | |||
}; | |||
</syntaxhighlight> | |||
<br><br> | |||
== 匿名構造体 == | |||
C++11以降では、構造体に名前のない入れ子構造体を定義することができる。<br> | |||
<syntaxhighlight lang="c++"> | |||
struct OuterStruct { | |||
int x; | |||
struct { | |||
int y; | |||
int z; | |||
}; | |||
}; | |||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="c++"> | |||
OuterStruct os; | |||
os.x = 1; | |||
os.y = 2; // 直接アクセス可能 | |||
</syntaxhighlight> | |||
<br><br> | |||
== 構造体のムーブセマンティクス == | |||
C++11以降では、構造体にムーブコンストラクタとムーブ代入演算子を定義することができる。<br> | |||
<syntaxhighlight lang="c++"> | |||
struct Resource { | |||
std::unique_ptr<int> data; | |||
Resource(Resource&& other) noexcept : data(std::move(other.data)) | |||
{} | |||
Resource& operator=(Resource&& other) noexcept | |||
{ | |||
if (this != &other) { | |||
data = std::move(other.data); | |||
} | |||
return *this; | |||
} | } | ||
}; | }; |