Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

構造体は存在しない #65

Open
yumetodo opened this issue Nov 24, 2020 · 2 comments
Open

構造体は存在しない #65

yumetodo opened this issue Nov 24, 2020 · 2 comments

Comments

@yumetodo
Copy link
Contributor

https://rinatz.github.io/cpp-book/ch07-11-structs/
C++において構造体は存在しません。struct keywordとclass keywordではアクセス指定に差があるのみです。解説文自体は正しいですが、項目の存在自体が、C#のそれのようなものと誤認させます。つまりstructを構造体と翻訳することそのものに問題があります。

@yohhoy
Copy link

yohhoy commented Nov 27, 2020

C++において構造体は存在しません。struct keywordとclass keywordではアクセス指定に差があるのみ

厳密なC++言語仕様からみると、yumetodoさんの指摘通りです。しかし...

サイト趣旨や想定読者をどこに置くか次第ではありますが、慣習的に「構造体」と呼ばれることは紹介しても良いのではないでしょうか?
C言語仕様(JIS X 3010)では structによる型 を「構造体型」と呼称しており、歴史的経緯からC++でも同名称が使われるケースは散見されます。それらを誤りであると断じることが得策とも思えません。

以下をページ趣旨とすればよいのではと思います:

  • C++では classstruct はいずれもクラス型を宣言する。両者の差異はデフォルトアクセス制御だけである。
  • struct で宣言されるクラス型は、C言語からの歴史的経緯により慣習的に構造体と呼ばれこともある。
  • classstruct の使い分けはコーディング規約に従えばよい。
    • (目安を示すなら)内部実装を隠蔽し外部操作のみを公開するオブジェクト指向設計的なクラスは class を、関連するデータを集約して管理する目的であれば struct を使う。

@rinatz
Copy link
Owner

rinatz commented Nov 27, 2020

経験的にネットリソースやコードを読んだ初学者は
classstruct は別物だと思っていたと、かなりの頻度で言ってきます。
Google C++ Style Guide のように、それらに異なるセマンティクスを与えて使い分けているのも混乱の一つとなっています。
本質的に同じなら何で存在するんだ、という話もされます。

この辺ちゃんと説明して正しい理解をした上で使ってほしいという思いはありますね。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants