C++相談室 part131 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/07/29(土) 11:28:28.97ID:o30VDF4g0
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part130
http://mevius.2ch.net/test/read.cgi/tech/1490917669/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.100【環境依存OK】
http://echo.2ch.net/test/read.cgi/tech/1478440682/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
-
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
2017/07/29(土) 11:31:44.83ID:o30VDF4g0
C/C++室のURLはこちらが正しいです。ごめんなさい。
【初心者歓迎】C/C++室 Ver.101【環境依存OK】 [無断転載禁止]©2ch.net
http://mevius.2ch.net/test/read.cgi/tech/1500329247/
2017/07/29(土) 12:46:26.94ID:Gw88XuqA0
2 名前:デフォルトの名無しさん (ワッチョイ bf54-lR6P)[sage] 投稿日:2017/03/31(金) 16:52:18.52 ID:CoeIAoH10
STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

#include <stdafx.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。

---- テンプレ ここまで ----
2017/07/29(土) 17:38:08.78ID:O6R2q/bm0
うむごくろう
5デフォルトの名無しさん (ワッチョイ 738e-PRKf)
垢版 |
2017/07/29(土) 17:57:29.77ID:mj0H/MXI0
>>1
乙TL
2017/07/29(土) 22:23:56.70ID:E0esoNX5r
日付がミスリーディングなクソレスを貼る>>3は無能
2017/07/30(日) 02:31:41.53ID:xlcIQQjmd
>>1

CからC++の学習に進もうと思ってるんだけど、皆さんオススメの書籍とかWebとか有ったら教えてちょ
2017/07/30(日) 06:50:23.38ID:qWNYkf/a0
やめとけやめとけ
Cでリスト構造あたりがすらすら書けるようになったならC#にしとけ。

生産性あがらずそっぽ向かれてるのに、
ムーブコンストラクタとか、コード増えて、さらに生産性低下。
完全にオナニー規格で、自分でとどめ刺した。
まるで民進党の蓮ポ
2017/07/30(日) 07:41:41.24ID:qWNYkf/a0
>>7
https://is.muni.cz/www/408176/38744863/The_C__Programming_Language__Stroustrup_.pdf
http://freepdf-books.com/download/?file=4620
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf

https://msdn.microsoft.com/ja-jp/library/hh567368.aspx
2017/07/30(日) 07:46:18.32ID:qWNYkf/a0
11と14のドラフトあげてしもた
Straustrap 4thと14でいいと思う
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3690.pdf
2017/07/30(日) 10:19:14.54ID:tzTloLFVd
ツンデレID:qWNYkf/a0さんありがとw
だがしかし、原文のまま進めるには10倍くらい労力使いそうなんで、出来たら日本語でお願いします!
2017/07/30(日) 10:30:55.09ID:HMlHttTQ0
CプログラマのためのC++入門って本が解りやすかった
2017/07/30(日) 10:57:13.10ID:qWNYkf/a0
プログラミング言語C++と言いたいところだが、C++11で止まってるとこらがもうね。
vol3まで原書と邦訳つきあってきたけど、もう気力も失せたわ。
可能性を期待してたの90年代前半 ANSI時代までだな。
電話帳より分厚い言語解説本て。多分完全理解した頃エンジニア生命終わってるわ
2017/07/30(日) 11:11:05.70ID:HMlHttTQ0
最新の情報はテメェで調べりゃいいんでねぇの?
まず基本という基礎固めが重要だろ
Cプログラマでやってきた奴に総てを全うさせるのは荷がおもすぎるだろ
2017/07/30(日) 12:15:54.41ID:Csv1BA330
今から学ぼうとする人に規格のドラフトとかどんな苦行だよ
やっぱりロベールしかないな
2017/07/30(日) 12:20:04.23ID:tzTloLFVd
( ̄▽ ̄;)
2017/07/30(日) 12:26:14.76ID:HMlHttTQ0
http://www.saiensu.co.jp/?page=book_details&;ISBN=ISBN4-7819-0649-4
みっけた。コレだわ。
コレ読んだあとにSTLの分厚いの読むと解りやすかった。
2017/07/30(日) 12:30:36.64ID:IhAKIxVt0
サイエンス社ってそんなドメインだったんだw
2017/07/30(日) 12:59:03.24ID:Y5XJTDyYM
コピーライト表記が SAIENSU-SHA Co., Ltd. だからね
2017/07/30(日) 13:30:09.73ID:QmN4gyGx0
正しい綴りにすると、別の企業サイトに行ってしまった
2017/07/30(日) 13:33:44.51ID:NhWYDB7J0
>>7
「詳説C++ 第2版」がオススメ
http://amzn.asia/fb29pvT
ただ、 C++03 を前提にした範囲のことしか書いてない (出版年が 2005 年だから仕方がないけど) ので、
差分はウェブ上のリファレンスで補うと良し。
https://cpprefjp.github.io/
2017/07/30(日) 14:30:07.95ID:tzTloLFVd
>>17
>>21
なるほど。
どちらも古そうな本ですが、参考にさせていただきます。有難う御座いました。
2017/08/02(水) 05:09:58.76ID:QkMqJWKd0
>>17
一から勉強する初心者に、
使いにくいだけの過去規格の遺物勧めて何したいんだ。
C++1xとANSI時代のC++は別物だ
24デフォルトの名無しさん (ワッチョイ 7357-PRKf)
垢版 |
2017/08/02(水) 08:31:16.93ID:j5kUV6O90
でもC/C++は互換性をかなり重視してくれているから、時系列に沿って勉強しても無駄ではない気がする。
っていうか、いきなりC++14勉強するのは辛いんじゃねって気がする。
2017/08/02(水) 09:22:34.98ID:dMb9Yx4tM
便利機能無しで学習するのはストレス溜まる。
わざわざそんな縛りプレーすることないわ。
2017/08/02(水) 09:30:57.66ID:TRQYVkPNd
常識とされていたことも変化しているからね
2017/08/02(水) 10:47:19.91ID:5aiRdv7G0
便利過ぎても自活力落ちるけどな
28デフォルトの名無しさん (ワッチョイ a311-lyvM)
垢版 |
2017/08/02(水) 11:37:56.91ID:Mxrfj49o0
Effective C++ 第3版持っている人に質問
33項に書いてある「仕事を送る関数」なんだが
private継承しているのに、なんで派生クラスで基底クラスの関数を呼び出せるの?
inline関数ってところが関係しているのだろうか
2017/08/02(水) 11:39:16.93ID:Mxrfj49o0
ごめん補足
質問の箇所は33項 p.169ね
よろしくお願いします
2017/08/02(水) 12:22:32.52ID:SX9kgwib0
なんでもなにもprivate継承した基底クラスのpublicメンバは
派生クラスのprivateメンバ的扱いになるので
派生クラスの中では自由にアクセスできる
2017/08/02(水) 15:29:32.86ID:Mxrfj49o0
>>30
マジか……恥ずかしながらそんな基本的なこともわかってなかった
ありがとうございます
2017/08/02(水) 19:58:27.29ID:uVXFZ8FT0
穴を掘って入ろう
2017/08/02(水) 23:27:31.39ID:mLUoAaJZM
private基底とメンバ変数、機能的な違いはあるのかしらん?
2017/08/02(水) 23:30:18.47ID:wZt34zOG0
俺もprivateとpublicって積的関係かと思ってた
private継承とか使わんからな
2017/08/02(水) 23:30:19.78ID:84D7BovY0
基底クラスへは問答無用でキャストできる。
2017/08/02(水) 23:32:57.07ID:84D7BovY0
>>34
private 継承している場合は基底にキャストできない。
スライシングを起こしたくない場合には private 継承した上で
一部のメンバを using で公開するというようなテクニックもある。
2017/08/02(水) 23:34:00.01ID:mLUoAaJZM
おお、スライシング問題抱える訳ですな。使わないのが無難か……
2017/08/02(水) 23:40:10.88ID:mLUoAaJZM
あ、キャストできないが正解か。
private基底は実装を楽する手段かね。
2017/08/02(水) 23:42:51.57ID:wZt34zOG0
つまり例えばstd::vectorクラスを継承したクラスを作って
間違ってアップキャスト扠せたくない場合なんかに使うイメージか
2017/08/03(木) 01:39:28.66ID:3NxHKcnN0
vector自身をprivateにしたい場合はprivate継承
vectorのメンバを露出させたい場合はprotected継承
41デフォルトの名無しさん (ブーイモ MMc1-mf2b)
垢版 |
2017/08/03(木) 12:34:54.88ID:NztkOdZ3M
セマンティクス的には、
public継承はis-a関係
private継承はhas-a関係
2017/08/03(木) 12:53:23.95ID:tXFHDIDud
外から見たら、ね
2017/08/03(木) 22:13:12.27ID:YAnw1OKB0
リンゴとパイナップルとペンが入ったフルーツバスケットは
リンゴクラスとパイナップルクラスとペンクラスの多重private継承なんや
2017/08/04(金) 23:30:18.50ID:W4109686r
「private継承」とい言葉を見るとC++17ドラフトのUNKOなライブラリ設計しか思い浮かばない
2017/08/05(土) 06:26:48.70ID:IjGvtKjI0
メンバも含めてprivateなものの用途を詮索してもしょうがない
2017/08/05(土) 08:18:04.82ID:Oj6J0tUu0
誰か個人資産をpublicで公開してくれないかなぁ
2017/08/05(土) 10:59:21.66ID:q0G0ffZoM
2000年頃貯めた資産なので引き出せる紙幣はコピーだがよいか?
48デフォルトの名無しさん (アウアウエー Sa2b-690I)
垢版 |
2017/08/06(日) 11:38:12.92ID:57DyNeACa
>>46
あなたのその文字も立派な個人資産。
ここに書いた瞬間2chに帰属するが。
2017/08/06(日) 19:15:12.69ID:/2i5R4CKr
このスレのレスで資産と呼べるのは
PostMessageでメモリ不足を検知するノウハウと
プライベートメンバーをアクセスする技くらいのものだ
2017/08/06(日) 19:28:38.68ID:OFkcQ32C0
>>49
>プライベートメンバーをアクセスする技くらいのものだ
え,それって private メンバのアドレスを返して外からアクセスするってやつ?
2017/08/06(日) 19:31:25.78ID:7dbJmn2Z0
違うだろ
それにネタ元はここじゃないし
52デフォルトの名無しさん (ワッチョイ 49ad-mf2b)
垢版 |
2017/08/06(日) 20:55:29.92ID:BHhmDaJC0
>>50
privateをpublicでdefineするやつじゃ?
2017/08/06(日) 21:20:19.11ID:/2i5R4CKr
>>50
微妙に違うような
アクセス制御が適用されない文脈でメンバーへのポインターやstatic変数のポインターを取得してアクセスする手法
2017/08/07(月) 16:40:58.08ID:Y4YBisBB0
>>50 >>53
http://mevius.2ch.net/test/read.cgi/tech/1434079972/22
2017/08/07(月) 22:34:19.58ID:MakITfYKr
privateをpublicでdefineするのは潔くてカッコいいが
>>54は全てが糞すぎる
2017/08/07(月) 22:43:25.92ID:qpBf+1aM0
しかも既存のクラスに普通に手入れてるしね
2017/08/08(火) 07:52:39.36ID:CWtfXRt70
>>55
具体的に
2017/08/08(火) 08:21:06.59ID:RV4q7wpsr
>>57
うむ、こんなところだろう
1.既存のクラスに普通に手入れている
2.それは違うと>>53で言っているのに投下されるアスペなレス
3.privateな変数にアクセスするかと思いきや、privateな変数を出力するprivateな関数を呼び出すという意味の無い構成
4.deleteを使用するUNKOなコード
5.newを使用する残念なコード
6.コードへのリンクを投下するのでなくクソスレを経由するクソレス
7.例外安全でない
8.非staticにする必要性が感じられない
9.「(hoge->*(hoge->g()))();」というブザマな呼び出し方
2017/08/09(水) 18:36:43.63ID:UcwPIhci0
>>58
https://ideone.com/Y4LPCV

改善:3, 4, 5, 6, 7
保留:1, 2, 8, 9
2017/08/09(水) 18:40:37.13ID:hewgQardr
いやそこは無視するだろ普通

>hoge.get()->*(hoge->g2()) = 54321;
もう何が何だか…
61C言語ますたー《ますたー軍団(常時募集)の長》 ◆oa6k//3vOQ (ラクッペ MMaf-bbbG)
垢版 |
2017/08/09(水) 18:43:38.11ID:s1XZJ5NhM
読んでないけどg()は関数ポインタを返す関数?
設計からしてダメだろ
2017/08/09(水) 18:53:35.78ID:VsUePcYe0
既存のクラスに手を入れてる時点でキモイ。
それならもっとやりようあるでしょ。
2017/08/09(水) 19:13:08.58ID:UcwPIhci0
>>61
メンバのオフセット(たぶん) ->* ::* 使用前提のやつ
>>59 は一箇所どうにもこうにもならないので放置している部分がある
ともかく笑いのネタというより他にない
2017/08/10(木) 10:59:10.70ID:vqPWBCRZr
>>63
遠慮せずともじゃんじゃんプライベートにアクセスしてよいぞ
http://ideone.com/BJHsgK
2017/08/10(木) 11:21:25.23ID:eseR3mB40
>>63
オフセットして実装するのが普通だと思うけど、メンバ変数へのポインタがオフセットで実装されるとは決まってないんじゃないの?
2017/08/11(金) 13:08:18.43ID:rA3728Ge0
C++の場合クラス(およびその基底クラス)内のメンバは全部ヘッダファイルを辿っていけばワカルのだから
まず全く同じ内容のヘッダファイルのコピーを作り、
ファイル名を適当に変えて、多重インクルード箇所もコピーしたもので閉じるように変更して、
privateやprotectedを全部publicにして、
クラスの名前をFoo→Foo2とか改変して、
仮想関数は適当に空の定義でもつけて、
 ((Foo2*)p)->(Fooのデータメンバ)
式にキャストしてアクセスすればデータメンバと仮想関数については問題なくアクセスできる

(ODR違反は都市伝説なので事実上これで動く
 だいたいprivate破りを意図している時点で実コードレベルで影響しない規約とか気にしても仕方が無い
2017/08/11(金) 13:10:51.21ID:rA3728Ge0
Foo2の仮想関数が空ではないか、というのは動作上問題にならない
vtableのしくみがわかっているならワカル以下略

一方非仮想関数の方はちょっとうまい方法が思いつかない…
private属性のメンバ関数のアドレスがとれれば勝つるのだが
2017/08/11(金) 15:28:00.96ID:CTzRRQx/0
class Base {
public:
Base() {};
virtual void func() {};
};

class Sub: public Base {
public:
Sub() {};
virtual void func() {};
};

Sub a();
std::vector<Base> b;
b.push_back(a);
b[0].func();
これだと継承前のBaseのfuncが実行されてSubのfuncが実行されないんですが
Subのfuncを実行するにはどうしたらいいですか
2017/08/11(金) 15:45:01.75ID:GPxw37uF0
そりゃpushするときにBaseへの暗黙の型変換かかるからダメっしょ
ポインタつかえよBaseの
70デフォルトの名無しさん (ワッチョイ 1a49-d9WE)
垢版 |
2017/08/11(金) 15:47:46.79ID:L0uHlCp20
>>68
そのコード本当に動く?
本質じゃなくて申し訳ないが、そのまま追試出来るコードじゃないと…

ちなみに質問の回答はスライスな。
2017/08/11(金) 15:57:28.65ID:GPxw37uF0
おかしいな、確かに
コピーコンストラクタもないのにコンパイラ通るのかコレ
72デフォルトの名無しさん (ワッチョイ 1a49-d9WE)
垢版 |
2017/08/11(金) 16:00:31.30ID:L0uHlCp20
コピコンは省略可能だよー。
2017/08/11(金) 16:11:31.54ID:CTzRRQx/0
>>69
ありがとうございます
ポインタにすることで解決しました
>>70-71
動かしてるコードを簡略化したのでもしかしたら動かないかもしれないです
2017/08/11(金) 16:51:11.96ID:+GdUPlS/r
「本当に動く? (中略) そのまま追試出来るコードじゃないと…」
 ↓
「もしかしたら動かないかもしれない」
これがアスペというやつだな
2017/08/11(金) 16:54:58.31ID:mfxycmdp0
会話としては成り立ってる
2017/08/11(金) 17:09:12.83ID:MFH9oRFs0
この言語はどこの業務で使われてるの?
組み込み・制御はC++使ってますとか言いながら大体これCじゃん!だから論外として
2017/08/11(金) 17:11:30.49ID:Ca8C76qb0
gcc が c++ で書き直された、という話はあったな
2017/08/11(金) 17:29:47.32ID:fw1fdXf30
>>76
https://github.com/search?utf8=%E2%9C%93&;q=language%3AC%2B%2B+stars%3A%3E%3D1000&type=Repositories
2017/08/11(金) 18:02:24.77ID:bpB/tg4h0
Webブラウザとかゲームとか
2017/08/11(金) 18:34:36.55ID:eZ0/1svY0
>>76
Better C として使ってもええんやで
2017/08/11(金) 19:29:34.92ID:rA3728Ge0
>>76
Simulaの置き換え
2017/08/11(金) 20:50:37.74ID:W25jNYVm0
C言語としてg++使ってる
2017/08/11(金) 21:45:37.12ID:U5fbDsCj0
ウチじゃモータ制御に使ってるな
84デフォルトの名無しさん (ワッチョイ 7665-KsLg)
垢版 |
2017/08/12(土) 16:56:14.99ID:srjAo6Ap0
質問です。

宣言は、全ての要素に対して必要なのですか?

n = a+b:

という行があるとすると、

#include <n>
#include <a>
#include <b>

が必要なのですか?
とても初心者なので、なにとぞ教えてください。
お願いします。
2017/08/12(土) 17:13:58.34ID:AoA5DjYT0
意図がわかりにくいがその場合だったら#include <n> だけあればいいんじゃないの?
そうでないとしたらinclude順は#include <a>と#include <b>を先に書くべき。
2017/08/12(土) 17:17:09.90ID:lBXwiOpA0
>>84
#include は宣言じゃない
多分
int n;
int a:;
int b;
のことじゃないかな?
2017/08/12(土) 17:21:05.88ID:Yn7dYYpz0
>84

#include
というのは、外部にあるファイルを読み込め
という命令なので、変数の宣言ではありません。

#include <a>

というのは、aというファイルを読み込めという
命令です。
n=a+b
という場合には、この式の前に、n, a, bという
変数の型を宣言する必要があります。
全てが整数ならば、
int a, b, n;
単精度実数ならば
float a, b, n;
と、倍精度実数ならば、
double a, b, n;
と書きます。
と変数の型を宣言します。

このことは、基本の基本なので、解説書の最初に書いてあるはずです。
解説書をよく読んで、その上で分からないことを
質問しましょう
2017/08/12(土) 17:27:53.44ID:srjAo6Ap0
>>85-87
googleだけの独学なので、とても勉強になりました。

とても、ありがとうございました。
2017/08/12(土) 17:28:31.16ID:AoA5DjYT0
文字通りの意味だったのかよ
2017/08/12(土) 18:07:41.60ID:B05a5g6/r
>#include <a>
>というのは、aというファイルを読み込めという命令です。

んなこたーない
2017/08/12(土) 18:16:01.28ID:B05a5g6/r
>>87
>この式の前に、n, a, bという変数の型を宣言する必要があります

それは規格のどこに書いてあるのですか?
2017/08/12(土) 19:18:12.75ID:qkSSCQjy0
DEFINEもincludeも本質的にやってることは同じだしファイルを読み込めは間違ってるな
2017/08/12(土) 19:23:05.89ID:6XNTCj+p0
includeがファイルをその位置に展開しろっていうのはあってると思うけど、何が不満なんだ?
defineはただの文字列置換。
2017/08/12(土) 21:29:22.94ID:B05a5g6/r
× #include <a>というのは、aというファイルを読み込めという命令
○ #include <a>というのは、aというヘッダーを読み込めという命令
○ #include <a>というのは、#include <a>をaというヘッダーの内容で置き換えろという命令
2017/08/12(土) 22:23:06.24ID:AoA5DjYT0
またヘッダー警察が来るぞ
2017/08/12(土) 23:15:33.63ID:wV3c1N0ta
>>84のレベルの人に説明するのに、厳密な用語をどうこういうより、>>87レベルの説明の方が適切だろう
2017/08/12(土) 23:26:56.30ID:IKUtZym10
仕様だとヘッダーとソースファイルは区別されてるみたいだけど
#includeはヘッダーとソースファイルのどちらも扱うから
二つを纏めてファイルと呼称しているとしたら>>94は間違いじゃないの?
2017/08/13(日) 06:37:43.35ID:/9jKf3580
「C++の#includeがファイルを読み込むとは限らない」
という説明を何かで読んだ記憶がある。

例えばソースに #include <hoge.h> と書いてあっても
hoge.h というファイルの実体は存在しなくて、
コンパイラが内部的なスイッチとして使っても構わない、みたいな話。
実際にそういう動作をするコンパイラは知らんけど。
2017/08/13(日) 07:15:34.96ID:CgemGkhrr
>>97
もとの>>87は#includeでなく#include <>なのだが

>二つを纏めてファイルと呼称しているとしたら
いきなり自分の結論を大前提に置かれても
まあこのへんはC++17で少し変わるだろう
2017/08/13(日) 11:33:24.03ID:P6N6OiXF0
CSVファイルを読み込むときに#include使うことある
2017/08/13(日) 20:57:49.74ID:R0DVX6mKM
てか、学ぶなら1冊くらい本買えよ
Googleで独学とか効率悪すぎる
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況