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

レス数が1000を超えています。これ以上書き込みはできません。
次スレを立てる時は本文の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

C/C++室のURLはこちらが正しいです。ごめんなさい。
【初心者歓迎】C/C++室 Ver.101【環境依存OK】 [無断転載禁止]©2ch.net
http://mevius.2ch.net/test/read.cgi/tech/1500329247/

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>
後死ね。

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

---- テンプレ ここまで ----

うむごくろう

5デフォルトの名無しさん (ワッチョイ 738e-PRKf)2017/07/29(土) 17:57:29.77ID:mj0H/MXI0
>>1
乙TL

日付がミスリーディングなクソレスを貼る>>3は無能

7デフォルトの名無しさん (スップ Sd2a-pcXC)2017/07/30(日) 02:31:41.53ID:xlcIQQjmd
>>1

CからC++の学習に進もうと思ってるんだけど、皆さんオススメの書籍とかWebとか有ったら教えてちょ

やめとけやめとけ
Cでリスト構造あたりがすらすら書けるようになったならC#にしとけ。

生産性あがらずそっぽ向かれてるのに、
ムーブコンストラクタとか、コード増えて、さらに生産性低下。
完全にオナニー規格で、自分でとどめ刺した。
まるで民進党の蓮ポ


10デフォルトの名無しさん (ワッチョイ 3bb4-749T)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

11デフォルトの名無しさん (スップ Sd8a-pcXC)2017/07/30(日) 10:19:14.54ID:tzTloLFVd
ツンデレID:qWNYkf/a0さんありがとw
だがしかし、原文のまま進めるには10倍くらい労力使いそうなんで、出来たら日本語でお願いします!

12デフォルトの名無しさん (ワッチョイ 6a9f-ns/O)2017/07/30(日) 10:30:55.09ID:HMlHttTQ0
CプログラマのためのC++入門って本が解りやすかった

13デフォルトの名無しさん (ワッチョイ 3bb4-749T)2017/07/30(日) 10:57:13.10ID:qWNYkf/a0
プログラミング言語C++と言いたいところだが、C++11で止まってるとこらがもうね。
vol3まで原書と邦訳つきあってきたけど、もう気力も失せたわ。
可能性を期待してたの90年代前半 ANSI時代までだな。
電話帳より分厚い言語解説本て。多分完全理解した頃エンジニア生命終わってるわ

14デフォルトの名無しさん (ワッチョイ 6a9f-ns/O)2017/07/30(日) 11:11:05.70ID:HMlHttTQ0
最新の情報はテメェで調べりゃいいんでねぇの?
まず基本という基礎固めが重要だろ
Cプログラマでやってきた奴に総てを全うさせるのは荷がおもすぎるだろ

15デフォルトの名無しさん (ワッチョイ 3b11-Ibwl)2017/07/30(日) 12:15:54.41ID:Csv1BA330
今から学ぼうとする人に規格のドラフトとかどんな苦行だよ
やっぱりロベールしかないな

16デフォルトの名無しさん (スップ Sd8a-pcXC)2017/07/30(日) 12:20:04.23ID:tzTloLFVd
( ̄▽ ̄;)

17デフォルトの名無しさん (ワッチョイ 6a9f-ns/O)2017/07/30(日) 12:26:14.76ID:HMlHttTQ0
http://www.saiensu.co.jp/?page=book_details&ISBN=ISBN4-7819-0649-4
みっけた。コレだわ。
コレ読んだあとにSTLの分厚いの読むと解りやすかった。

18デフォルトの名無しさん (ワッチョイ 7b7f-V1Wy)2017/07/30(日) 12:30:36.64ID:IhAKIxVt0
サイエンス社ってそんなドメインだったんだw

コピーライト表記が SAIENSU-SHA Co., Ltd. だからね

20デフォルトの名無しさん (ワッチョイ 97e3-ZO1u)2017/07/30(日) 13:30:09.73ID:QmN4gyGx0
正しい綴りにすると、別の企業サイトに行ってしまった

21デフォルトの名無しさん (ワッチョイ 2a15-ZO1u)2017/07/30(日) 13:33:44.51ID:NhWYDB7J0
>>7
「詳説C++ 第2版」がオススメ
http://amzn.asia/fb29pvT
ただ、 C++03 を前提にした範囲のことしか書いてない (出版年が 2005 年だから仕方がないけど) ので、
差分はウェブ上のリファレンスで補うと良し。
https://cpprefjp.github.io/

22デフォルトの名無しさん (スップ Sd8a-pcXC)2017/07/30(日) 14:30:07.95ID:tzTloLFVd
>>17
>>21
なるほど。
どちらも古そうな本ですが、参考にさせていただきます。有難う御座いました。

23デフォルトの名無しさん (ワッチョイ 3bb4-749T)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勉強するのは辛いんじゃねって気がする。

便利機能無しで学習するのはストレス溜まる。
わざわざそんな縛りプレーすることないわ。

26デフォルトの名無しさん (スップ Sd8a-6DXG)2017/08/02(水) 09:30:57.66ID:TRQYVkPNd
常識とされていたことも変化しているからね

27デフォルトの名無しさん (ワッチョイ 6a9f-ns/O)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関数ってところが関係しているのだろうか

29デフォルトの名無しさん (ワッチョイ a311-lyvM)2017/08/02(水) 11:39:16.93ID:Mxrfj49o0
ごめん補足
質問の箇所は33項 p.169ね
よろしくお願いします

30デフォルトの名無しさん (ワッチョイ 6a4b-ywSo)2017/08/02(水) 12:22:32.52ID:SX9kgwib0
なんでもなにもprivate継承した基底クラスのpublicメンバは
派生クラスのprivateメンバ的扱いになるので
派生クラスの中では自由にアクセスできる

31デフォルトの名無しさん (ワッチョイ a311-lyvM)2017/08/02(水) 15:29:32.86ID:Mxrfj49o0
>>30
マジか……恥ずかしながらそんな基本的なこともわかってなかった
ありがとうございます

32デフォルトの名無しさん (ワッチョイ 8b6f-JMBK)2017/08/02(水) 19:58:27.29ID:uVXFZ8FT0
穴を掘って入ろう

private基底とメンバ変数、機能的な違いはあるのかしらん?

34デフォルトの名無しさん (ワッチョイ 66af-hLbD)2017/08/02(水) 23:30:18.47ID:wZt34zOG0
俺もprivateとpublicって積的関係かと思ってた
private継承とか使わんからな

35はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a15-ZO1u)2017/08/02(水) 23:30:19.78ID:84D7BovY0
基底クラスへは問答無用でキャストできる。

36はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a15-ZO1u)2017/08/02(水) 23:32:57.07ID:84D7BovY0
>>34
private 継承している場合は基底にキャストできない。
スライシングを起こしたくない場合には private 継承した上で
一部のメンバを using で公開するというようなテクニックもある。

おお、スライシング問題抱える訳ですな。使わないのが無難か……

あ、キャストできないが正解か。
private基底は実装を楽する手段かね。

39デフォルトの名無しさん (ワッチョイ 66af-hLbD)2017/08/02(水) 23:42:51.57ID:wZt34zOG0
つまり例えばstd::vectorクラスを継承したクラスを作って
間違ってアップキャスト扠せたくない場合なんかに使うイメージか

40デフォルトの名無しさん (ワッチョイ 9be4-gAma)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関係

42デフォルトの名無しさん (スプッッ Sdaf-pRZg)2017/08/03(木) 12:53:23.95ID:tXFHDIDud
外から見たら、ね

43デフォルトの名無しさん (ワッチョイ 13c5-FvWN)2017/08/03(木) 22:13:12.27ID:YAnw1OKB0
リンゴとパイナップルとペンが入ったフルーツバスケットは
リンゴクラスとパイナップルクラスとペンクラスの多重private継承なんや

44デフォルトの名無しさん (オッペケ Sref-6sbn)2017/08/04(金) 23:30:18.50ID:W4109686r
「private継承」とい言葉を見るとC++17ドラフトのUNKOなライブラリ設計しか思い浮かばない

45デフォルトの名無しさん (ワッチョイ a16f-CKBc)2017/08/05(土) 06:26:48.70ID:IjGvtKjI0
メンバも含めてprivateなものの用途を詮索してもしょうがない

46デフォルトの名無しさん (ワッチョイ 516f-5ZP/)2017/08/05(土) 08:18:04.82ID:Oj6J0tUu0
誰か個人資産をpublicで公開してくれないかなぁ

47デフォルトの名無しさん (ブーイモ MMbf-DfHf)2017/08/05(土) 10:59:21.66ID:q0G0ffZoM
2000年頃貯めた資産なので引き出せる紙幣はコピーだがよいか?

48デフォルトの名無しさん (アウアウエー Sa2b-690I)2017/08/06(日) 11:38:12.92ID:57DyNeACa
>>46
あなたのその文字も立派な個人資産。
ここに書いた瞬間2chに帰属するが。

49デフォルトの名無しさん (オッペケ Sr93-6sbn)2017/08/06(日) 19:15:12.69ID:/2i5R4CKr
このスレのレスで資産と呼べるのは
PostMessageでメモリ不足を検知するノウハウと
プライベートメンバーをアクセスする技くらいのものだ

50デフォルトの名無しさん (ワッチョイ 93ef-AiEY)2017/08/06(日) 19:28:38.68ID:OFkcQ32C0
>>49
>プライベートメンバーをアクセスする技くらいのものだ
え,それって private メンバのアドレスを返して外からアクセスするってやつ?

51デフォルトの名無しさん (ワッチョイ 03aa-dE0h)2017/08/06(日) 19:31:25.78ID:7dbJmn2Z0
違うだろ
それにネタ元はここじゃないし

52デフォルトの名無しさん (ワッチョイ 49ad-mf2b)2017/08/06(日) 20:55:29.92ID:BHhmDaJC0
>>50
privateをpublicでdefineするやつじゃ?

53デフォルトの名無しさん (オッペケ Sr93-6sbn)2017/08/06(日) 21:20:19.11ID:/2i5R4CKr
>>50
微妙に違うような
アクセス制御が適用されない文脈でメンバーへのポインターやstatic変数のポインターを取得してアクセスする手法

54デフォルトの名無しさん (ワッチョイ 7b6d-H6ZD)2017/08/07(月) 16:40:58.08ID:Y4YBisBB0

55デフォルトの名無しさん (オッペケ Sr35-6sbn)2017/08/07(月) 22:34:19.58ID:MakITfYKr
privateをpublicでdefineするのは潔くてカッコいいが
>>54は全てが糞すぎる

56デフォルトの名無しさん (ワッチョイ 85e3-XDod)2017/08/07(月) 22:43:25.92ID:qpBf+1aM0
しかも既存のクラスに普通に手入れてるしね

57デフォルトの名無しさん (ワッチョイ 7b6d-hNCA)2017/08/08(火) 07:52:39.36ID:CWtfXRt70
>>55
具体的に

58デフォルトの名無しさん (オッペケ Sr35-6sbn)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()))();」というブザマな呼び出し方

59デフォルトの名無しさん (ワッチョイ 7b6d-H6ZD)2017/08/09(水) 18:36:43.63ID:UcwPIhci0
>>58
https://ideone.com/Y4LPCV

改善:3, 4, 5, 6, 7
保留:1, 2, 8, 9

60デフォルトの名無しさん (オッペケ Srd9-6sbn)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()は関数ポインタを返す関数?
設計からしてダメだろ

62デフォルトの名無しさん (ワッチョイ 0d09-zlP1)2017/08/09(水) 18:53:35.78ID:VsUePcYe0
既存のクラスに手を入れてる時点でキモイ。
それならもっとやりようあるでしょ。

63デフォルトの名無しさん (ワッチョイ 7b6d-H6ZD)2017/08/09(水) 19:13:08.58ID:UcwPIhci0
>>61
メンバのオフセット(たぶん) ->* ::* 使用前提のやつ
>>59 は一箇所どうにもこうにもならないので放置している部分がある
ともかく笑いのネタというより他にない

64デフォルトの名無しさん (オッペケ Srbb-iw66)2017/08/10(木) 10:59:10.70ID:vqPWBCRZr
>>63
遠慮せずともじゃんじゃんプライベートにアクセスしてよいぞ
http://ideone.com/BJHsgK

65はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5a15-aEKd)2017/08/10(木) 11:21:25.23ID:eseR3mB40
>>63
オフセットして実装するのが普通だと思うけど、メンバ変数へのポインタがオフセットで実装されるとは決まってないんじゃないの?

66デフォルトの名無しさん (ワッチョイ 9ac5-OW3C)2017/08/11(金) 13:08:18.43ID:rA3728Ge0
C++の場合クラス(およびその基底クラス)内のメンバは全部ヘッダファイルを辿っていけばワカルのだから
まず全く同じ内容のヘッダファイルのコピーを作り、
ファイル名を適当に変えて、多重インクルード箇所もコピーしたもので閉じるように変更して、
privateやprotectedを全部publicにして、
クラスの名前をFoo→Foo2とか改変して、
仮想関数は適当に空の定義でもつけて、
 ((Foo2*)p)->(Fooのデータメンバ)
式にキャストしてアクセスすればデータメンバと仮想関数については問題なくアクセスできる

(ODR違反は都市伝説なので事実上これで動く
 だいたいprivate破りを意図している時点で実コードレベルで影響しない規約とか気にしても仕方が無い

67デフォルトの名無しさん (ワッチョイ 9ac5-OW3C)2017/08/11(金) 13:10:51.21ID:rA3728Ge0
Foo2の仮想関数が空ではないか、というのは動作上問題にならない
vtableのしくみがわかっているならワカル以下略

一方非仮想関数の方はちょっとうまい方法が思いつかない…
private属性のメンバ関数のアドレスがとれれば勝つるのだが

68デフォルトの名無しさん (ワッチョイ 5b2b-7NHe)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を実行するにはどうしたらいいですか

69デフォルトの名無しさん (ワッチョイ 9a9f-I8p5)2017/08/11(金) 15:45:01.75ID:GPxw37uF0
そりゃpushするときにBaseへの暗黙の型変換かかるからダメっしょ
ポインタつかえよBaseの

70デフォルトの名無しさん (ワッチョイ 1a49-d9WE)2017/08/11(金) 15:47:46.79ID:L0uHlCp20
>>68
そのコード本当に動く?
本質じゃなくて申し訳ないが、そのまま追試出来るコードじゃないと…

ちなみに質問の回答はスライスな。

71デフォルトの名無しさん (ワッチョイ 9a9f-I8p5)2017/08/11(金) 15:57:28.65ID:GPxw37uF0
おかしいな、確かに
コピーコンストラクタもないのにコンパイラ通るのかコレ

72デフォルトの名無しさん (ワッチョイ 1a49-d9WE)2017/08/11(金) 16:00:31.30ID:L0uHlCp20
コピコンは省略可能だよー。

73デフォルトの名無しさん (ワッチョイ 5b2b-7NHe)2017/08/11(金) 16:11:31.54ID:CTzRRQx/0
>>69
ありがとうございます
ポインタにすることで解決しました
>>70-71
動かしてるコードを簡略化したのでもしかしたら動かないかもしれないです

74デフォルトの名無しさん (オッペケ Srbb-iw66)2017/08/11(金) 16:51:11.96ID:+GdUPlS/r
「本当に動く? (中略) そのまま追試出来るコードじゃないと…」
 ↓
「もしかしたら動かないかもしれない」
これがアスペというやつだな

75デフォルトの名無しさん (ワッチョイ 9aaa-W16a)2017/08/11(金) 16:54:58.31ID:mfxycmdp0
会話としては成り立ってる

76デフォルトの名無しさん (ワッチョイ 9a23-KsLg)2017/08/11(金) 17:09:12.83ID:MFH9oRFs0
この言語はどこの業務で使われてるの?
組み込み・制御はC++使ってますとか言いながら大体これCじゃん!だから論外として

77デフォルトの名無しさん (ワッチョイ 336d-dvNI)2017/08/11(金) 17:11:30.49ID:Ca8C76qb0
gcc が c++ で書き直された、という話はあったな

78デフォルトの名無しさん (ワッチョイ 97e4-TVDH)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

79デフォルトの名無しさん (ワッチョイ 1ae7-b0wc)2017/08/11(金) 18:02:24.77ID:bpB/tg4h0
Webブラウザとかゲームとか

80はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5a15-aEKd)2017/08/11(金) 18:34:36.55ID:eZ0/1svY0
>>76
Better C として使ってもええんやで

81デフォルトの名無しさん (ワッチョイ 9ac5-OW3C)2017/08/11(金) 19:29:34.92ID:rA3728Ge0
>>76
Simulaの置き換え

82デフォルトの名無しさん (ワッチョイ 8b11-9Y42)2017/08/11(金) 20:50:37.74ID:W25jNYVm0
C言語としてg++使ってる

83デフォルトの名無しさん (ワッチョイ dbea-fQPG)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>

が必要なのですか?
とても初心者なので、なにとぞ教えてください。
お願いします。

85デフォルトの名無しさん (ワッチョイ 9aaa-W16a)2017/08/12(土) 17:13:58.34ID:AoA5DjYT0
意図がわかりにくいがその場合だったら#include <n> だけあればいいんじゃないの?
そうでないとしたらinclude順は#include <a>と#include <b>を先に書くべき。

86 ◆QZaw55cn4c (ワッチョイ baef-9OS8)2017/08/12(土) 17:17:09.90ID:lBXwiOpA0
>>84
#include は宣言じゃない
多分
int n;
int a:;
int b;
のことじゃないかな?

87デフォルトの名無しさん (ワッチョイ 9ab1-KsLg)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;
と書きます。
と変数の型を宣言します。

このことは、基本の基本なので、解説書の最初に書いてあるはずです。
解説書をよく読んで、その上で分からないことを
質問しましょう

8884 (ワッチョイ 7665-KsLg)2017/08/12(土) 17:27:53.44ID:srjAo6Ap0
>>85-87
googleだけの独学なので、とても勉強になりました。

とても、ありがとうございました。

89デフォルトの名無しさん (ワッチョイ 9aaa-W16a)2017/08/12(土) 17:28:31.16ID:AoA5DjYT0
文字通りの意味だったのかよ

90デフォルトの名無しさん (オッペケ Srbb-iw66)2017/08/12(土) 18:07:41.60ID:B05a5g6/r
>#include <a>
>というのは、aというファイルを読み込めという命令です。

んなこたーない

91デフォルトの名無しさん (オッペケ Srbb-iw66)2017/08/12(土) 18:16:01.28ID:B05a5g6/r
>>87
>この式の前に、n, a, bという変数の型を宣言する必要があります

それは規格のどこに書いてあるのですか?

92デフォルトの名無しさん (ワッチョイ 5b2b-7NHe)2017/08/12(土) 19:18:12.75ID:qkSSCQjy0
DEFINEもincludeも本質的にやってることは同じだしファイルを読み込めは間違ってるな

93デフォルトの名無しさん (ワッチョイ a309-lt+t)2017/08/12(土) 19:23:05.89ID:6XNTCj+p0
includeがファイルをその位置に展開しろっていうのはあってると思うけど、何が不満なんだ?
defineはただの文字列置換。

94デフォルトの名無しさん (オッペケ Srbb-iw66)2017/08/12(土) 21:29:22.94ID:B05a5g6/r
× #include <a>というのは、aというファイルを読み込めという命令
○ #include <a>というのは、aというヘッダーを読み込めという命令
○ #include <a>というのは、#include <a>をaというヘッダーの内容で置き換えろという命令

95デフォルトの名無しさん (ワッチョイ 9aaa-W16a)2017/08/12(土) 22:23:06.24ID:AoA5DjYT0
またヘッダー警察が来るぞ

>>84のレベルの人に説明するのに、厳密な用語をどうこういうより、>>87レベルの説明の方が適切だろう

97デフォルトの名無しさん (ワッチョイ 1a1b-8zUn)2017/08/12(土) 23:26:56.30ID:IKUtZym10
仕様だとヘッダーとソースファイルは区別されてるみたいだけど
#includeはヘッダーとソースファイルのどちらも扱うから
二つを纏めてファイルと呼称しているとしたら>>94は間違いじゃないの?

98デフォルトの名無しさん (ワッチョイ a30d-wsxY)2017/08/13(日) 06:37:43.35ID:/9jKf3580
「C++の#includeがファイルを読み込むとは限らない」
という説明を何かで読んだ記憶がある。

例えばソースに #include <hoge.h> と書いてあっても
hoge.h というファイルの実体は存在しなくて、
コンパイラが内部的なスイッチとして使っても構わない、みたいな話。
実際にそういう動作をするコンパイラは知らんけど。

99デフォルトの名無しさん (オッペケ Srbb-iw66)2017/08/13(日) 07:15:34.96ID:CgemGkhrr
>>97
もとの>>87は#includeでなく#include <>なのだが

>二つを纏めてファイルと呼称しているとしたら
いきなり自分の結論を大前提に置かれても
まあこのへんはC++17で少し変わるだろう

100デフォルトの名無しさん (ワッチョイ 8b11-9Y42)2017/08/13(日) 11:33:24.03ID:P6N6OiXF0
CSVファイルを読み込むときに#include使うことある

てか、学ぶなら1冊くらい本買えよ
Googleで独学とか効率悪すぎる

102はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5a15-aEKd)2017/08/14(月) 00:14:24.38ID:N3oVMbyu0
軸がわからないと自分が何をわかってないかすらわからないからクソみてぇな思い込みで検索して見当違いの方向に突っ込んでしまうから、
そうなってから質問しても質問が見当違いすぎて回答しようがないことはよくある。

103デフォルトの名無しさん (ワッチョイ 336d-gaVt)2017/08/15(火) 18:55:44.72ID:Q70B1fQS0
>>102
いっちょコンパイラを書いてやろうと思っているんだが何をやっていいかわからない…
手元の教科書は必死に正規表現やらチューリングマシンやらを追求している…
これってコンパイラ本だと思って買ったのだが、どうも本を間違えてしまったらしい
軸がわからないと悲惨ですね

104デフォルトの名無しさん (ワッチョイ 9a11-GpN3)2017/08/15(火) 19:28:20.65ID:GzAS59pw0
>>103
スゲー古い本だけどこの辺りを参考にするとか
https://www.amazon.co.jp/dp/4782850573

105デフォルトの名無しさん (ワッチョイ a309-lt+t)2017/08/15(火) 19:38:22.48ID:AjDM7F7/0
http://ideone.com/RcWgQx
これ、C++17でできるようになるんだっけ?どうだっけ?

106デフォルトの名無しさん (オッペケ Srbb-iw66)2017/08/15(火) 19:51:33.69ID:nijih07Br
少なくとも似たケースを支援する機能は追加されるがそのままでは通らない
[*this]

107デフォルトの名無しさん (オッペケ Srbb-iw66)2017/08/15(火) 19:53:35.30ID:nijih07Br
と思ってよく読んだら関係無かったしTは生存期間内だった
つまりC++17では無理

108デフォルトの名無しさん (ワッチョイ a309-lt+t)2017/08/15(火) 19:56:48.90ID:AjDM7F7/0
そうなんだ。ありがとう。
またウインドウを出せないのか。
綺麗なウインドウクラスを書く日は遠い・・・。

109デフォルトの名無しさん (ワッチョイ 7a79-A3l2)2017/08/15(火) 19:59:11.57ID:vSz72Ekj0
>>103
LLVMのtutorialでもやってみたら? (↓の一番上)
https://llvm.org/docs/tutorial/
たしか日本語訳もあったと思うけど、内容が古いので注意。

110デフォルトの名無しさん (ワッチョイ 3323-Eq/3)2017/08/15(火) 20:03:18.47ID:BftRsONU0
>>103
yacc, lex (または bison, flex) とかは知ってる?
使うと構文解析が楽になるよ。

111デフォルトの名無しさん (ワッチョイ 5baa-ixYY)2017/08/15(火) 21:06:58.79ID:K8T9Hr6g0
>>108
単にstd::function使えって話じゃねーの?

112デフォルトの名無しさん (ワッチョイ a309-lt+t)2017/08/15(火) 21:16:01.46ID:AjDM7F7/0
>>111
WindowsのウィンドウをWin32APIで出すときは、Cのインターフェースに渡さないといけない。
なので、デフォルトキャプチャにthisのアドレスコピーが入ってくれないと厳しい。

113デフォルトの名無しさん (ワッチョイ 5baa-ixYY)2017/08/15(火) 21:38:42.75ID:K8T9Hr6g0
>>112
typedef bool(*Fun)();
にキャプチャしたデータを置いとく場所が無いんだからいつまでまっても実現しないよ
そういうC言語のAPIにはvoid*でユーザーデータ渡せて引数で取得できるようになってるはずなんだからそれに規則性があるのなら(例えば最初の引数がユーザーデータになってるとか)テンプレートでラッパー書くの簡単でしょ

114デフォルトの名無しさん (ワッチョイ 1a49-d9WE)2017/08/15(火) 21:53:17.41ID:+1mFvI7w0
>>105
できるも何も型が違うからエラーでしょ。
ラムダ型のオブジェクトはautoでしか受けられない。

115デフォルトの名無しさん (ワッチョイ a309-lt+t)2017/08/15(火) 23:43:23.71ID:AjDM7F7/0
>>113
クロージャって知らない?

>>114
条件を限定することで関数ポインタに束縛できるようになりました。
まぁ今回書いたのは願望ですけど。

116デフォルトの名無しさん (ワッチョイ 5baa-uFAa)2017/08/15(火) 23:55:50.09ID:K8T9Hr6g0
>>115
キャプチャしないラムダ式は関数ポインタに変換出来るだけ。束縛じゃない。

117デフォルトの名無しさん (ワッチョイ a309-lt+t)2017/08/15(火) 23:58:52.92ID:AjDM7F7/0
あぁ、語弊があったね。ゴメン。

118デフォルトの名無しさん (ワッチョイ 7a79-A3l2)2017/08/16(水) 06:02:38.98ID:1FqF77kw0
クロージャがどのように実装されているか調べてみることを勧める。
そしてそれをC言語の関数ポインタと互換性がある形で実装可能か考えてみるといい。

119デフォルトの名無しさん (ワッチョイ a309-lt+t)2017/08/16(水) 06:31:25.68ID:3XX715Yb0
>>117だよ。
駄々っ子みたいになってるが、
スレッドローカルみたいな変数を持たせれば持てないことも無いと思う。
まぁ、もうできないことはわかったので抜けます。

120デフォルトの名無しさん (ブーイモ MMba-d9WE)2017/08/16(水) 12:58:58.53ID:+9oABFYpM
もういない宣言出てるけど、スレッドローカルでやられても困るだけだと思う。

121デフォルトの名無しさん (ワッチョイ 9ac5-OW3C)2017/08/16(水) 14:20:28.94ID:5HjXxUQN0
>そしてそれをC言語の関数ポインタと互換性がある形で実装可能か考えてみるといい。
もともとC言語はλ式とか、(束縛変数がクラスのこともありえるが)クラスを構文でサポートしていないのだから
「C言語の関数ポインタと互換性がある形」と逝っただけでは何を指しているのか不明確にならざるおえない
呼び出し側がいかに煩雑な記述になろうとも、動けば互換性があるという立場をとってみるテスト、

束縛変数も毎回引数渡しすればC言語の関数ポインタと互換にできるのでは…
もはやクロージャでも何でも無いが一応動く

122デフォルトの名無しさん (オッペケ Srbb-iw66)2017/08/16(水) 14:36:46.12ID:53LlWcImr
>>121
>もはやクロージャでも何でも無いが一応動く
ちなみにどうでもいいことだがラムダ式から取得した関数ポインターはC++リンケージ型なのでC関数に渡してコンパイルが通る保証が無い

123デフォルトの名無しさん (ワッチョイ 9ac5-OW3C)2017/08/16(水) 15:18:13.19ID:5HjXxUQN0
>>122
関数ポインタ経由の関数呼び出しに関数名のマングルは関係無いのでは…

124デフォルトの名無しさん (オッペケ Srbb-iw66)2017/08/16(水) 15:34:56.89ID:53LlWcImr
>>123
関数名だけではない
extern "C" using CF = void(); と
using CPPF = void(); は似て非なる関数型
この二つはオーバーロード可能で互換性も無い
恐らくマングリのみならず関数呼び出し規約の違いを許容する思想
ただこれを正しく実装したコンパイラーを見たことは無い

125デフォルトの名無しさん (ワッチョイ a37f-W16a)2017/08/16(水) 15:57:26.34ID:07vifjzr0
「正しく実装」すると互換性がないってこと?

126デフォルトの名無しさん (ワッチョイ 4eaa-Kd4M)2017/08/16(水) 15:59:31.27ID:CMzvSoma0
a = 0
2.times do
b = 1
3.times do
p a, b
end
end

「Rubyのしくみ」に書いてあるけど、Rubyは、Cで作ってあり、
do 〜 end のブロックは、クロージャの実装。
ラムダ・Proc も、ほとんど同じ

子のブロック内で、変数が見つからなければ、
外のスコープ(先祖の方向)へ遡って、探しに行く

127デフォルトの名無しさん (オッペケ Srbb-iw66)2017/08/16(水) 16:07:27.94ID:53LlWcImr
>>125
そのとおり
規格では別の型と規定されている
atexitなど関数ポインターを渡す関数ではCリンケージの関数ポインターを渡すかC++リンケージの関数ポインターを渡すかで
C版atexitとC++版atexitのオーバーロード呼び分けができることになっている

clang/G++は意図的に規格に従っていないというのが痛説
Visual C++は規格より自分が正しいという意味不明な見解

128デフォルトの名無しさん (ワッチョイ a37f-W16a)2017/08/16(水) 16:16:58.46ID:07vifjzr0
や、互換性がない→別の型 は真でも 別の型→互換性がない はそうじゃないような。

129デフォルトの名無しさん (オッペケ Srbb-iw66)2017/08/16(水) 16:31:53.97ID:53LlWcImr
そのとおりだ
暗黙の変換は禁止されていない
ただ暗黙の変換が可能というルールも存在しないので「コンパイルが通る保証が無い」と書いた

130デフォルトの名無しさん (ワッチョイ a37f-W16a)2017/08/16(水) 16:48:50.64ID:07vifjzr0
なるほど。
上の方で原理的に無理みたいなことが書いてあった気がしたので念のため。

131デフォルトの名無しさん (ワッチョイ b6a6-iw66)2017/08/16(水) 18:09:49.22ID:VpF+jov/0
マングリングっていやらしいよな

132デフォルトの名無しさん (ワッチョイ b632-iGin)2017/08/16(水) 18:35:35.31ID:lmNMFTOO0
そういうCのインタフェースにはたいてい関数ポインタの他にユーザデータを指定できるようになっててそこにthisなんかを入れておくものだが、 >>105 は関数オブジェクトを関数ポインタだけに変換したいと言っているわけか……

コードを動的に生成すれば不可能ではないだろうけど、色々トレードオフがあるから言語の機能にするのはどうだろうね。
ライブラリを作っても良いんだろうけど、おとなしく定石に従っておいた方が良いよ

133デフォルトの名無しさん (ワッチョイ 5baa-uFAa)2017/08/16(水) 22:53:19.96ID:VOMe5hsv0
>>132
動的にコードを生成したとしてもどこにその生成したコードを置くのか、それをどうやって解放するのかが問題になるね。だったらコード生成してもしなくても同じ事。

134デフォルトの名無しさん (ワッチョイ b632-iGin)2017/08/16(水) 23:14:18.00ID:lmNMFTOO0
>>133
> 動的にコードを生成したとしてもどこにその生成したコードを置くのか、それをどうやって解放するのかが問題になるね。
そうだね。

> だったらコード生成してもしなくても同じ事。
同じではないね。

135デフォルトの名無しさん (ワッチョイ 5baa-uFAa)2017/08/16(水) 23:47:46.20ID:VOMe5hsv0
>>134
言い方が悪かったかな?
「どこにその生成したコードを置くのか、それをどうやって解放するのか」が解決するのであれば、コードを動的に生成しなくてもキャプチャしたデータ自体をそこに置けばいいだけ。

136デフォルトの名無しさん (ワッチョイ 5b32-eSaa)2017/08/17(木) 02:40:17.43ID:PxJqlDv90
>>135
キャプチャしたデータ(またはそれへのポインタ)をコード以外のどこかに置くとして、それは関数ポインタ一つ(コードへのポインタをとるCのAPIにそのまま渡せる形)にはならないだろ。
何の話をしてるんだ?

137デフォルトの名無しさん (ワッチョイ d379-IovB)2017/08/17(木) 05:10:47.78ID:gXVZW44o0
WTL/ATLでそれっぽいことをやってるね。
http://hp.vector.co.jp/authors/VA022575/c/msgmap.html

138デフォルトの名無しさん (スッップ Sdb3-2DsO)2017/08/17(木) 08:39:28.71ID:rYxoi1+/d
MS は mfc の頃から動的コード生成でやってだ記憶がある。

this をロードして jmp みたいな小さいコードを生成して Window Proc として使う。

139デフォルトの名無しさん (ワッチョイ 994d-jLVh)2017/08/17(木) 09:01:01.55ID:6E9r52D/0
それ動的生成だろ。コードじゃなくてインスタンス。

140デフォルトの名無しさん (スッップ Sdb3-2DsO)2017/08/17(木) 10:51:29.58ID:rYxoi1+/d
>>139
コードだっつーの
関数ポインタ一つしか渡せないwindowprocにthisを渡すためにそうやってるんだよ。
なんで知らんのに反論するかなー

>>140
ひょっとして各インスタンスにコードが含まれてるとか思ってる? w

142デフォルトの名無しさん (オッペケ Sr4d-T01/)2017/08/17(木) 14:38:16.10ID:B8c7/K0xr
>>138
そのサンクらしきものはどこのセグメントに置くの?

143デフォルトの名無しさん (ワッチョイ 5b32-eSaa)2017/08/17(木) 15:30:51.11ID:PxJqlDv90
自分でソース読めば良いのに。
最近はDEPとかあるから工夫が必要そうだよね、と検索したらこんなのが出てきた。
https://support.microsoft.com/ja-jp/help/948468/applications-using-older-atl-components-may-experience-conflicts-with

144デフォルトの名無しさん (ワッチョイ 994d-jLVh)2017/08/17(木) 16:53:07.66ID:6E9r52D/0
>>143
MFCのどのクラスに動的コード生成の実装が書いてんの?

145デフォルトの名無しさん (ワッチョイ 5b32-eSaa)2017/08/17(木) 17:43:39.99ID:PxJqlDv90
なんか頭悪そうなのがつっかかってきた

146デフォルトの名無しさん (スップ Sdf3-kTqj)2017/08/17(木) 17:47:21.07ID:fzzVUP+8d
DOS時代は動的コード生成とか良く使ったな

147デフォルトの名無しさん (ワッチョイ 994d-jLVh)2017/08/17(木) 18:37:40.30ID:6E9r52D/0
>>145
なんで急にキレるんですか?
あなたがソース読めとアドバイスしたからMFCのどのソースか聞いただけなのに。

148デフォルトの名無しさん (スッップ Sdb3-2DsO)2017/08/17(木) 18:53:03.48ID:p6ewHhXhd
理解しようという気持ちも理解する力もないのに質問すんなよ…
mfc ではやってたっけ?やってないんじゃないの?
というツッコミならともかく、
>>141>>142なんて思考力が虫以下だろ…どこのセグメントとかアホか
Win32 は古来よりフラットなリニアアドレスモデルだろ。
VirtualAlloc も知らなそうだし。

149デフォルトの名無しさん (ワッチョイ 9311-x4Vn)2017/08/17(木) 18:56:13.88ID:wL10pSGX0
質問だと思ってる時点で低能確定やん w
まあセグメントと聞いてセグメントレジスタしか頭に思い浮かばない低能はROMってろ

150デフォルトの名無しさん (オッペケ Sr4d-T01/)2017/08/17(木) 19:26:52.61ID:KC+pdSEir
>古来よりフラットなリニアアドレスモデル
まさかそっちのセグメントに反応するとは予想外だった

151デフォルトの名無しさん (ワッチョイ 994d-jLVh)2017/08/17(木) 19:47:30.76ID:6E9r52D/0
>>148
だいたいあなたがMFCの頃から動的コード生成でやってたって言い出したんですよ。
だから私はMFCにあるのはインスタンスの動的生成だという指摘をしたんですよ。
そしたら、再度あなたがATLのような実装があるんだと言ったんですよ。
ソース見ろとか言う人までいるから、どのソースか聞いたらキレて、なんで言い出したおまえまでキレんだよ。アル中か?
ここは相談室だぞ。

152デフォルトの名無しさん (ワッチョイ 19cd-eViR)2017/08/18(金) 07:51:05.48ID:mSCO2cNh0
C++を身に着けたいと思いつつも、自分でC++で何かを作るモチベーションが湧かなくって、数千行程度のC++プログラムの写経でもしようかと思ってるのですがおすすめありませんか?

SDLを使ったゲームとか興味を持ちやすくて写経しやすいかと思ってgithubとか漁ってるのですがなかなかいいのが見つからなくて悩み中です
QtみたいなC++を拡張してるのは勘弁です

153デフォルトの名無しさん (ワッチョイ 5100-kTqj)2017/08/18(金) 08:26:03.23ID:cQGhZEXD0
あなたが何に興味を持つかなんてわかりません
C++以外の技能は?

154デフォルトの名無しさん (ワッチョイ 8109-NU4b)2017/08/18(金) 09:19:25.85ID:q7vLALqK0
てんそるふろーでも読んでみるとか。
今を時めくフレームワークだよ。

155デフォルトの名無しさん (ワッチョイ 99e4-V3JL)2017/08/18(金) 12:28:43.04ID:vqpgoPDk0
クソだと思うやつを俺が叩き直してやるってやっていればそのうち上達してる

156デフォルトの名無しさん (オッペケ Sr4d-T01/)2017/08/19(土) 00:15:55.63ID:LWJoSxYpr
ぜひ叩き直してください!

157デフォルトの名無しさん (ワッチョイ 9311-x4Vn)2017/08/19(土) 10:13:11.47ID:2Vqw9aXW0
>>156
思いっきり叩いてやるからまず自分が書いたソースをどこかにアップしろ

158デフォルトの名無しさん (ワッチョイ 616d-MHKs)2017/08/19(土) 11:23:26.49ID:w9JmRxmV0

159デフォルトの名無しさん (ワッチョイ 99e4-V3JL)2017/08/19(土) 12:05:03.25ID:uvlmBKsV0
他人に使わせる気のないコードなんていくら書いても意味ない
ソフトウェアとして公開して叩かれろ

160デフォルトの名無しさん (ワッチョイ 616d-MHKs)2017/08/19(土) 12:07:34.16ID:w9JmRxmV0
>>159
>他人に使わせる気のないコード
どうすれば他人に使わせる気満々のコードになるのでしょうか?
ソースを公開する以外に何かしないといけないのでしょうか?

161デフォルトの名無しさん (ワッチョイ 2be3-oL0b)2017/08/19(土) 12:13:16.84ID:YuM2o2hA0
3行以内で書く、とか?

162デフォルトの名無しさん (ワッチョイ 93f0-jLVh)2017/08/19(土) 12:46:02.69ID:dHC0uy3l0
使いたくなるか否か、それを判定するソースコードを見せてくれれば一番早い
そしてそのソフトウェア自体をその判定にかけると得点はMAXになるのは当然

163デフォルトの名無しさん (ワッチョイ 931b-sCIl)2017/08/19(土) 15:54:33.73ID:/pRbJcl80
>>160
・OSSライセンスを適用する
・有名処のOSSホスティングサービスで公開する
・ソフトウェアの目的と利用方法を理解しやすいようにドキュメント化する
・CPUやメモリなどのリソースを効率よく使用する
・汎用性が考慮された作りにする
・特殊化も考慮された作りにする
・バクが無いようにする
・こまめに更新し継続して改善されている事をアピールする

このくらいやれば他人に使わせる気満々のコードに見える

164デフォルトの名無しさん (ワッチョイ 616d-MHKs)2017/08/19(土) 16:03:12.53ID:w9JmRxmV0
>>163
なるほど

でも >>158 をやる気満々で公開しようと思ってもアピール点が見つからないんです
「C++ だけで簡潔する多桁演算」というのは訴求ポイントとしてはどうなんでしょうか
誰かやってるかどうかはさておき、魅力的がどうかは気になります

165デフォルトの名無しさん (ワッチョイ 616d-MHKs)2017/08/19(土) 16:04:19.60ID:w9JmRxmV0
×簡潔○完結

166デフォルトの名無しさん (ワッチョイ 5ba6-T01/)2017/08/19(土) 18:29:45.94ID:xqVOePdU0
右辺値参照がやっぱりわからん
template<class T>
void test(T&& t) {
f(std::forward<T>(t))
}
このstd::forward<T>(t)は左辺値なの?
名前持つt(左辺値)を転送してるから左辺値でいい?
f()はf(T&)を呼ぶであってる?

167デフォルトの名無しさん (ワッチョイ 1196-oL0b)2017/08/19(土) 18:30:36.24ID:eKyb4lix0
C++11,14を勉強するのにいい本おしぇーてください。

168デフォルトの名無しさん (ワッチョイ 939f-AkiN)2017/08/19(土) 19:12:00.26ID:o+HPRhwX0
effectiveなんちゃらフォイ

169デフォルトの名無しさん (ワッチョイ 1196-oL0b)2017/08/19(土) 19:19:27.18ID:eKyb4lix0
もだーん?

170デフォルトの名無しさん (ワッチョイ b391-JJVS)2017/08/19(土) 19:52:37.70ID:g5B0Pqab0
>>166
forward<T>(t)はtをTの右辺値参照にキャストして返すんだから
f()はT&& tを受け取る(f(T&&)が呼ばれる)んじゃね?

171デフォルトの名無しさん (ワッチョイ d34b-uBYh)2017/08/19(土) 20:21:54.83ID:3jYO+FxO0
>>166
それはforwarding referenceという機能を使ったperfect forwardingというテクニックで
右辺値参照を理解した先にあるものだ
右辺値参照の勉強中なら今は気にせず忘れておくもので
右辺値参照を理解してるなら右辺値参照とは別物として新たに勉強しなくてはならないものだ

172166 (ワッチョイ 5ba6-T01/)2017/08/19(土) 20:37:29.73ID:xqVOePdU0
>>170
やっぱり右辺値参照へのキャストか
左辺値参照ぽい動きなんで質問してみた。ありがと
>>171
俺にはforwardはまだ早いってことスね
まずforwardなしでもう少し考えてみるわ

173デフォルトの名無しさん (ワッチョイ 93aa-jLVh)2017/08/19(土) 22:34:08.72ID:s/7RraD70
>>166
もとの test という関数が右辺値、左辺値どっちでも引数に取れる、そして std::forward でそのまま転送している
f がとる引数の型は test がとった引数と同じ。
つまり答えは実引数次第だ。

174デフォルトの名無しさん (ワッチョイ 8109-NU4b)2017/08/20(日) 08:37:02.88ID:5zFtpOhv0
うにふぁいどこーるしんたっくすはしんだなぜだ!

175デフォルトの名無しさん (オッペケ Sr4d-T01/)2017/08/20(日) 08:45:14.41ID:0H5//osor
死んだ?
むしろ他の提案が出ておちつきそうだったのに
自尊心を傷つけられたと感じたハゲがゴネだして蒸し返えされたような

176デフォルトの名無しさん (ワッチョイ 8109-NU4b)2017/08/20(日) 08:47:52.43ID:5zFtpOhv0
>>175
あんた詳しそうだな。今どうなってるの??
猛烈にほしいんだけど、サクッと入らんかな?
詳しいリンクとかあったらいただけないでしょうか。

177デフォルトの名無しさん (オッペケ Sr4d-T01/)2017/08/20(日) 12:02:18.26ID:0H5//osor
>>176
すまんが別の提案と間違えた。忘れて
open-std.orgのWG21のpapersの2016のP0251R0が最新ではないだろうか
何の動きもなくC++20ドラフトN4687にも入っていない

178デフォルトの名無しさん (ワッチョイ b391-JJVS)2017/08/20(日) 13:06:57.93ID:FiktH31Q0
3年毎に膨らんでいく仕様とか嫌だな
そらリナスさんもブチキレますわw

179デフォルトの名無しさん (ワッチョイ 8109-NU4b)2017/08/20(日) 14:55:44.31ID:5zFtpOhv0
>>177
あぁ、情報ありがとう。やっぱ死んだままか。
手間かけさせてゴメンね。

やっぱコンセプト無いとコードサジェスト爆発するから気に入らないんだろうなぁ。。。

180デフォルトの名無しさん (ワッチョイ ab1c-Pf/K)2017/08/20(日) 14:59:30.48ID:sGdhnhOm0
トーバル君は単に自分のニーズに最適な言語はCと言っているだけで
他の言語がどうなろうと知ったこっちゃないでしょ
それを周りのアフォどもが色々押しつけに来ることに時折ブチキレるだけで

181デフォルトの名無しさん (ワッチョイ 994d-jLVh)2017/08/20(日) 15:24:25.28ID:4v9fraNU0
スキルの差によって読める、読めないの差がありすぎてもはや言語としての体をなしていない。
コンパイラによってもコンパイルできる、できないの差も激しい。大きなプロジェクトを管理する側はキレて当然。
癌のように誰も望んでない仕様拡張が続けられている。

182デフォルトの名無しさん (ブーイモ MM35-s4kG)2017/08/20(日) 15:43:51.01ID:Np+yxjmfM
メイヤーズがこっそりc++とバイナリ互換の新言語を開発している…と信じたい

183デフォルトの名無しさん (ワッチョイ 616d-MHKs)2017/08/20(日) 15:57:28.37ID:uPeoc0+j0
そのバイナリ互換ってなに?

C++11 以降で、役に立つ仕様とどーでもいい仕様とをわけるとすれば、何?

184デフォルトの名無しさん (ワッチョイ ab1c-Pf/K)2017/08/20(日) 16:05:02.55ID:sGdhnhOm0
>>181
誰も望んでいない仕様拡張?
autoは? range-based-forは? R"リテラルは?
initializer_listは? ラムダ式は? template parameter packは?
<random>は? shared_ptrは? <regex>は? <system_error>は?

185デフォルトの名無しさん (ワッチョイ 817f-jLVh)2017/08/20(日) 16:10:46.08ID:H9uxxda60
>>181
ふつう、どの規格を使うかとか、場合によってはどの開発環境のどのバージョンを使うかまで
プロジェクトで規定するものだろう。
決めたことと違うコードを混ぜようとするメンバーがいたりしたらキレてもいいが。

186はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 1315-oL0b)2017/08/20(日) 16:14:30.65ID:ikEvsZIR0
少なくとも個別の提案はプログラムが読みやすくなるし楽になる方向なんよね。
だからまぁ、 >>181 の言い分にある「誰も望んでない」という言説には違和感があるな。
嫌だという人がいるのはわからんでもないが、
勝手にユーザ全体の意見を代表してしまうやつは単にクズなので、
誰も耳をかさないよ。

187デフォルトの名無しさん (ワッチョイ 616d-4dk4)2017/08/20(日) 16:17:20.06ID:uPeoc0+j0
>>154
TFか‥ソニーからも何か出たようだね

188デフォルトの名無しさん (ワッチョイ 8123-jLVh)2017/08/20(日) 16:41:18.86ID:gPEOCHBy0
>>181
> スキルの差によって読める、読めないの差がありすぎてもはや言語としての体をなしていない。
日本語(自然言語)でも同じだろ。
馬鹿と天才でおなじ結果(コード)にしかならない、という方が問題だ。
それが天才側に揃っていれば理想的だが、実際は馬鹿側に揃うわけだし。

>>186
> 少なくとも個別の提案はプログラムが読みやすくなるし楽になる方向なんよね。
これは同意だが、問題は一部が本質的なところ(骨組み)まで変えられる程な点だろ。
現実的には>>185のようにプロジェクトリーダーが何を使うか厳密に決めればいい話で、
Linuxの場合はCだ、って言うんだから他の奴が布教しなければ丸く収まる話だ。

とはいえ通常製品の場合は「何でも出来る=何にも使えない」ではあるのだが、
C++の場合は半製品(製品を作る道具)ではあるし、
実際、機能はあった方が便利だったりするので、(使う側がどこまで使うか決めればいいだけ)
プロジェクトリーダーがしっかりしていれば、現在の貪欲な拡張方向も悪くない。
「全部の機能を使わないといけない」と信じている馬鹿と初心者は混乱するだろうけどね。

189デフォルトの名無しさん (ワッチョイ db23-faiX)2017/08/20(日) 16:58:27.04ID:zvlsjK6m0
>>188
>「全部の機能を使わないといけない」と信じている馬鹿と初心者は混乱するだろうけどね。
残念ながらこういう人たちは少数派ではないのだよ。。

190デフォルトの名無しさん (ワッチョイ ab1c-Pf/K)2017/08/20(日) 18:05:26.65ID:sGdhnhOm0
>>188
馬鹿側に揃えるポリシーを見事なまでにやってのけた言語と言えば。。。
IDENTIFICATION DIVISION.
再帰できない、ダミーセクションできない、動的記憶ない、オラこんな村いやだ♪

で、その結果なにが起きたか。。。
エロパブの嬢がどこかで見覚えのある顔だと思ったら、うわあ(kwskはガン無視します)

191デフォルトの名無しさん (ワッチョイ 8123-jLVh)2017/08/20(日) 18:47:40.43ID:gPEOCHBy0
>>190
COBOLの事か?だとするとあれは試行錯誤の結果だ。非難されるべき物でもない。
そもそもあの時代の言語は再帰出来ないのも多かった。Fortran77もBASICもそうだろ。

俺が思うに、第一世代言語(C以前)は「プログラミングとはこうあるべき」、
つまり、プログラミング自体を規定しようとしている。

COBOL:自然言語の仕様書がそのままソースになるべき
C:所詮アセンブラ
smalltalk:オブジェクト間のメッセージングこそが真の未来
Lisp:ラムダこそ真理
BASIC:馬鹿でも使えることが重要
Fortran:所詮計算機だろ

で、C以外が全部糞だったのでCで統一された。
当然第二世代言語はCの後継で、C++/Java/C#のような面子になる。
とはいえ、COBOLの方向性は間違いでもないよ。
ソース自体が可読性のあるドキュメントであるべき、ってのは今でも理想だろ。

192デフォルトの名無しさん (ワッチョイ ab1c-Pf/K)2017/08/20(日) 19:00:58.06ID:sGdhnhOm0
>>191
BASICは再帰できたぞ
FORTRANを実装できないマシン用に作られた縮小版で、
でもFORTRANより新しく作られた分、改良が図られていた
そのうちの、すべての行に行番号というのが賛否両論だった
当時初心者だった俺にとってはあれがラベルの概念の入り口になってくれたが
1桁KBのパーコンで構造化などという寝ぼけた老害たちがGOTOがどうたら言ってた
あ、嫁が呼んでるw じゃあな

193デフォルトの名無しさん (ワッチョイ 53ef-jLVh)2017/08/20(日) 19:05:55.32ID:QoZjiUMw0
>>192
BASIC で再帰ができるのは,ハドソン系ベーシック等,マイクロソフト以外の BASIC ではないか?

194デフォルトの名無しさん (ワッチョイ ab1c-Pf/K)2017/08/20(日) 19:39:46.63ID:sGdhnhOm0
メインフレーム用の一部の言語が再帰できないのは
当時のS/370がスタックのないアーキテクチャだったからだ
逆にBASICが実装された多くのPCではCPがにスタックを持っていた
なので全変数がグローバルなのでやりにくいができるにはできた
俺もBASICでの再帰は大道芸の域を出ることがなく
実用上の手の内に入ったのはCからだった

195デフォルトの名無しさん (ワッチョイ ab1c-Pf/K)2017/08/20(日) 19:45:06.60ID:sGdhnhOm0
s/CP/CPU/

CPじゃ制御プログラムだねw

196デフォルトの名無しさん (ワッチョイ 8123-jLVh)2017/08/20(日) 21:07:10.22ID:gPEOCHBy0
>>194
> 全変数がグローバルなのでやりにくいができるにはできた
これは一般的には出来るとは言わない。
再帰が出来る=関数ローカルの変数が定義出来る、だよ。
変数共通で突っ込むのは今なら「再入」と呼ばれる物に近く、
これは言語として云々ではなく、対応する構造にするかどうかだけ。

また、CPUのスタック操作命令は高速化に寄与するだけであって、
無ければエミュレートすればいいだけだろ。
その論法だとスタック操作命令がないCPUではC言語を実装出来ないことになるが、
これはないだろ。
(S/370上のC言語実装も無いとは思えないし)

197デフォルトの名無しさん (ワッチョイ ab1c-Pf/K)2017/08/20(日) 21:48:19.43ID:sGdhnhOm0
>>196
そこは俺とは見解が違うね
再帰の定義はサブルーチンの中からそのサブルーチンを呼び出すことで、
それをやりやすく補助する存在は本質じゃない
なのでスタックですら再帰の本質ではない
マシンによってはサブルーチンのネストが6層までとか限定されていて
それは何かというとリンクレジスタの個数でありスタックじゃない
再入は共通変数なんか使わないし、使ったらRENTじゃなくなる
メインフレームの流儀ではいちいちGETMAINとかね
メインフレーム上のCの実装は、俺が目撃したのはS/370じゃなく
ESA/370だったけどいちいちGETMAINはしてなかった

198デフォルトの名無しさん (ワッチョイ ab1c-Pf/K)2017/08/20(日) 22:03:55.37ID:sGdhnhOm0
秀和の解析本にはBASICのくせにunwindがあるぞってなのが載ってたね

199デフォルトの名無しさん (ワッチョイ 8123-jLVh)2017/08/20(日) 22:43:04.76ID:gPEOCHBy0
>>197
> 再帰の定義はサブルーチンの中からそのサブルーチンを呼び出すことで、
> それをやりやすく補助する存在は本質じゃない
これは屁理屈だ。
なぜならこの定義では、「再帰出来ない」言語なんて無いから。
再帰出来る/出来ない『言語』を議論している時点で、この定義は無意味で、
「普通に再帰を記述した時に問題なく動くか」が議論用の定義になる。
これは当然であり、自明だ。

つか、君は何が言いたかったんだ?
君の定義ならCOBOLだって再帰出来るだろ?

200デフォルトの名無しさん (ワッチョイ 93c5-8P7d)2017/08/21(月) 04:24:06.96ID:LgR8oR3f0
再帰アルゴリズムを繰り返し(ループ)アルゴリズムに変換することは普通のアーキテクチャー上では常に可能、
再帰回数に応じて新規のメモ化用領域を本質的に必要とするという重症なケースでも、最悪配列が使えればどうとでもなる、

>>197
メインフレームってグローバル変数として配列とか確保できなくて
いちいちGETMAINするしかないのスゲー

>>199
System/370で動くGCCの実装があったと聞いたわ(ただし今はSystem/390が動作下限とのこと)
再帰ができるかどうかはしらんwwwwwww

201デフォルトの名無しさん (ワッチョイ 9311-x4Vn)2017/08/21(月) 06:45:36.67ID:OHbYaZtv0
>>199
> 君の定義ならCOBOLだって再帰出来るだろ?
(当然だが当時のCOBOLは)できないよ
戻り番地を1つしか覚えてないのでネストしたら戻れなくなる

202デフォルトの名無しさん (オッペケ Sr4d-T01/)2017/08/21(月) 07:37:14.11ID:7Rgof7Fhr
そろそろよそでやれ

203デフォルトの名無しさん (オッペケ Sr4d-T01/)2017/08/21(月) 08:01:15.80ID:7Rgof7Fhr
C++17ドラフトのguaranteed copy-elisionが難しい
しかも規格が約50カ所修正されている
A a = A{}; と A a = f(); のムーブ無くすだけでどんだけ根本概念に手を入れてんだ

204デフォルトの名無しさん (ワッチョイ ab1c-Pf/K)2017/08/21(月) 08:10:41.60ID:M1FJxIMj0
>>199
だから見解が違っているねと言ったろ
アセンブラは再帰できるのか、できないのかという問いと、
COBOLは再帰できるのか、できないのかという問いに、
同じバックボーンで答えることが俺には出来ないが
おまえさんには出来るということだろ?

>>200
bfdではi370だね

205デフォルトの名無しさん (ワッチョイ 2ba2-OH3f)2017/08/21(月) 22:52:00.36ID:Ec7rLiDE0

206デフォルトの名無しさん (ワッチョイ ab1c-Pf/K)2017/08/21(月) 23:00:08.39ID:M1FJxIMj0
犯人扱いしておいて違ったら知らん顔という制度そのものが間違ってる
捜査協力した人には謝礼だろうが
にせ伝票で架空の謝礼費を着服なんかしてないで
やるべきことをやれっての!

207デフォルトの名無しさん (ワッチョイ ab1c-Pf/K)2017/08/21(月) 23:01:02.71ID:M1FJxIMj0
架空の謝礼費を内部告発した仙波さん、えらい扱い受けたよね

208デフォルトの名無しさん (ワッチョイ b391-MHKs)2017/08/21(月) 23:09:51.41ID:BkgqT9qm0
C++の最新仕様を追い続けられる人ってのはやっぱどこかちょっと変わり者というか
ふわふわしたものが許せないというか、なんとなく動いてるからいいや的な緩さが
許せないというか、白黒はっきりつけようぜ的な性格なのかな?って思ったw

209デフォルトの名無しさん (ワッチョイ ab1c-Pf/K)2017/08/21(月) 23:12:01.91ID:M1FJxIMj0
たったの千円でも知らん顔とは次元が違う
謝礼の対象でないという取り決めがあるばかりに
警察官の横柄な態度を誘発しているんだよ

210デフォルトの名無しさん (ワッチョイ 99e4-njFf)2017/08/21(月) 23:56:14.20ID:pHph3yYu0
>>208
たかだか3年に1度の更新がそんなにしんどいのかよ
追い続けるもクソもねえ
重箱の隅をつついても1冊程度にまとめられる量しかないのに

211デフォルトの名無しさん (ワッチョイ 2be3-jLVh)2017/08/21(月) 23:59:39.85ID:RPf0vXrN0
最近は生ポインタ撲滅されそうと聞いたが
今までのメソッドとかどうしてるん
混在してるだろ

212デフォルトの名無しさん (ワッチョイ 93aa-jLVh)2017/08/22(火) 00:35:41.09ID:CYQ4BtpJ0
生ポのオレオレ定義

213デフォルトの名無しさん (ワッチョイ 939f-AkiN)2017/08/22(火) 00:59:49.41ID:2UJiCQ8C0
プロパティーいつ実装されるのやら
getsetくっそマンドクサ

214デフォルトの名無しさん (ワッチョイ ab1c-Pf/K)2017/08/22(火) 01:03:51.34ID:NIldwpVs0
>>208
ほとんどが待ってた機能だぜ?
言語仕様だけでなくライブラリまで
おまえろくすっぽC++使ってねえだろ

215デフォルトの名無しさん (ササクッテロラ Sp4d-d1ZX)2017/08/22(火) 02:32:46.66ID:Z58zmq8rp
全くわからない
雰囲気でc++を使っている

216デフォルトの名無しさん (ワッチョイ 5bea-eC16)2017/08/22(火) 02:42:19.05ID:S2ZGAu0e0
VSのインテリセンスさんだって
いまだについていけず
ポンコツなエラー吐きまくってるわけだし
まだまだ大丈夫!

>>210
>重箱の隅をつついても1冊程度にまとめられる量しかないのに

お前は本を出したことないから「1冊程度にまとめ」るのがどれだけ大変か分からないだけ

218デフォルトの名無しさん (ワッチョイ ab1c-Pf/K)2017/08/22(火) 12:26:19.96ID:NIldwpVs0
そういうおまえはあるのか?

219デフォルトの名無しさん (スップ Sdf3-kTqj)2017/08/22(火) 12:33:51.83ID:c0Kw6L5Fd
雑誌の編集長ですから

220デフォルトの名無しさん (ワッチョイ ab1c-Pf/K)2017/08/22(火) 12:42:39.12ID:NIldwpVs0
それが本当なら恥ずかしい見積もりミスしてんぜおまえさん

221デフォルトの名無しさん (JP 0H85-SBNh)2017/08/22(火) 12:43:40.67ID:aOcQtSkRH
>>217
本を読む、理解する側の分量の話をしてるんだから、まとめる側の労力が大きいかどうかはどうでもいいのでは?

222デフォルトの名無しさん (ワッチョイ 616f-faiX)2017/08/22(火) 15:03:21.13ID:d7ebk59r0
うん。するどい。

223デフォルトの名無しさん (ワッチョイ ab1c-Pf/K)2017/08/22(火) 15:14:35.21ID:NIldwpVs0
雑誌ってエロ本か何かだろどーせ
技術系の雑誌やっててあーゆーバカ言っちゃ自殺もんの恥だぜ

224デフォルトの名無しさん (オッペケ Sr4d-T01/)2017/08/22(火) 17:02:21.79ID:w4zQmMtVr
>重箱の隅をつついても1冊程度にまとめられる量しかないのに
その一冊程度の更新にclang/gcc/vc++すべてが追従出来ていないというのに

225デフォルトの名無しさん (ワッチョイ 53ef-69Ic)2017/08/22(火) 17:10:08.87ID:hmTXL6wT0
>>205
情熱があるんだね,うらやましい‥
ガス欠状態から脱却した

226デフォルトの名無しさん (ワッチョイ ab1c-Pf/K)2017/08/22(火) 17:20:14.07ID:NIldwpVs0
あいたた、本にまとめることも、実装とテストも、
とにかく量的な感覚がどこにもないのか

227デフォルトの名無しさん (ワッチョイ 0b32-xhIi)2017/08/22(火) 20:47:37.89ID:0/CmF7JC0
>>213
なら、publicにしちゃえばいいじゃんといってみる。

関数は振る舞いを書くべきだと思うし、変数の代わりに使うものじゃないと思うんだ。

あと、オブジェクト指向的にクラス変数は基本悪である、ということも考えるべきではないだろうか。

228デフォルトの名無しさん (ワッチョイ 13d0-gSDf)2017/08/22(火) 20:56:12.81ID:COEJtZVq0
>>227
横からだけど俺もそれに同意だ
余分な抽象化は単に工数が増えるだけ
しかしなんで"貪欲"な標準化委員会はプロパティは入れないんだろな

229デフォルトの名無しさん (ワッチョイ b111-2gHK)2017/08/22(火) 21:04:28.96ID:dxaP++Hz0
プロパティ導入したら、なんかいいことあるの?

230デフォルトの名無しさん (ワッチョイ 93aa-jLVh)2017/08/22(火) 21:13:44.10ID:CYQ4BtpJ0
>>227
クラス変数って何?

>>229
変数そのものがバッキングフィールドにカプセル化されることで、変数へのアクセスを必ずメソッド経由にできる

232デフォルトの名無しさん (ワッチョイ b111-2gHK)2017/08/22(火) 21:46:13.74ID:dxaP++Hz0
>>231
バッキングフィールドってメンバ変数をprivateにすれば今でも同じことできるんじゃね?

地味に嬉しいのは既存のパブリックメンバ変数にアクセスしてるコードを変更せずに処理を追加できること

234デフォルトの名無しさん (ワッチョイ 09e3-+GDj)2017/08/22(火) 22:30:23.44ID:uMve0U0S0
>>232
privateな変数はclass内からアクセスし放題だけど、バッキングフィールドはアクセッサ経由以外では絶対に触れない

235デフォルトの名無しさん (ブーイモ MMab-s4kG)2017/08/22(火) 22:34:14.35ID:ONlIaE3KM
c++erは厳しくしつけられているので、既存のpublicメンバがそもそも存在しない

236デフォルトの名無しさん (ワッチョイ 09e3-+GDj)2017/08/22(火) 22:35:33.43ID:uMve0U0S0
>>235
これは正しい

237デフォルトの名無しさん (ブーイモ MMab-s4kG)2017/08/22(火) 22:36:16.75ID:ONlIaE3KM
おっと変数が抜けた

238デフォルトの名無しさん (ワッチョイ 8123-jLVh)2017/08/22(火) 22:58:36.57ID:D8nSL4rC0
>>233
逆にそれが入らない原因なのでは?
軽い処理(public変数)なのか重いかもしれない処理(関数呼び出し)なのか、
見た目分かるようにしろってのがC++の流儀なんだろ。

俺はあった方がいいと思うけどね。
速度チューニングでこの手のマイクロマネージメントは全く意味がないから。

239デフォルトの名無しさん (ワッチョイ 93c5-8P7d)2017/08/22(火) 22:59:26.20ID:UHwuUWMX0
publicなメンバが一つもなかったらそもそもインスタンスを構築できないのでは…

240デフォルトの名無しさん (ワッチョイ 93c5-8P7d)2017/08/22(火) 23:02:04.62ID:UHwuUWMX0
>>238
メンバ変数の公開よりもアクセサーを設けてインライン展開してもらう方がC++の思想的に望ましいのでは…

241239 (ワッチョイ 93c5-8P7d)2017/08/22(火) 23:02:59.41ID:UHwuUWMX0
スマンfriendを使えば良いのか…

242デフォルトの名無しさん (ワッチョイ 817f-jLVh)2017/08/22(火) 23:13:00.45ID:zLx3ukqP0
>軽い処理(public変数)なのか重いかもしれない処理(関数呼び出し)なのか、
>見た目分かるようにしろってのがC++の流儀なんだろ。

C++って、それを判断するのが最も困難な部類の言語だと思うが。

243デフォルトの名無しさん (ワッチョイ ab1c-Pf/K)2017/08/22(火) 23:20:46.21ID:NIldwpVs0
set/get用のデータメンバをちまちま用意するという
狭い考えに限定してきやがる思考妨害アイテムは無用

244デフォルトの名無しさん (ワッチョイ 8123-jLVh)2017/08/22(火) 23:28:17.57ID:D8nSL4rC0
>>240
それはオブジェクト指向の理想。C++はそっちを向いていない。

>>242
いや簡単な部類の言語だ。

245デフォルトの名無しさん (オッペケ Sr4d-T01/)2017/08/22(火) 23:37:15.06ID:+MsUtw+Or
ほう、ではこのプログラムがC++17で何回ムーブが行われるかわかるかね?
auto f() {
struct C{int m;};
return C{};
}
auto c = f();

246デフォルトの名無しさん (ワッチョイ 93aa-jLVh)2017/08/22(火) 23:37:39.41ID:CYQ4BtpJ0
はいはい属性の抽象化属性の抽象化

247デフォルトの名無しさん (ワッチョイ 93aa-jLVh)2017/08/22(火) 23:39:19.18ID:CYQ4BtpJ0
>>245
0回

248デフォルトの名無しさん (オッペケ Sr4d-T01/)2017/08/22(火) 23:41:09.40ID:+MsUtw+Or
残念
0回または1回
因みに確認のためにムーブコンストラクターを追加すると0回に変わる

249デフォルトの名無しさん (オッペケ Sr4d-T01/)2017/08/22(火) 23:49:21.67ID:+MsUtw+Or
ということで、見た目で判断することは難しいのではないかと

250デフォルトの名無しさん (ワッチョイ 8123-jLVh)2017/08/23(水) 00:09:19.34ID:CuDbJhab0
つかお前ら他言語使ってないだろ。
逆に言えばC++はその程度の精度での見積もりが出来る、ということなんだよ。

GC言語なんてGCがどこで走るか予測不能だから、実行時間の保証なんて全く出来ないし、
JIT言語はJIT側にその最適化が入っているかどうかで全く速度が変わってしまう。
つまりJava/C#/JavaScript等はその精度での見積もりはそもそも不可能なんだよ。

それとは別に、C++はその辺の仕組みがかなり複雑になっているのは認めるが、
それでも他言語と比べたら精度高く見積もれる方だよ。

getterを使った場合の問題は、それが見積もりにくくなることと、
あまりに多用するとどこで処理しているのか分かりにくくなる点だが、
まあ、適切に使っている限りはかなり使える機能だから、有った方が便利なんだけどね。
だから普通に考えれば「貪欲」なら当然入れるべきだし、
むしろラムダより先に入れるべきだが、入れないんだから何か引っかかってんでしょ多分。

251デフォルトの名無しさん (ワッチョイ 93aa-jLVh)2017/08/23(水) 00:16:20.92ID:Cw77BvbJ0
>>248

252はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 1315-oL0b)2017/08/23(水) 02:11:33.58ID:wuLlGfOo0
getter がただの変数アクセスに被せてあるだけならまともなコンパイラなら最適化で消えるから速度的なペナルティはゼロだよ。

253デフォルトの名無しさん (ワッチョイ 817f-jLVh)2017/08/23(水) 07:57:53.52ID:KTb6BBkr0
a = 1;

こんなコード片で、aの型がプリミティブ型かconstr(int)/operator=(int)を持つクラスなのかによって
実際に実行される処理内容が違う時点で

>軽い処理(public変数)なのか重いかもしれない処理(関数呼び出し)なのか、
>見た目分かるようにしろってのがC++の流儀なんだろ。

そんなものないとわかるだろう。
それににしても、そこからGCのオーバーヘッドに話が飛ぶのはさすがにアクロバティックすぎるw
実実行時間の話なら、マルチスレッドの非リアルタイムOS上のプログラムはどれも正確な見積もりなどできん。

254デフォルトの名無しさん (ワッチョイ ab1c-Pf/K)2017/08/23(水) 08:29:43.04ID:kvkWqUxa0
プリミティブ型? ああJava訛りね、C++用語はISO/IEC14882:2011 3.9.1に規定あるから

a = 1; がビルトインの代入か、トリビアルのoperator=か、
ユーザー定義のoperator=か、コンストラクタを呼び出すか、
コピーかムーブか、読めない人はC++には向いてないので無理しなくていいよ
要するにアセンブラ苦手なんだろ

マルチスレッドでもタイムクリティカルとか割り込みマスクとかあるしね
別にRTOSに限ったことじゃなく

255デフォルトの名無しさん (ワッチョイ 5bea-eC16)2017/08/23(水) 11:11:46.28ID:KtaXakwM0
>>254
オメーは何が言いてえんだw
無意味に反論するんじゃねえよ
だからアホだって言われるんだよ

256デフォルトの名無しさん (ワッチョイ ab1c-Pf/K)2017/08/23(水) 12:25:37.91ID:kvkWqUxa0
C++を批判するには
おまえ足んねーものが
多すぎつってんだよ

257デフォルトの名無しさん (ワッチョイ 2baa-PF2c)2017/08/23(水) 18:58:23.34ID:HlA0mWJs0
C++ 標準委員会のドワンゴ江添は、職務質問の手荷物検査を拒否したら、
警官10人に、現場で1時間半以上、拘束されたらしい

捜査でもない、任意の行政処分なのにw

それで東京都を訴えた

>>254
> a = 1; がビルトインの代入か、トリビアルのoperator=か、
> ユーザー定義のoperator=か、コンストラクタを呼び出すか、
> コピーかムーブか、読めない人
それがわかったからと言ってなんになるんだ?
定義が常に読めるとは限らんだろ

> 要するにアセンブラ苦手なんだろ
逆アセしてでも読めとか言ってるなら単なる老害のアホ

259デフォルトの名無しさん (ワッチョイ ab1c-Pf/K)2017/08/23(水) 22:25:37.71ID:kvkWqUxa0
>>258
ほーお、おまえさんは定義が読めないと判断できないのか
普通の人は宣言まで読めれば判断できるんだがw

逆汗読まないほうがバカガキ
バカガキからみて普通の人は老害というだけ

260はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 0a15-2x4P)2017/08/24(木) 00:52:21.94ID:MQSUCcmg0
そうか。

老害だと思ってたら基地害だったと言うオチかよ w

262デフォルトの名無しさん (ワッチョイ ca9f-tmrH)2017/08/24(木) 07:27:59.03ID:kJk0ElnZ0
熱いなプロパティ
はやく標準化されればいいのに

263デフォルトの名無しさん (ワッチョイ c61c-9BKz)2017/08/24(木) 10:04:23.28ID:VdsYrxcW0
いらね

264デフォルトの名無しさん (ワッチョイ ca32-2x4P)2017/08/24(木) 11:04:12.57ID:h3Bt5TkH0
プロパティじゃないと出来ないことってなになの

265デフォルトの名無しさん (ワッチョイ ad09-tVhQ)2017/08/24(木) 11:21:59.10ID:ItTZCijS0
見た目だけじゃね?

266デフォルトの名無しさん (ワッチョイ c61c-9BKz)2017/08/24(木) 11:45:56.43ID:VdsYrxcW0
IDEがやれば済むこと
わざわざ言語に入れる必要なし!

メンバ変数と関数の呼び出し統一化。
いらんというのは同意。

268デフォルトの名無しさん (ワッチョイ 8642-mY/i)2017/08/24(木) 14:05:25.76ID:5zDLSTW70
オブジェクトの状態と操作の区別
関数でも代用できてしまうけど、変数のように扱えるってのが大きい
変数のような使い方で処理を挟める、これはPublicなメンバ変数では出来ない

269デフォルトの名無しさん (ワッチョイ c61c-9BKz)2017/08/24(木) 14:20:51.13ID:VdsYrxcW0
できるよバーカ
C++98より前、ARM C++の時代から

270デフォルトの名無しさん (ワッチョイ c6d7-l/E4)2017/08/24(木) 17:42:35.34ID:hLrI3YRl0
たしかに、operator()とoperator=があればできそうではある

271デフォルトの名無しさん (ワッチョイ dd6d-oL0n)2017/08/24(木) 18:28:45.68ID:dK94ZXMf0
>>269
どうやって?コードよろ

272デフォルトの名無しさん (ワッチョイ c6d7-l/E4)2017/08/24(木) 18:48:22.87ID:hLrI3YRl0
ARMだとテンプレートないから、メンバ変数にしたい型ごとにラッパークラス作らないいけないから大変そう

273デフォルトの名無しさん (ワッチョイ cac5-5mwo)2017/08/24(木) 18:52:57.63ID:4nWMkj3x0
質問ですが
std::string str("abcdefghi"); // (*1)
str.resize(8); // (*2)
size_t len = strlen(str.c_str()); // <-- "abcdefgh\0"の長さが返る (*3)
となるのですが、(*3)の時点でできる終端NUL文字"\0"って、
いつのタイミングでどこの領域に確保されるのですか、

274デフォルトの名無しさん (ワッチョイ cac5-5mwo)2017/08/24(木) 18:54:42.67ID:4nWMkj3x0
訂正
×:、(*3)の時点でできる
○:、(*3)の時点でできている

275デフォルトの名無しさん (ワッチョイ c6d7-l/E4)2017/08/24(木) 19:23:39.06ID:hLrI3YRl0
ARMテンプレートあったわ。失礼

276デフォルトの名無しさん (ワッチョイ ca9f-tmrH)2017/08/24(木) 20:00:39.22ID:kJk0ElnZ0
>>270
そのスマートオブジェクトをメンバ変数にした場合、一々親へのポインタをそのスマートオブジェクトに記憶してやらんといけないからすごく面倒なのだよ
プロパティはその点何の束縛もないから良いのだ

277デフォルトの名無しさん (ワッチョイ c61c-9BKz)2017/08/24(木) 20:11:18.34ID:VdsYrxcW0
>>272
アフォwww
template と try catch それと typeid はARMで新設されたんだよ
おまえ多重継承だけだと思ってんだろ

278デフォルトの名無しさん (ワッチョイ 4aaf-gEMG)2017/08/24(木) 20:14:15.85ID:G5OnAPYO0
>>273
*1の時点であるよ

279デフォルトの名無しさん (ワッチョイ caaa-vgeI)2017/08/24(木) 20:17:27.08ID:LSCbdyW40
>>273
(*2)の時点で 'i' があった場所に置かれる、

と素朴に思ってた

280デフォルトの名無しさん2017/08/24(木) 20:39:47.98ID:oFKMCsHnd
🐒

>>273
(*2) の時点で新規領域に abcdefgh をコピーしてその後に \0 を置く

282デフォルトの名無しさん (ワッチョイ 4aaf-gEMG)2017/08/24(木) 21:29:59.02ID:G5OnAPYO0
新規領域もコピーもないでしょ

283デフォルトの名無しさん (ワッチョイ cac5-5mwo)2017/08/24(木) 21:33:49.00ID:4nWMkj3x0
コピーが生じないんだとしたら、
std::string::size()はいつも1バイトだけサバを読んだ値を返すってこと?

284デフォルトの名無しさん (ワッチョイ 4aaf-gEMG)2017/08/24(木) 21:34:29.37ID:G5OnAPYO0
せやで

285デフォルトの名無しさん (ワッチョイ cac5-5mwo)2017/08/24(木) 21:35:38.05ID:4nWMkj3x0
なのか

286270 (スッップ Sdea-l/E4)2017/08/24(木) 22:02:35.81ID:oFKMCsHnd
プロパティはこれじゃアカンの?
https://wandbox.org/permlink/a1fqVzyPCHgFeNjc

287デフォルトの名無しさん (ワッチョイ cac5-5mwo)2017/08/24(木) 22:12:47.64ID:4nWMkj3x0
Windows Phoneの開発で使うC++/CXにはpropertyが構文でサポートされているで
ていうかpropertyがあることが存在意義な感じ?(ネイティブなC++は別にあってそれはそれで利用可能

288デフォルトの名無しさん (ワッチョイ cac5-5mwo)2017/08/24(木) 22:15:25.24ID:4nWMkj3x0
データメンバ直アクセスでなくてpropertyにすると良いことがあるというのは
マーシャリングを裏で勝手にやって来る点

メンバ関数でいいじゃん。ということだろ。

290デフォルトの名無しさん (ワッチョイ cac5-5mwo)2017/08/24(木) 22:34:36.32ID:4nWMkj3x0
  |
  | ('A`) .oO(名前考えるのマンドクセ
 / ̄ノ( ヘヘ ̄ ̄ ̄

0変数:getter, 1変数:setter, 尻尾付き:メンバ変数
とかは良くやるな

292デフォルトの名無しさん (ワッチョイ ad23-vgeI)2017/08/25(金) 00:06:28.73ID:w8QRZZ7K0
>>287
それ以前のVC++/CLIからサポートされてる。

>>286
駄目。
propertyは新規機能ではなく、見た目だけの問題だから、
逆に言えば、見た目がpropertyで書いた時より分かりにくいようなら駄目なんだ。
ほぼ同じ事はラムダとファンクタでもそうだけど。

293デフォルトの名無しさん (ワッチョイ b632-+Jgu)2017/08/25(金) 00:10:22.03ID:hVYhQQjP0
>>268
オペレーターのオーバーライドとにたような感じになると思うけど、その挟み込む処理の重さが隠蔽されてしまうという問題があって、一般には、非推奨だとおもうのだけど今はかわってきてるのかね?

たとえば、代入しているだけだとおもったら、実はファイルアクセスまでしてたとかかな。

294デフォルトの名無しさん (ワッチョイ cac5-5mwo)2017/08/25(金) 00:19:32.01ID:4dE2HuPo0
>>293
>258理論によれば、老害じゃなければ一目で処理の重さがわかるんじゃね
もっとも処理の重さに関するC++の不透明さに警戒を抱くことを老害とするならば、
カーニハンやリッチーも老害にカテゴライズされてしまうが

295デフォルトの名無しさん (ワッチョイ ad23-vgeI)2017/08/25(金) 00:49:30.90ID:w8QRZZ7K0
>>294
K&Rというか生Cが嫌っている理由は「余計なことをするな」だ。
適切に使っている限りC++は不透明ではない。それでも彼等は嫌うだろ。

>>293
横だが結局は使い方次第だよ。C++はいくらでも読みにくいコードを書けるから。
ただ、きちんと使えば有用な機能だよ。
演算子オーバーロードについてはgoogleは「慎重にやれ」だね。
https://ttsuki.github.io/styleguide/cppguide.ja.html#Operator_Overloading

どうでもいいが、何故演算子は「オーバーロード」なんだ?
言われてみれば「オーバーライド」の方が適切な気がする。

296デフォルトの名無しさん (ワッチョイ 8642-mY/i)2017/08/25(金) 02:45:57.11ID:g+9HiqWa0
>>293
それは言語機能の問題じゃなく実装の問題じゃない?

propertyってメンバ変数がどうなっているかに関わらずオブジェクトの状態を表すもの
言語機能の話をしているのであって
既存の機能をやりくりして似たことは出来るって言われてもって感じ

297デフォルトの名無しさん (ワッチョイ ed6f-Snnh)2017/08/25(金) 04:18:10.56ID:4FaT6XJy0
「処理の重さを隠蔽するな」なんて思想がそもそもあるのかね?

298デフォルトの名無しさん (ワッチョイ c61c-9BKz)2017/08/25(金) 05:23:39.04ID:RGmsOxnq0
>>295
オーバーロードは新設で、たいていのoperatorがこっち
オーバーライドは変更で、代入やnewが本当はこっち

299デフォルトの名無しさん (ワッチョイ 2aef-M52T)2017/08/25(金) 06:02:53.19ID:sj2/Y28y0
property ってパブリック変数とどう違うの?

>>294
> >258理論によれば、老害じゃなければ一目で処理の重さがわかるんじゃね
どこにも「わかる」って書いてないのにどんなアホ解釈したらそんな結論になるんだよ w

>>295
> どうでもいいが、何故演算子は「オーバーロード」なんだ?
> 言われてみれば「オーバーライド」の方が適切な気がする。
オーバーロードとオーバーライドの違いもわかってないの?
まあ>>298も色々おかしいが

302デフォルトの名無しさん (ワッチョイ ca9f-tmrH)2017/08/25(金) 07:02:27.63ID:g3SOHHgl0
オーバーロードってモモンガ

303デフォルトの名無しさん (ワッチョイ ad09-tVhQ)2017/08/25(金) 07:24:58.66ID:crVCqQ4J0

304デフォルトの名無しさん (ワッチョイ cac5-5mwo)2017/08/25(金) 07:49:18.88ID:4dE2HuPo0
>>300
>>254>>258の流れをa=1;の実行速度が一目見てわかるのかどうかという問題提起の意味に解釈すた、
パフォーマンスを読みきるには何の言語であれボトルネック(ループ回数×1回の実行時間が最大の処理)の特定が必要だが
C++は演算子のオーバーロードとかインライン展開とかテンプレートがそれ以前の障害として立ちはだかる点がCより重症
パフォーマンスを上げるための手段を豊富に提供してプログラムを書く人の選択に委ねているみたいな?
つまりC++はソースコードのROM専はお断りな言語

>>295
スマン言いたかったのはK&Rではなくてカーニハンとロブ・パイクやったorz
『プログラミング作法』の第7章「性能」のところにC++の特性について(CやJavaとの比較が)書かれていた希ガス、
(目次)ttps://tatsu-zine.com/books/practice-of-programming
ちな本は売ったから手元に無い

>>297
本来のK&Rがまさにそれなのでは…
Unixの移植目的で作られた言語なので、移植性と意図通りのアセンブリコードに落ちること
(ソースコードからアセンブリコードが透けて見えること)の両立が着手時点の第一優先だったはず
故に生ポインタが言語の前面に出てきてインクリメント/デクリメントがそれぞれ2種類あった

305デフォルトの名無しさん (ワッチョイ c6ba-E8CI)2017/08/25(金) 08:42:44.14ID:XasQqnRJ0
>>298
いや、new もオーバーロードでしょ。

306デフォルトの名無しさん (ワッチョイ ad09-tVhQ)2017/08/25(金) 08:51:39.36ID:crVCqQ4J0
newはオペレーターじゃないの?

307デフォルトの名無しさん (スップ Sdca-vlGO)2017/08/25(金) 08:53:26.21ID:mWX/padLd
いやいや、newは新しいって意味

308デフォルトの名無しさん (ワッチョイ ad09-tVhQ)2017/08/25(金) 09:08:17.73ID:crVCqQ4J0
新しくメモリのようなものを持って来るってことでしょ。
言語上ではオペレーターじゃないの?

309デフォルトの名無しさん (スップ Sdca-vlGO)2017/08/25(金) 09:09:11.80ID:mWX/padLd
オペレーターかどうかの議論なんて誰もしてない

310デフォルトの名無しさん (ワッチョイ ad09-tVhQ)2017/08/25(金) 09:11:08.77ID:crVCqQ4J0
オペレータはオーバーロードするもんじゃね?
まぁいいか。

311デフォルトの名無しさん (ワッチョイ c61c-9BKz)2017/08/25(金) 09:52:04.11ID:RGmsOxnq0
>>305
「本当は」って書いてるだろ

# 流れを読んでない近視眼的なアフォどもは無視

312デフォルトの名無しさん (スップ Sdca-vlGO)2017/08/25(金) 09:54:07.34ID:mWX/padLd
「本当は」とは?

C++の規格?
本来の英語の意味?

313デフォルトの名無しさん (スップ Sdca-vlGO)2017/08/25(金) 09:55:05.21ID:mWX/padLd
突然「本当は」とか書いても、どういう意味でどういう意図で書いたかなんてわからんぞ

314デフォルトの名無しさん (ワッチョイ c61c-9BKz)2017/08/25(金) 10:21:51.52ID:RGmsOxnq0
わかんなくていい
バカ以外とさえ話せれば

>>304
ごちゃごちゃ書いてるけどどこから
> 老害じゃなければ一目で処理の重さがわかるんじゃね
が出てくるのかさっぱりわからん

316デフォルトの名無しさん (ブーイモ MMf1-E8CI)2017/08/25(金) 12:58:22.38ID:BrjL74izM
>>311
いや、グローバルのオペレーターに対して、型特化を新設するんだから、newも代入も、オーバーロードでいいんだよ。って話。

c++の実現方法(クラス内定義)でイメージしちゃうから、オーバーライドと思っちゃう気持ちはわかるけど。

317デフォルトの名無しさん (ワッチョイ c6d7-l/E4)2017/08/25(金) 13:22:21.09ID:2fWpITWD0
operatorを仮想関数にしたことないや

318はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 0a15-2x4P)2017/08/25(金) 13:27:32.63ID:a70Vb5yP0
そうか。

319デフォルトの名無しさん (ワッチョイ c61c-9BKz)2017/08/25(金) 14:12:03.69ID:RGmsOxnq0
::operator newは新設か?
ユーザー定義するとビルトインを置き換えるだろ

320デフォルトの名無しさん (ワッチョイ caaa-vgeI)2017/08/25(金) 14:14:35.88ID:11RxMW0L0
>>319
だからオーバーライドだというの?

321デフォルトの名無しさん (ワッチョイ c67a-RUyu)2017/08/25(金) 21:42:16.87ID:0c3f6Usc0

322デフォルトの名無しさん (ワッチョイ a511-l/E4)2017/08/25(金) 22:11:25.23ID:IbGqUCQq0
operatorをオーバーライドしてる人いるみたいだけど、operatorを仮想関数にするのってどういう時なの?

323片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdea-sbdr)2017/08/25(金) 22:17:04.37ID:M7y+0IYNd
>>322
ポインタから多態を利用じゃねーの?

324片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdea-sbdr)2017/08/25(金) 22:28:47.46ID:M7y+0IYNd
ポインタじゃなくてC++参照ね。

325デフォルトの名無しさん (ワッチョイ a511-l/E4)2017/08/25(金) 22:37:18.66ID:IbGqUCQq0
>>323
具体的には何のoperatorをオーバーライドしてるの?

326デフォルトの名無しさん (ワッチョイ caaa-vgeI)2017/08/25(金) 22:39:23.28ID:11RxMW0L0
遺伝子

327片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdea-sbdr)2017/08/25(金) 22:45:02.30ID:M7y+0IYNd
operator==を仮想化したら、多態性が必要な状況であれこれはかどるだろう。
Numberクラスを基底として、RealクラスやらComplexクラスを作ったりしたら、同値確認にoperator==を使いたくなるだろう。

328デフォルトの名無しさん (ワッチョイ 8642-mY/i)2017/08/25(金) 22:47:00.20ID:g+9HiqWa0
男はオーバーロード
女はオーバーライド

329デフォルトの名無しさん (ワッチョイ caaa-vgeI)2017/08/25(金) 23:16:33.27ID:11RxMW0L0
>>327
それってダブルディスパッチの問題起きないの?

330片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdea-sbdr)2017/08/25(金) 23:29:12.56ID:M7y+0IYNd
>>329
お馬鹿で済みません。

331デフォルトの名無しさん (ワッチョイ caaa-vgeI)2017/08/25(金) 23:44:46.18ID:11RxMW0L0

332デフォルトの名無しさん (ワッチョイ ad23-vgeI)2017/08/25(金) 23:58:05.92ID:w8QRZZ7K0
よく分からん揉め方をしているが、
俺は>>298の表現は極めて的確で分かりやすいと思うぞ。
俺はあれで納得だ。サンクス。一応言っておく。

333デフォルトの名無しさん (ワッチョイ c6ba-E8CI)2017/08/26(土) 00:07:55.23ID:NVd9gXan0
>>327
RealクラスとComplexクラスを比較した時の振る舞いが直感的じゃなくね?

334デフォルトの名無しさん (オッペケ Sr6d-9IFt)2017/08/26(土) 00:16:33.84ID:m69mKCvsr
はてoverloadとoverrideは排他的な存在だっただろうか
ちなみに規格で::newはreplace, displace
overrideとは言わない

335片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdea-sbdr)2017/08/26(土) 00:17:51.21ID:HPL6ZAk0d
>>333
その場合はオーバーロードよりも強力なダブルディスパッチを使うのが妥当だった。すまね。

336デフォルトの名無しさん (ワッチョイ ca9f-tmrH)2017/08/26(土) 00:20:52.21ID:kchnKiPS0
まだおまいらオーバーなんちゃらで言い争っているのかw

337片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdea-sbdr)2017/08/26(土) 00:39:36.17ID:HPL6ZAk0d

338デフォルトの名無しさん (ワッチョイ a511-l/E4)2017/08/26(土) 03:28:35.80ID:KpMB1a9f0
>>332
operator newって仮想関数にできなくない? なんでオーバーライドが的確なの?

339デフォルトの名無しさん (ワッチョイ c61c-9BKz)2017/08/26(土) 08:56:30.09ID:jcvKb5O50
>>336
言い争ってなんかいねえぜ
一部のアフォどもをこっちはスルーしてるんで争いになってない

340デフォルトの名無しさん (ワッチョイ cac5-5mwo)2017/08/26(土) 17:00:12.26ID:dtKp7Pu80
>>334
排他的くねなぜならシグネチャが変わらないオーバーロードは無いしシグネチャが変わるオーバーライドもこれまた無いからだ

341デフォルトの名無しさん (オッペケ Sr6d-9IFt)2017/08/26(土) 17:19:10.37ID:XR3UemNVr
そうか?
https://ideone.com/VOwt42
これはオーバーロードかつオーバーライドだと思うが
オーバーロードは特定の関数について言及しているのではなく同一スコープに同一の名前が複数存在する状態を指すものだと思っとりました

342デフォルトの名無しさん (ワッチョイ ca11-+ULf)2017/08/26(土) 18:47:41.02ID:O53zOlu10
>>341
それは
上の方はオーバーライド

下の方はオーバーロード(を追加している)
でしょ
関数単位で見たら排他だと思う

343デフォルトの名無しさん (ワッチョイ cac5-5mwo)2017/08/26(土) 19:44:51.20ID:dtKp7Pu80
>>342
あー左様かvoid B::f(int)のオーバーライドとf()のオーバーロードが同時にありえるのか、
完全に排他的(背反)というわけでもないな

ただしそれぞれ独立な概念とは言える
なぜなら下記の4通り全ての組み合わせが有り得、互いの成立要件に他方の成立の真偽が関係しないだから、
1. オーバーライド∧オーバーロード
2. オーバーライド∧¬オーバーロード
3. ¬オーバーライド∧オーバーロード
4. ¬オーバーライド∧¬オーバーロード

344デフォルトの名無しさん (ワッチョイ cac5-5mwo)2017/08/26(土) 19:47:02.66ID:dtKp7Pu80
訂正
△: ただしそれぞれ独立な概念とは言える
○: ただしそれならそれでそれぞれ独立な概念とは言える

345デフォルトの名無しさん (ワッチョイ b632-+Jgu)2017/08/26(土) 23:26:52.66ID:rkE5GYva0
同じ名前の関数で、引数が同じならオーバーライド、 引数が違えばオーバーロードだよ?

そんなに難しい話じゃないはずだった気がしたんだけどな。

346デフォルトの名無しさん (ワッチョイ caaa-vgeI)2017/08/26(土) 23:42:30.55ID:eHXsO5oX0
>>345
usual な operator new は、いつも
void* operator new(std::size_t);
というシグネチャなのに、なぜオーバロードなのか

という話題だったのでは?

347デフォルトの名無しさん (オッペケ Sr6d-9IFt)2017/08/27(日) 00:10:24.07ID:NCmIfXRWr
「同じ名前の関数で、引数が同じならオーバーライド、 引数が違えばオーバーロードだよ?」
これまた珍説を

348 ◆QZaw55cn4c (ワッチョイ 2aef-M52T)2017/08/27(日) 00:50:06.39ID:Cp6PBSjn0
>>347
>引数が違えばオーバーロードだよ?
演算子のオーバーロード

349デフォルトの名無しさん (ワッチョイ ca9f-tmrH)2017/08/27(日) 00:54:36.33ID:DagGpBhC0
おまいらのアタマがオーバーフロー

350デフォルトの名無しさん (ワッチョイ 29e4-xRau)2017/08/27(日) 02:06:53.19ID:99717IEt0
みんな人に説明できるだけのまともな言語能力を備えてから来てくれ
あとクソみたいな反論をするのもやめよう

351デフォルトの名無しさん (オッペケ Sr6d-9IFt)2017/08/27(日) 07:10:35.78ID:NCmIfXRWr
>>348
それは>>298>>319を読んだ上で物申してるのかね

352デフォルトの名無しさん (ワッチョイ a511-l/E4)2017/08/27(日) 10:16:57.94ID:FD5yZ+sq0
2010年にも同じような話あったみたいね
https://cpplover.blogspot.jp/2010/08/overloadoverridehiding.html

353デフォルトの名無しさん (ワッチョイ cac5-5mwo)2017/08/27(日) 13:59:49.66ID:nap9vlyD0
constオブジェクトのデストラクタって
一般に中で非constメソッドを呼んでいるのに
なんで合法に呼び出されるの?
それとも合法に見えるのはVC++固有?
プロセスが死ぬまで破棄されないのが正しいロジックなんじゃないの

354はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 0a15-2x4P)2017/08/27(日) 15:08:55.59ID:hmah67i90
const の考え方には logical const と bitwise const があって、
logical const を実現するために言語としては bitwise const を基本として要求してる感じ。
logical const ってのは論理的な const 性で、
bitwise const ってのはビットパターンとして不変ってことね。

mutable キーワードを付ければ const なメンバ関数からも操作できるデータメンバを
作れるけど、これは bitwise const でなくてもよくなるだけで
logical const であることは要求される。
(その性質を満たすようにプログラマが配慮しないといけない。
コンパイラは面倒みてくれない。
reinterpret_cast と同じくらいには危険で面倒くさいと思う)

寿命が尽きたオブジェクトにはアクセスは許されないから
もはや logical も bitwise も関係なく const 性は無意味になる。

355デフォルトの名無しさん (ワッチョイ cac5-5mwo)2017/08/27(日) 15:29:34.75ID:nap9vlyD0
>>354
>寿命が尽きたオブジェクトにはアクセスは許されないから
>もはや logical も bitwise も関係なく const 性は無意味になる。
これはだいたいワカタ

前半はわからん
bitwise const でないオブジェクトがROMに割り付けられたり、とか、
bitwise const でないオブジェクトがmemcpy()的手段で同じビットパターンに繰り返し上書きされるみたいな
処理があったりするとbitwise constでないことは致命的だが
それ以外のケースではconstといいつつクラス内部ではmutableな扱いであっても全く実害無いんじゃ…
ていうかそもそもC++の非PODオブジェクトに対するconstはbitwise constなのかかなり疑問が、、

356はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 0a15-2x4P)2017/08/27(日) 16:21:07.86ID:hmah67i90
>>355
logical const であれば性質として充分だよ。
だけど、それをコンパイラがチェックすることは出来ないから、
原則としては bitwise const を要求して、
それがちゃんとできてなけりゃエラーも出す。

だけど、 bitwise でなくても logical に出来る場面では
プログラマの責任でやるよっていうのを mutable キーワードで表すってわけ。

357デフォルトの名無しさん (ワッチョイ 294d-vgeI)2017/08/27(日) 16:23:29.96ID:Pcpci17F0
ルールを増やせば増やすほど使ってもらえない。

358デフォルトの名無しさん (ワッチョイ 29e4-xRau)2017/08/27(日) 16:50:02.45ID:99717IEt0
しかし現実には使われているもよう

359デフォルトの名無しさん (ワッチョイ 1a91-oKtA)2017/08/27(日) 16:52:16.64ID:OhTIHz5/0
おい、mutableなんてキーワード初めて知ったぞw
ググってみたらC++11から導入されてたんだな知らんかった、、、

またまたご冗談を

361はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 0a15-2x4P)2017/08/27(日) 17:26:13.10ID:hmah67i90
>>359
ANSI で規格化された最初から有ったがな (´・ω・`)

362デフォルトの名無しさん (ワッチョイ c6ba-E8CI)2017/08/27(日) 19:19:01.73ID:+rBIMmXP0
>>359
いやいやおいおい…

363デフォルトの名無しさん (オッペケ Sr6d-9IFt)2017/08/27(日) 22:57:23.47ID:epttQBO0r
「C++の非PODオブジェクトに対するconstはbitwise constなのかかなり疑問が」
標準レイアウトではないconstexprなオブジェクトはビットレベルでconstなのだろうか
constexpr struct A { constexpr A()=default; int m=1; private: int n=2; } a;
確かに疑問だ

364デフォルトの名無しさん (ワッチョイ 294d-vgeI)2017/08/27(日) 23:06:36.65ID:Pcpci17F0
どんどんキーワードが増えるのは思いつきで仕様を決めてるからだ。
無能SEの下のプロジェクトではよくあること。
50年は仕様を追加しないつもりで仕様を決めてほしい。

365はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 0a15-2x4P)2017/08/27(日) 23:35:20.73ID:hmah67i90
コンピュータを取り巻く事情は予想の斜め上をいく形でどんどん変わるのに言語だけのんびりしとれるかいな

366デフォルトの名無しさん (ワッチョイ 29e4-xRau)2017/08/28(月) 00:12:36.48ID:OtmMiMVk0
永久に仕様が追加されない言語なんてたくさんあるから好きなのを使いなよ
機能が必要になった背景やそれを追加することが適当だという根拠まで知ってろとは言わないからさ

367デフォルトの名無しさん (ワッチョイ 294d-vgeI)2017/08/28(月) 00:24:42.42ID:JtlNpsV60
雑魚に上から言われる筋合いはない。そんな態度だから囲まれて職質されるんだよ。

368デフォルトの名無しさん (ワッチョイ cac5-5mwo)2017/08/28(月) 00:26:53.59ID:GiFa6ZsP0
つ、追加しなくても1.5年待てば倍速くなるもん…!

ていうかメモリバリア周りの扱いが未だに規格化されていないのは言語としてはお寒い状況だといわざるおえない
ゆくゆくはOpenMPIを正式に取り込んでキャッシュスヌープ無しのメニーコア環境でも
最高のパフォーマンスを発揮できるだけの選択肢をプログラマに提示し、
さらにはGPGPU対応もしてホスイ、

369デフォルトの名無しさん (ワッチョイ cac5-5mwo)2017/08/28(月) 00:29:36.83ID:GiFa6ZsP0
スマンOpenMPIはOpenMPのつもりで言った!

370デフォルトの名無しさん (ワッチョイ 41e1-xc3z)2017/08/28(月) 01:19:26.30ID:83bJD8zl0
openmpみたいなマクロまみれよりtbbのほうが好き

371デフォルトの名無しさん (ワッチョイ 294d-vgeI)2017/08/28(月) 01:23:37.61ID:JtlNpsV60
そんなに新機能を追加したいなら、新しく別言語を創れ。JavaやC#みたに成功して普及した事例はいくらでもある。
一度普及した言語に、碌に実務でコードも書いたことないような輩が後からやってきてデタラメな糞仕様を追加するんじゃない。

372デフォルトの名無しさん (ワッチョイ 29e4-xRau)2017/08/28(月) 01:31:42.56ID:OtmMiMVk0
後から来た輩(ビャーネ・ストラウストラップ)

373デフォルトの名無しさん (ワッチョイ 294d-vgeI)2017/08/28(月) 01:37:29.69ID:JtlNpsV60
CとC++が同じ言語と思ってるとは、さすが見込みどおりの雑魚。

374デフォルトの名無しさん (ワッチョイ feea-w74m)2017/08/28(月) 02:11:44.25ID:nC18rNgy0
実務でコード書く人=Windowフォームにボタンを乗せる仕事の人

375はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 0a15-2x4P)2017/08/28(月) 03:06:17.85ID:yPLR2tUq0
ライブラリの蓄積もあるからさ。 負債の蓄積とのバランスだよねー。
ときどき Go とか Rust とかみたいなのが出てきて一新してくれりゃいいんだけど、
C++ はともかく C はいつまでも死なない気がする。

376デフォルトの名無しさん (ワッチョイ cac5-5mwo)2017/08/28(月) 07:31:44.71ID:GiFa6ZsP0
別に新機能のほしいものリストを無秩序に書き連ねたわけではないもん;;
C++はSimulaの代替品として登場した時点から実行時パフォーマンスの追求を意識していたし、
理解しやすさなら他の言語を選択すればよい昨今においては
特に実行時パフォーマンスの追求こそがC++の存在意義として強調されるべき
テンプレートによるメタプログラミングに最高の効率を阻害する穴があれば塞がれねばならないし、
最適化がほっといたら中途半端にとどまるケースには尻を叩くキーワードが追加されねばならないし、
そのときどきのアーキテクチャーの詳細に立ち入ってでもあらゆる実行時パフォーマンス追求手段が
プログラマに提示されねばならない
インテリセンスがまともに働かないとかテンプレートの分割コンパイルがもはや完成しないバベルの塔だとか
言語規格が変わり続けて解説書が分厚くなる一方だといった側面の不調法はそうであってこそ許容される、

377デフォルトの名無しさん (ワッチョイ cac5-5mwo)2017/08/28(月) 07:36:18.26ID:GiFa6ZsP0
機械の方が人間より賢くプログラムするようになってアセンブラが滅びたら
Cも滅びる気がする

378デフォルトの名無しさん (ワッチョイ ad09-tVhQ)2017/08/28(月) 07:36:46.75ID:96+DvSIX0
ウニファイドコールシンタックスを直ちに入れるのです。
コードサジェストが爆発してもいいじゃない。

379デフォルトの名無しさん (ワッチョイ ad09-tVhQ)2017/08/28(月) 07:43:38.48ID:96+DvSIX0
>>377
機会が賢くなったら、あらゆる言語をCに一回トランスコ―ドするようになる気がする。
そこでパフォーマンスチューニングしてコンパイル。
人間だとコストかかってできない方法。

380デフォルトの名無しさん (ワッチョイ cac5-5mwo)2017/08/28(月) 07:58:00.50ID:GiFa6ZsP0
中間言語とか3番地コードと条件判断とgotoで必要にしてほぼ十分なのでは…

381デフォルトの名無しさん (ワッチョイ ad09-tVhQ)2017/08/28(月) 08:00:37.13ID:96+DvSIX0
>>380
あーそんなもんか。
それじゃ、アセンブリにした方が早いね。
もしくはあらゆる言語がLLVMを介してコンパイルされるとかね。
LLVMのストラクチャも自動生成とか。
あー怖い。

382デフォルトの名無しさん (ブーイモ MMb9-E8CI)2017/08/28(月) 12:49:34.85ID:0HhHgrwNM
ちょっとしたコーディングミスで、以下の簡易コードように書いてしまって、ハマったのですが、コンパイルエラーにならなかった事に驚きました。

string a(何らかの文字列);
string s = s.replace(置換指示); //a.replace() と書こうとした。

コピーコンストラクトの右辺に、構築中(?)の自分自身を使ってしまったと言う事なのですが、これは規格上合法なのでしょうか?

383デフォルトの名無しさん (ブーイモ MMb9-E8CI)2017/08/28(月) 12:59:59.78ID:0HhHgrwNM
↑のサンプル貼っておきます。
https://ideone.com/X4ILlf

384デフォルトの名無しさん (ワッチョイ ad09-tVhQ)2017/08/28(月) 13:04:19.26ID:96+DvSIX0
x^=x でゼロになるんだっけ。
一応昔からある文法だけど。

385デフォルトの名無しさん (スップ Sdca-vlGO)2017/08/28(月) 16:57:17.16ID:KK7lC/68d
>>384
それの使い道がよくわからん

コンパイラと環境によっては x=0 より速かったりとか?
即値は全て名前を付けなきゃいけないとかいう糞コーディングルールの回避とか?
volatileをつけて、
ダミーリードと0クリアを1文で書けるとか?

思い付くのはこのくらい

386デフォルトの名無しさん (ワッチョイ 4acd-Xu5m)2017/08/28(月) 17:22:45.55ID:3VrqihWx0
コンストラクタが実行される前なのでオブジェクトの内容は不定だろうし
不定なオブジェクトにも適切にアクセスする場合なら合法かもしれない
ただ不定な変数を使って何かしようとすると途端に undefined behavior 地雷を
踏むことが多いのでそこで頑張っても実りがあるとも思えないけど

387デフォルトの名無しさん (ワッチョイ c61c-9BKz)2017/08/28(月) 17:43:39.28ID:+dyqlMtL0
>>385
アセンブラでよく使う xor eax,eax を逆コンパイルするとアレになる

388デフォルトの名無しさん (ワッチョイ ca9f-tmrH)2017/08/28(月) 17:52:50.38ID:eeKFZJ460
のっぷぁ

389デフォルトの名無しさん (ワッチョイ ca9f-tmrH)2017/08/28(月) 17:54:52.47ID:eeKFZJ460
or eax,eax だろバカチン

390片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdea-sbdr)2017/08/28(月) 18:02:16.04ID:HJX32+mcd
xor eax,eaxがゼロクリアで、
or eax,eaxが何もしない。

391デフォルトの名無しさん (ワッチョイ b500-vlGO)2017/08/28(月) 18:08:57.91ID:Wq6HqE7w0
さすがにPC系コンパイラで
0クリアを最適化しないのは無いかと

xor eax, eax は0イディオムとか言って、
普通のxorとは微妙に扱いが異なる

昔は sub ax, axより xor ax, axの方が微妙に速かったりした
今はフラグ以外は同じ

>>390
何もしないわけじやない
ちゃんとフラグが変わる

392デフォルトの名無しさん (ワッチョイ 4af0-vgeI)2017/08/28(月) 18:38:50.00ID:7lbHEj3b0
ttp://www.st.rim.or.jp/~nkomatsu/premicro/corezoom2.JPG
昔とはこういうスゴイ編み物の時代ですかね

393デフォルトの名無しさん (ワッチョイ b500-vlGO)2017/08/28(月) 19:05:01.12ID:Wq6HqE7w0
だね

394片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdea-sbdr)2017/08/28(月) 19:10:04.94ID:HJX32+mcd
編み物だって意味のあるつまらないことの積み重ねで実現されている。
プログラミングだって多分同じ。

395デフォルトの名無しさん (スップ Sdca-vlGO)2017/08/28(月) 19:36:30.92ID:KK7lC/68d
コルモゴロフの最小プログラムに対しても同じ事が言える?

396デフォルトの名無しさん (ブーイモ MMb9-E8CI)2017/08/28(月) 19:37:58.17ID:y0vE8H3MM
>>382
質問を変えると、
何でコンパイルエラーにしてくれないんだろう?
ってところが気になっています。

397デフォルトの名無しさん (オッペケ Sr6d-9IFt)2017/08/28(月) 19:41:20.09ID:MWmJNebXr
>>382
3.3.2/1には反しないが3.8/6的にはだめだろう(たぶん)
未定義動作なのでコンパイルエラーになることは要求されていない

398デフォルトの名無しさん (スップ Sdca-vlGO)2017/08/28(月) 19:41:46.31ID:KK7lC/68d
別のsが定義されてるとか

399デフォルトの名無しさん (ワッチョイ 2aef-vgeI)2017/08/28(月) 19:58:41.88ID:rn9GWLpv0
>>391
それは x86/インテル方言なだけでは?
普通のアーキテクチャならばロードだけでフラグが変わるもんですキッパリ

400デフォルトの名無しさん (スップ Sdca-vlGO)2017/08/28(月) 20:21:02.23ID:KK7lC/68d
x86の話をしてるわけだけど

401デフォルトの名無しさん (スップ Sdca-vlGO)2017/08/28(月) 20:22:04.01ID:KK7lC/68d
eaxなんてレジスタ、他にあるか?

402デフォルトの名無しさん (ワッチョイ cac5-5mwo)2017/08/28(月) 20:48:55.97ID:GiFa6ZsP0
inline void zero_clear(int& x) { x ^= x; }

403デフォルトの名無しさん (ワッチョイ cac5-5mwo)2017/08/28(月) 20:55:31.76ID:GiFa6ZsP0
3E AF

404デフォルトの名無しさん (アウアウウー Sa91-WCa5)2017/08/28(月) 22:22:13.51ID:Na7nyTMka
そう言えば64bitアセンブラ勉強してた時ウェブで64bitレジスタでxor rax raxってするより、64bitプログラムでもxor eax eaxってした方が機械語短いって書いてたな。
アセンブラ上は同じ長さだけど、機械語上は64bit命令の方が長い&32bitレジスタへの操作は自動的に64bitレジスタの上位bitがゼロクリアされるから同じ動きになるとかなんとか。
キャッシュに入るコードが増えるから速くもなるらしい。

405デフォルトの名無しさん (ワッチョイ b500-vlGO)2017/08/28(月) 22:33:21.77ID:Wq6HqE7w0
intel公式のドキュメントに書いてあるレベルだから
普通のコンパイラは当然そういうコードを吐くと思うよ

406デフォルトの名無しさん (ワッチョイ 4a19-vgeI)2017/08/29(火) 00:27:36.33ID:AHYNkT+D0
OpenMPIを用いたプロセス並列コードのプロファイルを取りたいんですが、
gprofだとテンプレートがごちゃごちゃしててすごく見にくいです。
何か勧めなフリーのプロファイラはないでしょうか?

407デフォルトの名無しさん (ワッチョイ 3e23-tLez)2017/08/29(火) 01:49:03.35ID:skpcufF70
座標を動的配列で格納していき、
(50,50),(100,100) //直線1の座標
(30,30),(70,70)  //直線2の座標
↑こんな感じに直線の数だけ座標の組み合わせが増えます。

この上から2個の座標の組み合わせ、
つまり座標4点を使い交点を計算するプログラムを作ろうとしています。

計算式を作っていく際にfor文を使っているのですが
1つ目の座標の組み合わせと2つ目の座標の組み合わせを計算式内で使うので
二重ループがいいかと思い作ろうとしましたが動的配列での二重ループの作り方が分かりません。

助けて頂けないでしょうか…。
長々と申し訳ありません。

408デフォルトの名無しさん (ワッチョイ ca4c-oKtA)2017/08/29(火) 02:17:37.67ID:On05DpTS0
>>396
void* p = &p;
↑こういうのは受け入れないといけない一方で >382 を NG とするための境目を
ちゃんと定めてコンパイラ実装するのはめんどくさそうだなと思う。
頻繁に踏む問題でも無くてコンパイラ実装者がそこに注力する動機も薄そうだし。

409デフォルトの名無しさん (ワッチョイ c6ba-E8CI)2017/08/29(火) 02:27:26.09ID:KA5Uf3Ix0
>>397
む、なるほど…
確かに未定義であれば、コンパイルエラーにしなくとも文句は言えませんね。

>>408
!!!なるほど!!!
実用性はさておき、その例文で納得してしまった。

410デフォルトの名無しさん (ワッチョイ feea-w74m)2017/08/29(火) 02:33:36.21ID:vHDkbJz50
>>407
動的配列だと何が問題あるの?
何につまずいているのかよくわからんなあ
例えばキューで実装するとか
直線をひとつづつプッシュ、
描画タイミングで直線を必要数ポップし交点を描画

411デフォルトの名無しさん (ワッチョイ cac5-5mwo)2017/08/29(火) 22:17:26.88ID:R/tQJHqT0
Iteratorで2重ループするやり方がわからな
いとか?

412デフォルトの名無しさん (ワッチョイ 3e23-tLez)2017/08/30(水) 00:38:16.23ID:95r+Hm0D0
はい
iteratorでの二重ループが分かりません。
x1={1,2,3}
x2={4,5,6}
1*4 , 1*5 , 1*6
2*4 , 2*5 , 2*6
3*4 , 3*5 , 3*6
といったような計算が出来るプログラムを動的配列でつくりたいです。

413片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdea-sbdr)2017/08/30(水) 01:26:58.11ID:KDhhphrhd
it->begin(), it->end()

414デフォルトの名無しさん (ワッチョイ ca9f-tmrH)2017/08/30(水) 01:55:32.89ID:0ZIBVCLk0
基礎の基礎が判ってないってパターンか

415デフォルトの名無しさん (ワッチョイ cd9f-GSIY)2017/08/30(水) 02:05:27.07ID:J1aJRQDA0
>>412
まず通常のループは書けるの?
たとえばx2は4固定でいいのでループを記述してみたら?

416デフォルトの名無しさん (ワッチョイ 4acd-Xu5m)2017/08/30(水) 05:26:39.94ID:27CMeyKU0

417デフォルトの名無しさん (ワッチョイ 2a89-GW8T)2017/08/30(水) 06:45:43.57ID:3iEZIBUv0
>>413
itがイテレータならおかしいな

418デフォルトの名無しさん (ワッチョイ ca9f-tmrH)2017/08/30(水) 07:05:47.51ID:0ZIBVCLk0
いてれたのいてれた

419デフォルトの名無しさん (ワッチョイ 3e23-tLez)2017/08/30(水) 08:57:17.67ID:95r+Hm0D0
>>415
通常のループも、二重ループもあらかじめ用意した配列でなら書けます

動的配列になるとiteratorの使い方が分からずプログラムが動かなくなってしまうのですが笑

>>416
ありがとうございます使ってみます!

>>419
つまり分からないのはイテレータのループそのもので、二重ループは関係ないということかな?

421デフォルトの名無しさん (ワッチョイ 4af0-vgeI)2017/08/30(水) 09:12:14.51ID:y1raZQAZ0
perlのfor my $elem (@array){をやるのに何年懸ったんだろうといつも思う

422デフォルトの名無しさん (ワッチョイ 3e23-tLez)2017/08/30(水) 09:13:52.07ID:95r+Hm0D0
>>420
そんなかんじですね
たとえば、x[i+1]をiteratorのループではどう表現するのかとかそういうのが分からないとかです

423デフォルトの名無しさん (ワッチョイ ad09-tVhQ)2017/08/30(水) 10:44:38.77ID:VpX1ZCKl0
イテレータは繰り返しを前提としているので基本的に進むと戻るの操作しか提供しない。ランダムアクセスっていうのもなくはないけどね。
it++で前進、it--で後退。操作して、Container.begin()と同じ値なら先頭を、Continer.end()と同じ値になったらそのコンテナの末端を指している。
基本的にはポインタを抽象化したものだからポインタの操作を思い出すと少しわかりが早い。

424デフォルトの名無しさん (ワッチョイ 29e4-xRau)2017/08/30(水) 12:11:28.40ID:NGfIYJwv0
>>422
君には早いのでまずはポインタでぐぐってくれ
x[i + 1] == *(x + i + 1)

425デフォルトの名無しさん (ワッチョイ feea-w74m)2017/08/30(水) 12:24:58.79ID:PTG1CRxV0
ポインタではループ書けませんって
なんかつき合う気失せるぐらい初心者やね
いやアンタが悪い訳じゃないんやが

426デフォルトの名無しさん (ワッチョイ c61c-9BKz)2017/08/30(水) 12:35:06.14ID:BJd10UjW0
>>419
それ、end()が何を返しているかとか、
連続領域でないのにポインタを返しているとか
そういう系の問題じゃね?

あと「イテレータのループ」というのが
range-based-forだったりすると
x[i+1]はそもそも無理だぞ

427デフォルトの名無しさん (ワッチョイ 3e23-tLez)2017/08/30(水) 13:45:30.49ID:95r+Hm0D0
みなさんありがとうございます!
もっと勉強して出直してきます

428デフォルトの名無しさん (ワッチョイ 0946-R9zi)2017/08/30(水) 20:58:46.39ID:UeWdSpDY0
Cとjavaの基礎やったから基本の文法とオブジェクト指向の触りみたいな部分だけわかるんだけどこの状態でテンプレートとかの勉強初めていいの?
あそこらへん急に難しくなるイメージあるけど他に先にやるべきこととかあります?
あとそういう人におぬぬめの本とかもしあったら教えてくだされ

429デフォルトの名無しさん (ワッチョイ 2aef-M52T)2017/08/30(水) 21:26:25.83ID:it2NMgLA0
>>428
まずテンプレートライブラリの使用方法を重点的に
自分でテンプレートを書くのは後回しにしたほうがよい

430デフォルトの名無しさん (オッペケ Sr6d-9IFt)2017/08/30(水) 22:54:34.30ID:T8zS0A0mr
>x[i + 1] == *(x + i + 1)
はて、いったい何の言語の話だろうか

431デフォルトの名無しさん (ワッチョイ ad7f-vgeI)2017/08/30(水) 23:02:57.29ID:lE/piHRT0
突っ込みたいことがあるならはっきり指摘すれば?

432デフォルトの名無しさん (ワッチョイ c300-sFCB)2017/08/31(木) 02:07:06.34ID:Ce9FMcgb0
>>424
ポインタを意識させないのがイテレターだろうに

>>430
左辺と右辺が同じだって事が言いたいんだろうけど...
上に書いた理由でトンチンカンと言わざるを得ない

433デフォルトの名無しさん (ワッチョイ c300-sFCB)2017/08/31(木) 02:08:47.68ID:Ce9FMcgb0
>>422
it_next = it;
it_next ++;
とか

434デフォルトの名無しさん (ワッチョイ 6fea-G83I)2017/08/31(木) 02:11:16.28ID:JJLmvwvW0
>>432
意味がわからない
もう少しわかりやすく頼む
出来ないならもう発言しなくて良いから

435デフォルトの名無しさん (ワッチョイ ff9f-QSye)2017/08/31(木) 02:40:29.14ID:ZosLKwRR0
なぜにイテレータでやろうとするのか
valarray使えばこんなの即効だろ

436デフォルトの名無しさん (ワッチョイ 6f65-b8Mh)2017/08/31(木) 05:33:17.64ID:5oi4R35S0
あのー、このスレに限らずどこもなんだけどさ、
初心者をケナスくせは、やめた方が良いよ。
ちょっと知ってる者の傾向だね。
ちょっと自分が物事を知ってるから、
「自分らが、上だ。と、知らない者をけなす癖」が多大に有るよね。
本当に知ってる者は、初心者にもやさしく教えてあげるよ。

437デフォルトの名無しさん (オッペケ Src7-mvsT)2017/08/31(木) 05:41:23.80ID:xNENwSVur
>>432
>左辺と右辺が同じ
少なくともここはC++のスレで、C++では同じでないのだが何を言ってるんだお前は

知らない者を貶す気はないけど知ったかの頓珍漢な指摘は全力でバカにする

439デフォルトの名無しさん (ワッチョイ 33e4-p7en)2017/08/31(木) 06:52:13.92ID:8V5/tdJ10
また規格に自信ある奴が日本語読めてないな
日本語の文脈を理解できるようになってから発言してくれ

440デフォルトの名無しさん (ワッチョイ c300-sFCB)2017/08/31(木) 07:01:04.95ID:Ce9FMcgb0
>>437
C++でいつでも同じかなんてことはどうでも良い
レス自体トンチンカンなんだから

441デフォルトの名無しさん (ワッチョイ cfd7-j2rg)2017/08/31(木) 09:29:52.97ID:F7+XKf5b0
はっきり指摘できないのなら謙虚に発言した方がいい

442デフォルトの名無しさん (スッップ Sd1f-gM2o)2017/08/31(木) 10:24:10.68ID:DHTk7O50d
全くその通りだよね
ポインタ滅ぶべしとか思ってるのかも知れないけど、初心者はまずイテレータを理解してその後
ポインタを学べば良いなんてプロセスは効果的とは限らないし、個人的には無理があると思う。

443デフォルトの名無しさん (ワッチョイ 33e4-p7en)2017/08/31(木) 10:46:40.85ID:8V5/tdJ10
C++使ってて初心者は隠蔽された中身を理解しなくていいとか本気で思ってる奴いるのかよ
それにイテレータはポインタのような操作ができるインターフェイスなのでポインタを理解してることは前提となっている

逆だよ。初心者は隠蔽された中身を理解しなくていい範囲と使うべき。
初心者に教えるときも注意しなきゃいかん。

445デフォルトの名無しさん (スップ Sd1f-sFCB)2017/08/31(木) 12:41:58.03ID:aPsP1NJ+d
>>443
イテレターを使う上で、ポインタを知らないと何が問題?

446デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/08/31(木) 12:45:17.10ID:JYM1pg890
「あたかもポインタのように振る舞うオブジェクト」を使うにあたって
そもそもポインタを知らないことの何が問題か本気でわからないのか?

イテレーターのコンセプト、理解してる?
ポインタのように振る舞う、じゃないよ。

448デフォルトの名無しさん (ワッチョイ 6309-8f0a)2017/08/31(木) 14:38:31.89ID:BoCBvGLq0
イテレーションすることを目的にしてるけど、
ポインタもイテレータの機能を持ってるからポインタを想像するとわかりやすいっていうのはある。

449デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/08/31(木) 15:09:44.78ID:JYM1pg890
>>447
どっかから引用したわけじゃないんで
そういうフレーズにはなってないだろうなあ

ポインタの使い方に、イテレータの使い方を似せてあるのは
誰の目にも明らかなんだが、おまえだけ違うのか?
重箱の隅でない説明がもしできるなら拝聴したいぜ

450デフォルトの名無しさん (ワッチョイ 33e4-p7en)2017/08/31(木) 15:25:08.02ID:8V5/tdJ10
ポインタに似せるというコンセプトではないので、ポインタと同じ構文で操作できてもポインタとは何の関係もありませ〜んwwww


そんな話してねえだろコミュ障か?

イテレータの使い方がポインタの使い方に似せてある…?
もしかして、イテレータの意味わかってないんじゃないか??

452デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/08/31(木) 16:22:24.21ID:JYM1pg890
あ、ふじこったw
そのザマ見て気が済んだ

453デフォルトの名無しさん (ワッチョイ 33e4-p7en)2017/08/31(木) 16:48:47.10ID:8V5/tdJ10
>>451
はいはい
イテレータはポインタの操作方法と互換性がある
ただし静的配列やvectorで使われているランダムアクセスイテレータはすべての操作をサポートしているが、それ以外ではサポートしていない操作もあるので注意
とまで補足を入れたらいいんだろ

配列の話をしていたはずなのにアスペはすぐ話の腰折るから困る

454デフォルトの名無しさん (スッップ Sd1f-gM2o)2017/08/31(木) 16:53:43.88ID:DHTk7O50d
むしろ初心者ほど中身を知りたがるもの。
イテレータなんて実装が隠蔽されてるわけじゃなし、知った上で抽象化したらこうなるってのが妥当な方向だ。
コンパイラがやる最適化等とは別の話だ。

455デフォルトの名無しさん (スッップ Sd1f-gM2o)2017/08/31(木) 16:55:03.46ID:DHTk7O50d
だいたいポインタの理解なんて義務教育レベルだしな。

>>450
初心者に教える、つう前提を無視するなよ。アホか?

なんで初心者にイテレーター教えるのにポインタが必要なんだよ。説明してみろ。

457デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/08/31(木) 17:03:23.95ID:JYM1pg890
さあねえ
俺はポインタを知らんやつにイテレータを教えたことがない
それを馬鹿にしたければするがいい
じゃあ、あんたはどうやって教えたのか、こっちが聞きたい

458デフォルトの名無しさん (ワッチョイ 33e4-p7en)2017/08/31(木) 17:29:30.90ID:8V5/tdJ10
>>456
その場でイテレータを使うだけなら必要ないが、それでは何故か動くおまじないになるだけ
マンツーマンじゃあるまいし基礎を理解していない者に教えるのは疲れるし両者にとって不毛だ
複雑な実装のイテレータを理解しろともコンピュータの仕組みを理解しろとも言ってないし
キーワードだけ見つけて何がなんだか分からない助けてくれと言う前に簡単な基礎からやれという指摘はおかしいか?

>>453
ちがうちがう
イテレータっていうのは繰り返しの抽象化だから、ランダムアクセスだのなんだのってのはおまけ
ポインタっていうのはアドレスに少し機能を付け加えたもの

リストのイテレータはリストのポインタと関係ないが、リストの特別版である配列のイテレータは配列のポインタと互換がある
だから、イテレータの操作とポインタの操作に互換があるというのは間違えてる
人に教える前にデータ構造について一から勉強しなおしたほうがいいのでは?

460デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/08/31(木) 17:59:29.96ID:JYM1pg890
ポインタに限ったことではなく、イテレータでもハンドルでも
「何が」「どこにある」という情報を持つもの、という概念を説明するとき

ポインタが最も直接的な実装となっているので
具体的なアドレス値を図に書いて説明できるし
復習するにも実測値でその図を書いてみることができるし
デバッガでも関係性を追ってみることが出来る
++で何をどう増やしているのか、比較とはどういうことかも
実測値から直感しやすい

そして、それで憶えたことがvectorのイテレータでならとりあえず通用する
そこからlistだとかistream_iteratorだとかへと差分学習で進めば楽だし
algorithmもポインタさえ知ってればとりあえず使えて
そこからまた差分学習でイテレータで使う場合を憶えれば楽という経験則

何か間違っているかね?

461デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/08/31(木) 18:04:14.09ID:JYM1pg890
誰かさんみたいに、ちがうちがうと自分の繊細さに酔うやつが
学習者の思考を丹念に潰しやる気を削いでいく有害な騒音源となる

語学の先生にもいるだろ?

462はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff15-X0kF)2017/08/31(木) 18:05:11.71ID:Ev17QaWq0
イテレータはポインタに似せたというよりは、部分的にポインタと共通のインターフェイスに抽象化されたものであって、
C にも有ったポインタという機能と新しい機能を無理なく (?) 統合するアイデアでしょ。
だから、どちらが先にありきと言えるものではないけども、
大抵の C++ 入門書だと時代的に早く出現したポインタを先に説明するのが一般的だと思うし、
初心者がその流れに沿わない学習をしているのだとしたら
体系的に学ぼうとせず場当たり的に調べてるんじゃないのと疑うって話じゃないかな。

前提がちゃんと出来上がってない人の質問にきちんと答えるのは無理だよ。
だからこれとこれを先にやった方がいいよっていうのは誠実な回答だよ。

463デフォルトの名無しさん (ワッチョイ 33e4-p7en)2017/08/31(木) 18:10:20.20ID:8V5/tdJ10
>>459
マジでアスペか
実用上どのように使うかって話をしてるのに、聞いてもいないのに一人で勝手に賢いイテレータの定義の話をしている
お前は>>412>>419>>422を100回読んでから入門サイトでどんな説明をしてるか見てこい
俺はその上で質問者のやろうとしていることは、ポインタを操作することと同じなのでまずポインタを理解してくれと言っている

464デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/08/31(木) 18:24:58.66ID:JYM1pg890
>>462
は? イテレータは少なくとも1993年以後にできたもので
ポインタはBにもあったもので、どちらが先にありきは明白だ

イテレータの設計にあたりポインタを意識しなかったなんて珍説を唱えるには膨大な説明がいると思うが
おまえやってみるか?

465デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/08/31(木) 19:01:39.56ID:JYM1pg890
33e4-p7enの主張が二転三転していて何が言いたいのかわからん

std::optionalもアクセス構文が同じだから、使うにはポインタの知識が必要なのかな

>>463
必要なのは配列とインデックスと有効範囲だけだろ。ポインタを説明する必要は無い。

468デフォルトの名無しさん (ワッチョイ 33e4-p7en)2017/08/31(木) 19:17:27.06ID:8V5/tdJ10
>>467
使うために必要かどうかではない
ポインタはC++を使う上で知ってて当たり前
ID:95r+Hm0D0 みたいに添字しかわかんねえと言われたらお前はそれよりもポインタからだとなる

469デフォルトの名無しさん (ワッチョイ 6fea-G83I)2017/08/31(木) 19:20:33.91ID:JJLmvwvW0
もうやめてくんない?
誰もイテレータの成り立ちなんて興味ないのよ

470デフォルトの名無しさん (ワッチョイ c300-sFCB)2017/08/31(木) 19:20:55.53ID:Ce9FMcgb0
好きな順で覚えればいいよ

初心者に配列管理を説明するのにわざわざポインタ持ち出すな、つうてんの。そういう事言ってるから老害なんだよ。
range-based forを説明した方がよっぽど有益だわ。

>>460
もちろんvectorを例にイテレータとポインタをまとめて教えるのは一つの手段として有りだと思うよ
ただ、何度も書いてる通りポインタとイテレータは独立した概念だから、その差分学習は論理必然じゃない

現に、俺は学部時代に授業でプログラム習ったときは、vectorのような連続領域じゃなくlistのような抽象リストで習ってるし
ポインタはCの授業で、アドレスの抽象として習ってるし、イテレータはデザパタの本で知ったからね

どの学び方がいいかは人それぞれなんだろうけど、独立した概念を一緒だよとか変な方便使うのは間違ってると思うよ

>>471
まぁ今ならコレだな

>>471に一票

475デフォルトの名無しさん (ワッチョイ 33e4-p7en)2017/08/31(木) 19:58:01.09ID:8V5/tdJ10
>>471
この意見はさすがに論外だわ
ポインタは難しいものでもややこしいものでもないから、ちゃんとした読み物があれば問題なく理解できる
難しいなら後回しにしてもいいならわかるが、最初から教えないというのは学習の機会を奪っているとさえいえる

476デフォルトの名無しさん (ワッチョイ ffc5-JjKz)2017/08/31(木) 20:02:22.38ID:4TB5IpyN0
>>443
はげどう

>>444
言語選ぼうよ;;

>>445
イテレータはポインタの概念を引きずってゐる
プログラムの動作を簡明に表すという意味では
配列の構文さえあれば十分なのに、

※ 個人の感想です

477デフォルトの名無しさん (ワッチョイ c300-sFCB)2017/08/31(木) 20:04:46.13ID:Ce9FMcgb0
老害が多いな
ソフトをやるならアセンブラからとか言いそうな勢い

478デフォルトの名無しさん (ワッチョイ ffc5-JjKz)2017/08/31(木) 20:08:55.54ID:4TB5IpyN0
尤も、C++の配列とか要素型であるクラスの継承とか多態性を表現しきらん欠陥品ではあるのだが
(インターフェースの配列はポインタの配列としてやるしかない;;
それゆえにやっぱC++で入門するなら中身知っとけと、

479デフォルトの名無しさん (スプッッ Sd1f-j2rg)2017/08/31(木) 20:10:07.84ID:Y1zUatWId
>>475
あなたに教えを請う人がいれば、あなたが教えたいように教えたらいい

480デフォルトの名無しさん (ワッチョイ 53e3-KFeJ)2017/08/31(木) 20:11:27.89ID:g5ZfiDra0
>>478
STLはテンプレートライブラリだから、動的なポリモーフィズムにガッツリ対応してないのは当然だし、
そーいうのがほしけりゃ自分で書けばいいだけ

481デフォルトの名無しさん (ワッチョイ ffc5-JjKz)2017/08/31(木) 20:17:41.92ID:4TB5IpyN0
>>480
左様動的なポリモーフィズムにガッツリ対応したコンテナクラスのテンプレートを
曲がりなりにもかけるようになってからがC++の入門編

抽象化された上位レイヤーの知識だけあれば詳細は知らなくて良い、というのは
漏れのない抽象化が達成された後のみ通用する話だが
ずんねんながらC++はそうではないし言語の性格上っ今後とも永遠にそうはならない

482デフォルトの名無しさん (ワッチョイ 334d-6h2J)2017/08/31(木) 20:25:29.52ID:SvYtbMXE0
>>471
その有益というrange-based forを説明してくれよ。

483デフォルトの名無しさん (ワッチョイ ff11-2CmY)2017/08/31(木) 21:08:08.63ID:iFrEf/VH0
>>482
そこは流石にググれよ

484デフォルトの名無しさん (ワッチョイ ff9f-QSye)2017/08/31(木) 21:11:56.48ID:DEelFUhW0
このなげぇクソはいつ終わるんだ

485デフォルトの名無しさん (ワッチョイ 334d-6h2J)2017/08/31(木) 21:32:29.56ID:SvYtbMXE0
>>483
悪いが馬鹿老害は黙っててくれないか。

若い人がせっかく説明したほうが有益だと言ってくれてるのだから。他の人も賛同してくれてる。

486デフォルトの名無しさん (オッペケ Src7-mvsT)2017/08/31(木) 22:00:17.40ID:Tmpts49Ar
期待を裏切らない>>474

487デフォルトの名無しさん (ワッチョイ c300-sFCB)2017/08/31(木) 22:12:11.60ID:Ce9FMcgb0
みんな、ちゃんとアセンブラから勉強しろよwww

488はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff15-X0kF)2017/08/31(木) 23:18:28.91ID:Ev17QaWq0
>>464
いや、もちろん意識してるだろ。
そう書いたつもりだけど、どこをどう読んだんだ?

489デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/08/31(木) 23:19:12.52ID:JYM1pg890
>>471
おまえさ、じゃあ配列の添字は何だと思っているわけ?
「どこにある」という情報をもつもの、という点で同じだぞ
だから for(i = first ; i != last; ++i) において first や last や i が
整数であろうがポインタであろうがイテレータであろうが
同じ論理が通用するんだろうがよ
ポインタで範囲外アクセスこくような大馬鹿者が
整数ならそんなことないとでもぬかすのか?

490デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/08/31(木) 23:24:55.90ID:JYM1pg890
>>472
おまえC++やCよりも前に何かやってただろ
俺だってC++をCより先に憶えたクチで
そんな真似ができたのはアセンブラ使いだったからな

間接の概念をまっさらから憶えるのに
イテレータは無駄に難しいマゾプレーだつってんだ
ポインタわかっててもハンドルで悩むやついるくらいで
それに輪を掛けて++まであるのがイテレータであって

491デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/08/31(木) 23:27:04.06ID:JYM1pg890
>>488
悪かったよ
そのようで

492デフォルトの名無しさん (ワッチョイ 334d-6h2J)2017/08/31(木) 23:32:03.77ID:SvYtbMXE0
>>471
まだ説明してないのか。説明頼むよ。キミが言い出したことなんだよ。

493デフォルトの名無しさん (ワッチョイ ffaa-6h2J)2017/08/31(木) 23:40:32.47ID:y40vazij0
(void*以外の)ポインタ自体も生のアドレス概念からは抽象化されている。
指されるオブジェクトの型やサイズを持っているんだからね。

それをさらに(ある方向に)抽象化したものがイテレータなんであって、そのように段階を追って
抽象化されていくストーリーを語るのは初心者向けにも有意義だと考える。

494はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff15-X0kF)2017/08/31(木) 23:59:46.91ID:Ev17QaWq0
イテレータに限らないけど抽象化されたものは抽象化されたままで扱わないと抽象化した意味がなくて、
(内部の実装を意識しなきゃならないのなら抽象化の甲斐が無い。)
一方では、その抽象化を作る側になることもあるので抽象化が出来上がるまでは抽象化の内側も知ってなきゃいけない。
つまり、層を積み重ねるたびに抽象化の壁を作っていくってのがプログラムを構成する基本的なやり方だろう。
だから、プリミティブな方から積み重ねながらその抽象化が意味するところを学ぶってのは普通の方法だと思う。
そういう意味で >>493 に賛成。

抽象化の内側を知ってしまった人が抽象化の壁の向こうを忘れて抽象化されたものとしてだけ
扱うってのはそれなりにセンスがいるんじゃないかとも思うんだけど、
C/C++ の背景にあるセマンティクスは良くも悪くも機械の理屈なんで、
どうあがいても高級アセンブラだと割り切って泥臭いポインタの側から学ぶのがいいと私は思うよ。
その泥臭いところを頑張って隠してるのが C++ ってもんなんで、
泥臭いところを知ったら C++ の色んな機能が「あー、こういうの欲しかったわー」ってなってありがたみを感じる。

495デフォルトの名無しさん (ワッチョイ 33e4-p7en)2017/09/01(金) 00:30:44.48ID:oWX+X4Ay0
ストラウストラップが言うにはC++は
低レイヤーにアクセスできる機能とオーバーヘッドが無く使いやすいように隠蔽できる機能を持っている言語というようなことを言っていて
低レイヤーの部分を知らなくていいとは言っていない

496デフォルトの名無しさん (ワッチョイ 334d-6h2J)2017/09/01(金) 01:02:22.22ID:E+DzN2Xf0
アセンブラの代替言語なのだから当たり前だ。用途もOSやドライバ、マイコン向けばかりだ。
COBOL、FortranやPerl、C#やJavaの代わりに使う人などいない。
低層を隠蔽する機能などお呼びではない。

497デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/09/01(金) 02:01:03.59ID:2msaHTP30
いやCOBOLの代わりには使うぞ
Fortranの代わりつーとCな客はいたねえ

498デフォルトの名無しさん (ワッチョイ cf51-tIp8)2017/09/02(土) 16:34:51.42ID:Vkplowcj0
http://opencv.jp/cookbook/opencv_img.html#image-resize
ここのソースコードをコピペしてコンパイルしようとしたのですが
関数 `cv::Mat::release()' 内:
test.cpp:(.text._ZN2cv3Mat7releaseEv[_ZN2cv3Mat7releaseEv]+0x47): `cv::Mat::deallocate()' に対する定義されていない参照です
collect2: error: ld returned 1 exit status
このようなエラー文が出てしまいます
使っているOSはdebian stretchです
/usr/include/opencv2には必要なファイルはありました
どのようにコンパイルすればいいのでしょうか

499デフォルトの名無しさん (ワッチョイ 6309-8f0a)2017/09/02(土) 16:50:32.70ID:8FAKxNXu0
環境依存すれってなくなったの?

500片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd1f-dw5s)2017/09/02(土) 16:53:40.92ID:bEjlZdoBd
>>498
ライブラリをリンクする。

501片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd1f-dw5s)2017/09/02(土) 17:01:02.17ID:bEjlZdoBd
>>500
【初心者歓迎】C/C++室 Ver.101【環境依存OK】 [無断転載禁止]2ch.net
http://mevius.2ch.net/test/read.cgi/tech/1500329247/

502デフォルトの名無しさん (ワッチョイ 6309-8f0a)2017/09/02(土) 17:02:35.03ID:8FAKxNXu0
ないすー。

503デフォルトの名無しさん (ワッチョイ cf51-tIp8)2017/09/02(土) 17:03:12.44ID:Vkplowcj0
>>501
すみませんでした
こっちで質問してみます

504デフォルトの名無しさん (スプッッ Sd1f-WnLs)2017/09/02(土) 18:03:57.34ID:qkqtxzLpd
c++に限った話じゃないんだけど参考書
とかだとメソッドの後にフィールドが
書かれてる事が多いようだけど、それが
一般的なの?

505デフォルトの名無しさん (ワッチョイ fff0-6h2J)2017/09/02(土) 18:45:42.87ID:qDvIb2f40
ちがう
一般的にはフィールドたるメンバ変数の方が先に来る

学習の都合で、メンバ変数を先に説明した方が、どう考えてもラク
メンバ関数を先に説明すると、入門書を読むレベルの初心者は間違いなく混乱するので、そんな参考書はまず見かけない

そもそもメソッドの中で使う変数は始めに宣言しておかないと使えない

結論としてはあなたが用語の取り違えをしてる……としか

506デフォルトの名無しさん (ワッチョイ ffaa-6h2J)2017/09/02(土) 19:04:41.89ID:4lafg32N0
クラスのレイアウトの話じゃなくて?

507デフォルトの名無しさん (ワッチョイ ffc5-JjKz)2017/09/02(土) 19:23:47.80ID:FGRVT/X40
レイアウト、というとデータの並び順の意味にとられかねず語弊がある

508デフォルトの名無しさん (ワッチョイ ffaa-6h2J)2017/09/02(土) 19:28:16.32ID:4lafg32N0
じゃあ宣言の順序

509デフォルトの名無しさん (ワッチョイ 33e4-73wU)2017/09/02(土) 19:57:46.29ID:l0rE+2Xa0
public、protected、privateの順に書いていくと
自然と変数はpublic関数の次に来るわ

510デフォルトの名無しさん (ワッチョイ 2304-k/3h)2017/09/02(土) 21:02:43.47ID:EU1kDRi00
普通アクセス修飾子の順じゃなくてフィールド→メソッドの順じゃないの
カプセル化するから変数なんてほとんどprivateだろうし
変数は変数でまとめて書いてもらわないと混乱する

511デフォルトの名無しさん (ワッチョイ ff32-X0kF)2017/09/02(土) 21:08:20.92ID:Wuw432Mc0
ユーザーにとって重要な項目から順に書く
つまり、public→protected→privateで
ユーザーに見せる必要のないprivateは一番下で

512デフォルトの名無しさん (ワッチョイ ffc5-JjKz)2017/09/02(土) 21:13:48.77ID:FGRVT/X40
変数の宣言と関数の宣言の順序がどうでも良いのは自明
メンバ関数の定義がメンバ関数内で使用するメンバ変数の宣言に先行する場合も実験する限り合法
(規格に具体的にどういう文言で規定してあるのかは知らん

まあ定義時点で不完全な型やら値やらはテンプレートの定義で頻出するから
あんま定義と宣言の順序にこだわらない処理系の作りなのだと納得しておく

しかしなぜかテンプレートの引数でない型の定義(または宣言)と使用には厳格な順序を求められる…
次のコードはビルドが通らない
class Baz {
// struct Bar; // 左のコメントアウトを外したら逝ける
 void foo(Bar& b);
 struct Bar { int x, y; }
};
多分Cとの互換性のために仕様がワケワカメになった例

513デフォルトの名無しさん (ワッチョイ 53e3-KFeJ)2017/09/02(土) 21:17:46.72ID:RAQSA3Kg0
ルールが存在してwell documentedで、ガバナンスがきいていることが重要
お前らのオレオレ哲学なんかどうでもいい

514デフォルトの名無しさん (ワッチョイ 2304-k/3h)2017/09/02(土) 21:19:59.11ID:EU1kDRi00
ああそっか、プロトタイプ宣言しなきゃいけないんだっけC++は
C#の脳で考えてたわ

515デフォルトの名無しさん (オッペケ Src7-mvsT)2017/09/02(土) 21:51:57.26ID:MiX3UcgLr
>変数の宣言と関数の宣言の順序がどうでも良いのは自明

自明かねぇ
C++11は問題になる例が思いつかないがC++98,03,14はどうでも良くない

516デフォルトの名無しさん (ワッチョイ 7f89-eV1K)2017/09/02(土) 22:01:20.86ID:VLpwNclp0
コンストラクタ実行時のメンバ変数の初期化の実行順が、初期化子の記述順ではなくクラス定義での並び順に従うっていうのがあった気がするけど、新しい規格では変わったんだっけ?

517デフォルトの名無しさん (ワッチョイ bf91-b8Mh)2017/09/02(土) 22:10:24.95ID:pFkNGMyF0
>>516
うそーん、初期化子の記述順>クラス定義の並び順だと思ってた。
てか、宣言の並び順は無関係?
そら、警察官も道行く江添さんに聞きたくもなるわw

518デフォルトの名無しさん (オッペケ Src7-mvsT)2017/09/02(土) 22:21:28.04ID:MiX3UcgLr
>>516
微妙な表現以外、特に変わったという話は聞いたことがない

C++03 12.6.2/5
Then, nonstatic data members shall be initialized in the order they were declared in the class definition (again regardless of the order of the mem-initializers).

C++20 draft 15.6.2/(13.3)
Then, non-static data members are initialized in the order they were declared in the class definition (again regardless of the order of the mem-initializers).

519デフォルトの名無しさん (ワッチョイ 637f-6h2J)2017/09/02(土) 22:37:32.53ID:i6uhqYA10
>C++11は問題になる例が思いつかないがC++98,03,14はどうでも良くない

とか書いてるから何か制約が無くなるような変更があったのかと思って聞いたんでない?

520デフォルトの名無しさん (ワッチョイ ffc5-JjKz)2017/09/02(土) 22:39:43.42ID:FGRVT/X40
ちな漏れがどうでもよい(どんな順序でも問題ない)と言ったのは
変数の宣言と関数の宣言の順序(どちらを先にするか)だからな
これ豆な

521デフォルトの名無しさん (オッペケ Src7-mvsT)2017/09/02(土) 23:00:05.29ID:MiX3UcgLr
C++11でもこれがあったか
struct A {
 int m;
 decltype(m) /*←mは先に宣言が必要*/ f() { return m; /*←mは後でもいい*/ }
};

C++11で緩和されたのは11章のどっか(忘れた)

522デフォルトの名無しさん (ワッチョイ 7fef-6h2J)2017/09/03(日) 15:24:44.62ID:5WRYI1ZX0
static メンバ関数と friend 関数の使い分けについて教えてください
どちらも似た機能だと思ってしまうのですが‥

523はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff15-X0kF)2017/09/03(日) 15:42:16.65ID:XXf7E2cS0
あ〜、そんなこと考えたことなかったけど、クラス (メンバ関数) 内部から見たら近いっちゃ近いのかも?
クラスを定義する側じゃなくてそのクラスを使う側の気持ちで考えて。

524デフォルトの名無しさん (ワッチョイ 7fef-6h2J)2017/09/03(日) 15:47:48.54ID:5WRYI1ZX0
friend 関数は public で,static メンバ関数は private で,て感じでこの前は書きました
普通はどうするものかをお聞きしたいところです

525はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff15-X0kF)2017/09/03(日) 15:55:23.63ID:XXf7E2cS0
すまんけど自明すぎてどう使い分けるとか説明できない。
使い分け以前にそもそも理解できているか怪しいと思う。

526デフォルトの名無しさん (ワッチョイ 7fef-6h2J)2017/09/03(日) 16:12:00.06ID:5WRYI1ZX0
何度も宣伝するようで気が引けますが,前に書いたのは >>158
演算子のオーバーロードに絡むものは基本 friend で,内輪で使うものは private の static メンバ関数で,
くらいの線引きをしています.
書いてみてわかったのは「自明」という感じはしないこと,かな,考えてみれば friend 関数って他の言語にはなさそうです

527デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/09/03(日) 16:48:05.14ID:jXGwZqzU0
何で? operatorはグローバルに出さなくても多重定義候補に挙がるぞ
俺は別の理由でoperatorをグローバルにする傾向があるが

528 ◆QZaw55cn4c (ワッチョイ 7fef-6h2J)2017/09/03(日) 17:05:16.51ID:5WRYI1ZX0
>>527
http://codepad.org/8Z3c2obA
ほー,これは不思議だなあ‥
friend をはずすとコンパイルできない
friend をつけてしまうと public に置こうが private に置こうが関係ない,という認識であっていますか?

529デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/09/03(日) 17:23:08.48ID:jXGwZqzU0
何が不思議?
friendを外すとメンバoperator+に過剰な仮引数となりエラー
friendは「メンバではない」のでアクセス指定は無関係
1点だけ気になるのが、friendは当該クラス自体と同じスコープに新しい識別子を導入しないはず・・・
識別子はoperator+で、これのみは某か標準のヘッダで既に宣言されているということか?

530 ◆QZaw55cn4c (ワッチョイ 7fef-6h2J)2017/09/03(日) 17:29:26.39ID:5WRYI1ZX0
>>529
>operator+に過剰な仮引数となりエラー
つまり operator+ の >>528 とは違うもう一つの呼び出し書式にしないといけないわけですね.
でもこの場合は private に置くとコンパイルできない
http://codepad.org/RLo9fKuI

friend はアクセス制御如何にかかわらず「強引にpublic にする」ように見えますね‥わからない‥

531片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd1f-dw5s)2017/09/03(日) 17:31:44.96ID:zmbOaeS6d
friendなら、その人のプライベートにアクセスできる。それだけの意味。

532片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd1f-dw5s)2017/09/03(日) 17:33:29.06ID:zmbOaeS6d
ある人のfriendなら、その人のプライベートにアクセスできる。

533デフォルトの名無しさん (ワッチョイ 7fef-6h2J)2017/09/03(日) 17:36:12.98ID:5WRYI1ZX0
>>531
>>522 をどうかよろしくお願いいたします.

534デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/09/03(日) 17:39:19.97ID:jXGwZqzU0
>>530
強引にpublic・・・で憶えやすいならそれでいいんじゃね?
ちな俺の憶え方はメンバでないものをどうやってprivateにするんだ、だ

535片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd1f-dw5s)2017/09/03(日) 17:40:51.54ID:zmbOaeS6d
あるクラスX内部のstaticでpublicな関数fは、Xのインスタンスの存在に関係なくX::fという名前でアクセスできる。
あるクラスX内部のfriendな関数gは、X内部のプライベートなメンバーm_aにアクセスできる。

536デフォルトの名無しさん (ワッチョイ 7fef-6h2J)2017/09/03(日) 17:42:36.39ID:5WRYI1ZX0
>>534
確かに friend 関数は「メンバーじゃない」ですか‥main() と同じような普通の関数なわけですね‥

537デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/09/03(日) 19:02:31.58ID:jXGwZqzU0
friendは他のクラスのメンバかも知れない
そういうときも俺の憶え方なら動揺せずに済む

538デフォルトの名無しさん (ワッチョイ ff32-X0kF)2017/09/03(日) 19:05:08.53ID:/S0gLPFy0
メンバ関数より、メンバでもfriendでもない関数を使おう
って誰かが言ってた

539デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/09/03(日) 19:11:23.65ID:jXGwZqzU0
欲しい機能がメンバでない関数で使えないとなれば
それはクラスの設計ミスないしはダサい設計だかんな
クラックできちまうのと違う提供すべき機能の欠落

540デフォルトの名無しさん (ワッチョイ ff90-D/08)2017/09/03(日) 19:52:56.95ID:yMO/rU630
またクズが暴れてるのか・・・

541デフォルトの名無しさん (ワッチョイ ffc5-JjKz)2017/09/03(日) 19:55:19.54ID:eN0Ud7+B0
>>530
(1) friendが無い場合
「z = x + y;」に出くわしたコンパイラは
 1. インスタンスxに対しするC::operator+(y)(1引数)の呼び出し
 2. グローバルな関数C operator+(C const& a, C const& b)(およびその亜種)の呼び出し
のあてはめを順次試みるがどちらの関数も宣言が存在しないからあてはまるものが無くエラーになる

(2) friendがある場合
friendがつくことでoperator+()はCのメンバ関数ではなく、グローバルな関数として宣言されたことになる
このとき「z = x + y;」に出くわしたコンパイラは、上の1、2の順で当てはめを試み、
グローバルな関数C operator+(C const& a, C const& b)の呼び出しと解釈する。
本来この関数はクラスCのprivateメンバにアクセスできないが、friendの力でそれができ、めでたくビルドできて動く。

細かい話は規格の人がフォローして☆ホスイ

542デフォルトの名無しさん (オッペケ Src7-mvsT)2017/09/03(日) 21:08:24.75ID:Kvjfvtnar
>(2) friendがある場合
最も近い(内側の)名前空間の関数になる(11.3/6-7)
friend関数がメンバーではないことがC++14に明記されていなかったようで、C++17ドラフトに追記された模様(N4659 12.2/2)

<おまけ>
宣言の場所がクラス内という事情により、リンカーはともかくコンパイラーから存在が見えにくい関数となる
この関数を使うには
・名前空間スコープで明示的に宣言し直す
 C operator+(C const& a, C const& b);
・ADL(argument dependent lookup)でクラススコープの検索を発動させる
 >>541でoperator+が呼び出せているのはADLによる

543デフォルトの名無しさん (オッペケ Src7-mvsT)2017/09/03(日) 21:36:42.85ID:Kvjfvtnar
つまりクラスの外で定義された関数をイメージすればいい
struct A { friend void operator+(A,A) {/**/} };
 ↓
struct A { friend void operator+(A,A); };
void operator+(A,A) { /**/ } // ただしADLが無いと見えない

544デフォルトの名無しさん (ワッチョイ b3e4-7rWm)2017/09/03(日) 21:38:57.90ID:ipvja13x0
ドット拡張とかすればいいのにね
int static_value.fanction() = 0; // function専用
vid functionx.function(char*p){} // function専用

ファイル内スコープなんて今時ほとんど使わないから無視するか識別子重なったら同一と見做すかして
ついでにドット型はファイル内の前方参照も無くし宣言を省けるようにするとかさ

545 ◆QZaw55cn4c (ワッチョイ 7fef-pwmx)2017/09/04(月) 01:15:45.54ID:rnM3x3Xp0
>>541
>friendがつくことでoperator+()はCのメンバ関数ではなく、グローバルな関数として宣言された
なるほど,そんなところだろうと >>528 で考えておりました.
件のライブラリもどきでは,operatorX のみクラス外に公開できればいいので,friend 関数で公開しておりました
その他は(基本的に)(公開すらしたくなかったため)static メンバ関数でのprivate 宣言となりました.

そうしたいようにそう書けばいいのですが今一つ統一感を見えてなかったかもしれません.
>>540
すみません

546デフォルトの名無しさん (ワッチョイ 636f-U1rl)2017/09/04(月) 06:46:46.49ID:bUZLYHBF0
>>522
static関数とfriendは全然違うし似てるとこなんてない

547デフォルトの名無しさん (スップ Sd1f-TajK)2017/09/04(月) 08:11:17.30ID:6a+3L2fAd
>>546
みなさんこれが典型的ななんの役にも立たない回答の好例です

煽ることしかできない奴乙

549デフォルトの名無しさん (スップ Sd1f-sFCB)2017/09/04(月) 08:17:12.97ID:MR3pz7f3d
>>546
共通点はある

550 ◆QZaw55cn4c (ワッチョイ a36d-pwmx)2017/09/04(月) 08:28:42.00ID:CIc3tQw70
>>546
static 関数をpublic に置くか,friend 関数にするかの判断がよくわからないのです.
なにか指針があればうれしいのですが

551デフォルトの名無しさん (スップ Sd1f-sFCB)2017/09/04(月) 08:37:44.08ID:MR3pz7f3d
呼ぶときにクラス名を書きたいか書きたくないかで判断
コンパイルした結果には大した差はない

552デフォルトの名無しさん (スプッッ Sd1f-gM2o)2017/09/04(月) 08:51:25.02ID:EfQNUMljd
staticだとADLに引っ掛からないとか?

553デフォルトの名無しさん (ワッチョイ ff4b-Tcdr)2017/09/04(月) 09:10:00.24ID:s4lmvNao0
クラスの外の関数とオーバーロードさせたければfriend
https://ideone.com/Bfcfbq

なんでこんなどうでもいいことで30も消費してんの

555デフォルトの名無しさん (ワッチョイ 6309-8f0a)2017/09/04(月) 10:38:52.68ID:Ly8n+qhB0
staticはメンバを触れない。friendは触れる。
それくらいしか違いないけどなぁ。
俺、フレンド関数はほとんど書いたことない。

556デフォルトの名無しさん (スプッッ Sd1f-gM2o)2017/09/04(月) 10:42:45.81ID:EfQNUMljd
>>555

557デフォルトの名無しさん (ワッチョイ 6309-8f0a)2017/09/04(月) 10:44:19.85ID:Ly8n+qhB0
違ったっけ。
staticってthisもってないんじゃなかった?

558デフォルトの名無しさん (ワッチョイ 6309-8f0a)2017/09/04(月) 11:03:17.00ID:Ly8n+qhB0
https://ideone.com/qDEfdG
勘違いやったわ。ごめんなさい。
一個勉強になった。

メンバ変数をprotectedにする人ってなんなの?露出狂なの?

560デフォルトの名無しさん (スプッッ Sd1f-gM2o)2017/09/04(月) 11:55:13.79ID:EfQNUMljd
そういう人が日本に一人二人いるかも知れないけど、気にするだけ損だよ

561デフォルトの名無しさん (ワッチョイ 6309-8f0a)2017/09/04(月) 12:17:47.72ID:Ly8n+qhB0
継承しても触れるようにするためだけど。継承自体がほとんどない。

562デフォルトの名無しさん (ワッチョイ 636f-U1rl)2017/09/04(月) 12:51:51.83ID:bUZLYHBF0
>>558
勘違いというのが勘違い

563デフォルトの名無しさん (ブーイモ MM1f-Gtnu)2017/09/04(月) 12:57:07.34ID:KIEUzmnzM
クラス内に定義されたstatic関数は、そのクラスのオブジェクトが存在しなくても使える関数ってのが本来の意味。
動的なオブジェクト状態には依存せず、静的なクラス構造のみに依存するからstaticね。

対してfriendは、自分をさらけ出す人を指定するめのもの。

stream のから呼び出されるオペレーターを定義する時には、既に完成している stream (だけ)に対して自オペレーターをさらけ出してしまうのがいろいろな意味で最も効率的。

以上から、friend関数は、静的ポリモーフィズムを関数レベルでお手軽に実現したいときに使うと思っている。

564デフォルトの名無しさん (ワッチョイ 636f-U1rl)2017/09/04(月) 13:03:46.35ID:bUZLYHBF0
表層的に言うと
staticはグローバル関数をクラススコープにして、かつアクセス制御も効くようにしたもの
friendは>>531の通り
ただそれだけのこと

>>561
なんで素っ裸でコートきてんの?露出狂なの?って聞かれて
コート脱いだらちんこ見えるようにする為だよって答えてんのと同じだぞ

まったく…露出狂は社会に出ちゃいけない存在なんだから、もう二度とプログラミングするんじゃないぞ

566デフォルトの名無しさん (ワッチョイ 334d-6h2J)2017/09/04(月) 13:05:58.55ID:ws3TkDjE0
仕様がグダグダですな。

567デフォルトの名無しさん (ワッチョイ ff90-D/08)2017/09/04(月) 15:31:51.46ID:xMNR7APW0
>>565
うまい事言うなあ
friendは「なんで俺にだけ素っ裸見せんの?露出狂なの?」と聞かれて
「だってお前友達じゃん。だからお前にだけ俺の裸見せてやんよ」と言ってるわけだしな」

568デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/09/04(月) 16:26:06.19ID:pd3pCmCq0
あれだろ
日本語のガールフレンドと
英語のgirl friendじゃ意味が違うというアレ

569デフォルトの名無しさん (ワッチョイ 6309-8f0a)2017/09/04(月) 16:40:24.27ID:Ly8n+qhB0
>>565
あんたに決められる筋合いはねー。災いあれ。

570デフォルトの名無しさん (スプッッ Sd1f-gM2o)2017/09/04(月) 16:58:13.05ID:EfQNUMljd
friendはクラスの役割を適当に分担しながら実装の隠蔽を図るのにはまあ妥当な仕組みだろうな

571デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/09/04(月) 17:07:07.44ID:pd3pCmCq0
継承をほとんど使わないってどんな分野だろう
俺んとこではポートを叩くときのプロトコルが
似ているようで少しずつ違うなんての普通にあるし

572デフォルトの名無しさん (スップ Sd1f-sFCB)2017/09/04(月) 17:13:32.82ID:MR3pz7f3d
複数のクラスのfriendが可能
staticは1個だけ

573デフォルトの名無しさん (スプッッ Sd1f-gM2o)2017/09/04(月) 17:15:33.44ID:EfQNUMljd
ダックタイピングじゃね?

>>567
親しき仲にも礼儀あり。
アクセサぐらい用意するよね。

575デフォルトの名無しさん (ワッチョイ a36d-pwmx)2017/09/04(月) 19:06:46.17ID:CIc3tQw70
>>565
>もう二度とプログラミングするんじゃないぞ
わかりました,もう止めます‥

576デフォルトの名無しさん (スプッッ Sd1f-gM2o)2017/09/04(月) 19:28:25.71ID:EfQNUMljd
C++のfriendが現実世界の友達と違うのは、最初に決めたやつ以外にfriendを増やすことは全く好ましくない、
という点だろう

>>569
publicにしてあるほうが、まだかわいげがあるよ
もう、これからはすべてpublicにしなさい

578デフォルトの名無しさん (ワッチョイ d3c9-Rh8o)2017/09/04(月) 23:34:49.89ID:jzRaTvEE0
friendじゃなくfamilyが良かった気がする

579デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/09/04(月) 23:45:07.31ID:pd3pCmCq0
そうだね、ニュアンス的にはそっちだ

580デフォルトの名無しさん (ワッチョイ a34b-hEpb)2017/09/05(火) 10:50:00.46ID:D99g/mXF0
>>578
#define family friend
で行ける?

581デフォルトの名無しさん (スプッッ Sd1f-gM2o)2017/09/05(火) 12:19:42.29ID:FAzSlJ+ld
#define amigo friend

582デフォルトの名無しさん (ワッチョイ ff9f-QSye)2017/09/05(火) 12:30:05.08ID:eN2J5TsS0
#define brother friend

583デフォルトの名無しさん (ワッチョイ 33e5-6h2J)2017/09/05(火) 13:50:03.50ID:MHv2cVQ40
printf("We are the World."); ←わかる
cout << "We are the World" <<endl; ←わからない

printfは「関数」だからわかります。
coutの<<はシフト?よくわからないです。
なぜC++はこんな文字の出力のさせ方にしたんでしょうか?関数じゃダメだったんですか?

584デフォルトの名無しさん (ワッチョイ bf91-6h2J)2017/09/05(火) 13:54:25.72ID:5+GcycqS0
方法が増えただけ
以前どおり関数でも大丈夫だよ

585デフォルトの名無しさん (ワッチョイ 636f-U1rl)2017/09/05(火) 14:03:50.06ID:CTfci4Vl0
>>583
<<は演算子オーバーロードだけどcoutなんて使う必要ないよprintfでOK

586デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/09/05(火) 14:04:00.15ID:5KjI8r3d0
>>583
それはまさにC++の作者(以下、禿)が
彼の著書でアピールしていたことだ
coutとは何か? <<とは何か?
記号と意味はどこでどのように関連付いているのか
意味は関数で表記することにしよう
<<の意味を表記する関数の関数名をoperator<<としよう
プログラム言語の命令とデータは動詞と目的語だ
動詞は関数と1対1対応でよいが目的語の定義は動詞の蓄積だ
・・・てな具合

587デフォルトの名無しさん (スッップ Sd1f-sFCB)2017/09/05(火) 17:31:12.14ID:LcvSXQg0d
>>583
シフト演算子を全く別の意味に使う
ひどい設計だと思う

588デフォルトの名無しさん (スプッッ Sd1f-gM2o)2017/09/05(火) 18:16:33.48ID:FAzSlJ+ld
それほどでもない

cout.<<("We are the World"). <<(endl);
があれば少しはマシだったかね。

590デフォルトの名無しさん (ワッチョイ a36d-pwmx)2017/09/05(火) 18:45:41.20ID:fgaIXgJY0
>>583
演算子のオーバーロードのよいお題ということで無理矢理ねじこんだんじゃないかな

591デフォルトの名無しさん (ワッチョイ c397-Pjaj)2017/09/05(火) 18:48:59.76ID:Ol0Fklqi0
using namespace std;
double value = 1.23;
cout << "value = " << value << endl;

592デフォルトの名無しさん (ワッチョイ 33e4-73wU)2017/09/05(火) 19:06:29.40ID:/x4Q9Nfh0
>>587
お約束を破っているが流し込んでる感が出ているので芸術点高い

593デフォルトの名無しさん (スプッッ Sd1f-gM2o)2017/09/05(火) 19:25:16.50ID:FAzSlJ+ld
+-*/と違って<< がシフト演算子なんて決まってないから「本来と違う」なんて意味なさない

594デフォルトの名無しさん (ブーイモ MMff-QCDP)2017/09/05(火) 19:34:59.61ID:TUBHCjnbM
vectorオブジェクトが破棄されるとき、要素の解放順は要素順であることは保証されていますか?

>>594
されてない

596デフォルトの名無しさん (スッップ Sd1f-sFCB)2017/09/05(火) 19:39:47.76ID:LcvSXQg0d
>>593
いや決まってる
ライブラリを抜きにした純粋な言語ではシフトの意味しかない
元の言語のC言語も同じ

* の方がいろいろな意味で使われている

597デフォルトの名無しさん (スプッッ Sd1f-gM2o)2017/09/05(火) 19:42:00.05ID:FAzSlJ+ld
>>596
べつにc/c++の話じゃなく、一般に<<をIOの意味で使ってもなんとも思わんでしょ
+-*/はさすがに刷り込まれている

598デフォルトの名無しさん (ワッチョイ 630d-8qEQ)2017/09/05(火) 20:04:52.50ID:Xvi9WQb30
数学の演算子とプログラム言語の演算子のことじゃないかな。

+ - は数学とプログラム言語で一致
* / は数学と違うけど文字セットに乗除の記号がないし妥当な代用
<< をシフトに使うのはC系プログラム言語の独特の使い方
だったら << が出力になってもええじゃないか、という話。

599デフォルトの名無しさん (ワッチョイ d3c9-Rh8o)2017/09/05(火) 20:10:04.82ID:CG6xGPaC0
向きは違うけどbashみたいなイメージだと思ってた

600デフォルトの名無しさん (ワッチョイ 0311-j2rg)2017/09/05(火) 20:10:32.88ID:gdvLxkwI0
お前がそう思うんならそうなんだろうお前ん中ではな

601片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd1f-dw5s)2017/09/05(火) 20:11:08.83ID:HWiXORhGd
数学では、比較してずっと小さい、ずっと大きいという意味で<<、>>を使うことがあるみたいだが。

602デフォルトの名無しさん (ブーイモ MMff-QCDP)2017/09/05(火) 20:11:12.82ID:TUBHCjnbM
>>595
ありがとうございます
保証するにはどうすればいいですか?
ググってstackoverflowとか見たんですが、できないという人もいたり
clear()を使えという人もいてよくわかりません

603デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/09/05(火) 20:17:36.79ID:5KjI8r3d0
禿が言い出した<<と
おまいらが言い出す<<では
悪いが社会への影響度がまるで違う
大勢のPGが<<はI/Oだと素直に従うかどうかでだ
新しい言語に旧来の言語と似た記号が出てきたからって
同じ意味でなければならないという法はどこにもない

604デフォルトの名無しさん (ワッチョイ a34b-hEpb)2017/09/05(火) 20:19:03.84ID:D99g/mXF0
>>602
なんで順番が気になるんだ?

605デフォルトの名無しさん (ワッチョイ ff9f-QSye)2017/09/05(火) 20:21:01.51ID:eN2J5TsS0
ローテート命令が演算子化されてないのは何故なんだぜ?

606デフォルトの名無しさん (ブーイモ MMff-QCDP)2017/09/05(火) 20:58:17.14ID:TUBHCjnbM
自己解決しました

>>604
必要な場面がありまして

607デフォルトの名無しさん (ブーイモ MMff-fXYx)2017/09/05(火) 21:12:58.72ID:Eko3GwfuM
printfをモダンにアレンジして新規格作ればいいのに。

608デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/09/05(火) 21:50:59.32ID:5KjI8r3d0
>>605
それな
俺も時々欲しくなるんだけど
キャリーを含む/含まないとかCHAR_BITの違いとかで
移植性が確保しにくそうだよな
記号を何にするかなんて後から決めりゃいいことだ

609デフォルトの名無しさん (ワッチョイ c300-sFCB)2017/09/05(火) 22:29:35.14ID:NIuXE25q0
>>605
ローテートなんて頻繁に使うものじゃないから

ビットが立ってる数を数えるとか、
ビットが立ってる位置を調べるとか、
バイト単位の並び替えとか、
小数から整数へ四捨五入とか、
他にいくらでも足したいものはある

610デフォルトの名無しさん (ワッチョイ f3c5-X0kF)2017/09/05(火) 22:54:34.26ID:DO26xGrR0
誰がこんなクソ言語つくったんだよ
作者はたぶんバチが当たって禿げてるはず

611デフォルトの名無しさん (ワッチョイ 334d-6h2J)2017/09/05(火) 23:01:40.29ID:nPfvfHCk0
だいたい最初にアスタリスクを乗算演算子にした奴は誰だよ。

612デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/09/05(火) 23:58:08.13ID:5KjI8r3d0
ジョンバッカスだろ

613デフォルトの名無しさん (ワッチョイ bf91-b8Mh)2017/09/05(火) 23:58:19.96ID:qAaUk7C50
operator:=とかoperator!?とか定義できるようにしてくれたら
お前らが度肝を抜くような使い方して見せるのに、残念でならない。

614デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/09/06(水) 00:21:11.51ID:eLdBXtqw0
operator?:ならマジで提案してみそ
あわよくば大手柄だぞ

615デフォルトの名無しさん (ワッチョイ 7f89-eV1K)2017/09/06(水) 00:25:00.50ID:VYubvLfh0
>>613
コンパイルエラーになろうが、ソース書くだけなら現状でもできるだろうから、度肝を抜いてくださいな。

616デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/09/06(水) 00:47:00.85ID:eLdBXtqw0
613なりのcxxfrontでも作ればいい

617デフォルトの名無しさん (ワッチョイ c300-sFCB)2017/09/06(水) 06:39:00.29ID:lz1Lh31S0
>>611
あなたならどれにする?

618デフォルトの名無しさん (ワッチョイ c300-sFCB)2017/09/06(水) 06:40:33.11ID:lz1Lh31S0
同じかどうかの比較が = ではないのが欠陥

>>615
なんか面白いこと言おうとしてるの?

620デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/09/06(水) 08:45:25.92ID:6GspjXt70
>>618
BASICのように=の意味が文脈で変わるべきだと?

621デフォルトの名無しさん (スッップ Sd1f-sFCB)2017/09/06(水) 08:49:59.58ID:/Hhi3W4sd
いや、代入を別の記号に
それこそ := でも

622デフォルトの名無しさん (ワッチョイ bfaf-DEiO)2017/09/06(水) 08:50:33.96ID:ZK3Q9QYA0
いやっすいやっす!代入に2タイプも使うのいやっす!

623デフォルトの名無しさん (ワッチョイ 6332-X0kF)2017/09/06(水) 08:51:14.26ID:DE0YQ4Kk0
数学の方を現代に合わせて変えるべき

>>623
勝手に変えたらどう?
数学はコンパイル不要だから、最初に定義さえすればお前の使いたい記号を好きなだけ使えるよ

625デフォルトの名無しさん (ワッチョイ 33a6-SDEO)2017/09/06(水) 09:44:12.68ID:f82uiC9X0
自民党の恐怖の言論弾圧が迫る! 

売国安倍は憲法改正で国民主権と基本的人権
を奪うつもりだ。 ← 民主主義の崩壊

http://www.data-max.co.jp/280113_ymh_02/

↑ マスコミは 9条しか報道しないが 自民案
の真の恐さは21条など言論の自由を奪うこと

自民案が通ると 政府批判しただけで逮捕されるぞ!

https://www.youtube.com/watch?v=h9x2n5CKhn8

上のビデオで 自民党は 日本人に基本的人権
は必要ないと 異常なことを平気で言う。

http://xn--nyqy26a13k.jp/archives/31687

↑ 都民ファーストも安倍と同じく 憲法改正で 人権
無視の大日本帝国憲法に戻すつもりだから
絶対に投票してはだめだ。 民主主義が崩壊する

http://blog.goo.ne.jp/ngc2497/e/8899f65988fe0f35496934dc972e2489

↑ ネトウヨ= 安倍サポーター工作員はネットで国民を騙す。

https://dot.asahi.com/aera/2016071100108.html?page=3
http://blog.goo.ne.jp/kimito39/e/c0dd73d58121b6446cf4165c96ebb674

↑ 安倍自民を操るカルト右翼「日本会議」は国民主権否定。
国民投票や選挙では自民党、維新、小池新党に絶対に入れるな。

626デフォルトの名無しさん (ワッチョイ c397-Pjaj)2017/09/06(水) 11:33:15.11ID:Mqa6x7N10
2003年8月の第1回から2007年3月の第6回までいずれも中国北京で計9次の会合が行なわれた
話し合いで解決しなかった
原爆、弾道ミサイルの開発にカネ、時間を与えてしまった
軍事力でつぶすしかないのに、まだこんなこといってる


         ,,-―--、
        |:::::::::::::;;;ノ  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        |::::::::::( 」 < 対話で解決しよう
        ノノノ ヽ_l   \______________
       ,,-┴―┴- 、    ∩_
     /,|┌-[]─┐| \  (  ノ
      / ヽ| |  バ  | '、/\ / /
     / `./| |  カ  |  |\   /
     \ ヽ| lゝ    |  |  \__/
     \ |  ̄ ̄ ̄   |
      ⊂|______|
       |l_l i l_l |
       |   ┬   

>>623
数学は、最初に定義さえすれば自由にしていいんだよ。

628デフォルトの名無しさん (スプッッ Sd1f-TajK)2017/09/06(水) 12:36:56.86ID:/66SkMcqd
話が成り立たないアホばっかりだな

629デフォルトの名無しさん (ワッチョイ 6f7b-DEiO)2017/09/06(水) 15:29:10.13ID:fXx7GStM0
プログラミング勉強し始めた初心者ですが
手詰まりになったので質問させてください

ttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_3_C&lang=jp

この問題をやっていますが、以下のコードで「Time Limit Exceeded」となってしまいます
他の正解者のコード見てもやってることは同じな気がするのですが
なにがいけないのでしょうか?

C++14コード
ttp://codepad.org/2Yxb33Ab

630デフォルトの名無しさん (ワッチョイ 6309-8f0a)2017/09/06(水) 15:33:28.13ID:I6k6pGLy0
多分出力のコードが間違ってる。

631629 (ワッチョイ 6f7b-DEiO)2017/09/06(水) 15:40:37.11ID:fXx7GStM0
追記です

Case#8までは「Accepted」でOKなんですが
Case#9が「Time Limit Exceeded」でした

Case#9は入力が2000000行もあるっぽいです

でも他の人とやってること自体は同じなんだから
このコードでできるはずと思い込んでしまって
何が悪いのかさっぱり検討つきません。。。

632デフォルトの名無しさん (ワッチョイ 6309-8f0a)2017/09/06(水) 15:54:34.75ID:I6k6pGLy0
2個出力してみ?

633デフォルトの名無しさん (ワッチョイ 6309-8f0a)2017/09/06(水) 15:55:29.34ID:I6k6pGLy0
あれ?勘違いだ。

634デフォルトの名無しさん (ワッチョイ 6309-8f0a)2017/09/06(水) 15:59:43.73ID:I6k6pGLy0
Listそのものがそんなに早くないとかかなぁ。
デリートはO(1)で終わるけど、ポインタの付け替えとかあるから、雑に遅いカモね。
最近のコンピュータだと配列の方が早かったりする。

635デフォルトの名無しさん (ワッチョイ 6309-8f0a)2017/09/06(水) 16:38:37.77ID:I6k6pGLy0
もしかしたら、sstringしてるのが重いかもなぁ。
cinで取れるのに何でssteamしてるのかよくわからん。

636デフォルトの名無しさん (ワッチョイ 6309-8f0a)2017/09/06(水) 17:25:42.27ID:I6k6pGLy0

637デフォルトの名無しさん (ワッチョイ 6309-8f0a)2017/09/06(水) 17:28:16.47ID:I6k6pGLy0
http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=2522643
すまんこれでは通らなかった。

638デフォルトの名無しさん (ワッチョイ 6309-8f0a)2017/09/06(水) 17:33:31.55ID:I6k6pGLy0

639デフォルトの名無しさん (ワッチョイ 6309-8f0a)2017/09/06(水) 17:37:32.00ID:I6k6pGLy0
適当なこと言ってすまんかった。

640デフォルトの名無しさん (ワッチョイ ff9f-QSye)2017/09/06(水) 18:55:53.01ID:pROvgKjd0
んぁ?

641デフォルトの名無しさん (ワッチョイ 6f7b-DEiO)2017/09/06(水) 19:15:05.29ID:fXx7GStM0
>>630
>>632-639
ありがとうございます!

まさに>>635だったみたいです
1行ごとに入力を読み込みたいからsstream使ってたのですが
そのせいでwhileループで毎回sstreamとstringの変数を定義しているせいでした

cinとstringだけで入力を読み込むようにして
変数の定義をループの外にしたらようやく自分のコードで通りました

sstream使わなくてもstring変数の定義をループ内に書いたままにしてたら
ずっと通らなくてそれで何時間も四苦八苦してようやくすっきりしました

変数の定義って思いの外処理時間がかかるんだなあとしみじみ実感しました

わざわざコーディングまでしてくださってありがとうございました

642デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/09/06(水) 21:33:01.28ID:6GspjXt70
> 変数の定義って思いの外処理時間がかかるんだなあとしみじみ実感しました

ものによる
テキトーこくな

643デフォルトの名無しさん (ワッチョイ ff11-2CmY)2017/09/06(水) 21:57:51.28ID:P+VnvHZA0
>>642
> ものによる
string だろ
話の流れも読めないのか?

> テキトーこくな
実際にやってるだろうに何を言ってるんだよ
いちゃもんつけたいだけか?

644デフォルトの名無しさん (ワッチョイ 334d-6h2J)2017/09/06(水) 22:53:02.57ID:OHCEwHay0
変数の定義って処理なのか?

stringが遅いのはどの言語でも同じ。ヒープに確保してるから。
Cの特権は固定長ならスタックに文字配列を確保できること。

645デフォルトの名無しさん (ワッチョイ 4396-SIBH)2017/09/06(水) 23:16:43.16ID:LeFS08p/0
>>644
COBOLとかFORTRANヒープの概念があるとは

646デフォルトの名無しさん (ワッチョイ 1acd-ZVix)2017/09/07(木) 00:17:30.43ID:E8QDgFBm0
デフォルトだとcinがstdioと同期取ってやたら遅かったりもする罠

647デフォルトの名無しさん (ワッチョイ 2309-g9be)2017/09/07(木) 02:37:57.68ID:t89SIQGa0
コンストラクタがやけに重いクラスとかあるんだよ、標準でも。

648デフォルトの名無しさん (ワッチョイ 9ac5-FXPZ)2017/09/07(木) 06:02:40.83ID:sowmLjiv0
C++のstream関連は全て糞
operator<<()の多重定義で自作クラスのフォーマット文字列化(stringizing)ができる、というのがちょっと嬉しかったけど
しょせんコードの見かけだけの話やし、実行速度は速いし改造もしにくい、
(printf()ならvprintf()を使って関数1個書けば良いところをstd::streambufの派生クラスを作る羽目に、、
 行単位の排他とかの作り方を比べたらワカル

だいたい一般に1つのクラスに対して一般に
 (1) 人間が読むためのフォーマット文字列化
 (2) ストレージか何かへのシリアライズ
 (3) ストレージか何かからのデシリアライズ
の3つの要求が生じるのに対してoperator<<()とoperator>>()の多重定義の2個では数が足りない
だったら上記3メソッドのインターフェースを全部Cのstdioベースで実装して済ませるわ;

とにかくC++の中にあってstreamはパフォーマンスよりもコードの見かけに拘ってみました感が異端

>>644
> 変数の定義って処理なのか?
コンストラクタって知ってるか?

> stringが遅いのはどの言語でも同じ。ヒープに確保してるから。
そもそもstring型はすべての言語にないし文字列型と言う意味ならFORTRAN77のように固定領域にとる言語もある

>>645
モダンなバージョンなら普通にあるでしょ
Fortran ⇒ Allocate 文
Cobol もオブジェクト指向になってるぐらいだからあると思う

650デフォルトの名無しさん (ワッチョイ 8aaf-RIgo)2017/09/07(木) 07:52:40.01ID:E5YdMpMh0
相談室ということで
C++でディープラーニングのライブラリといったらTensor Flowとtiny dnn以外にあります?

651デフォルトの名無しさん (ワッチョイ b36d-uTIA)2017/09/07(木) 08:09:04.47ID:6e0QaN8o0
>>650
ソニーから nnabla だったかな

652デフォルトの名無しさん (ワッチョイ 17e4-9lW3)2017/09/07(木) 08:40:05.33ID:BwtgUJJf0
ライブラリなど不要

653デフォルトの名無しさん (スッップ Sdba-h2R5)2017/09/07(木) 12:48:57.45ID:ccNhwHbvd
学習など不要

654デフォルトの名無しさん (ブーイモ MMff-zX58)2017/09/07(木) 12:51:16.16ID:m/W0Vwq0M
>>648
おちつけ。

> 実行速度は速いし改造もしにくい、

> だいたい一般に1つのクラスに対して一般に

655デフォルトの名無しさん (ワッチョイ 174d-x/0H)2017/09/07(木) 15:45:42.89ID:lWzPhy/F0
>>649
つまりインスタンス生成を「変数の定義」って言ってるのか。分りにくいな。

656デフォルトの名無しさん (スップ Sd5a-HfVo)2017/09/07(木) 16:59:31.64ID:WeVFjmVDd
宣言でなく定義ならそういうことだろう

657デフォルトの名無しさん (ワッチョイ 8aaf-RIgo)2017/09/07(木) 17:17:37.39ID:E5YdMpMh0
>>651
ありがとうございます
調べてまいります

658デフォルトの名無しさん (ワッチョイ 9ac5-FXPZ)2017/09/07(木) 23:11:06.34ID:sowmLjiv0
でけた!
ttp://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=2524752#1

>>654
スマンorz

659デフォルトの名無しさん (ワッチョイ 2309-g9be)2017/09/08(金) 10:17:30.47ID:28eiJ4Rm0
>>658
お、ちょっと早いな。

660デフォルトの名無しさん (ブーイモ MM26-7FiT)2017/09/08(金) 21:05:50.39ID:VlEBq8a5M
>>648
モダンな言語の多くはprintfライクだし、javaも結局追加された。
printfライクのほうが効率的なことは経験的にわかってるのだからstreamにイマドキのformat関数を追加してくれればいいのに。

661デフォルトの名無しさん (ワッチョイ 9ac5-FXPZ)2017/09/08(金) 21:16:51.55ID:EwiEYpeM0
もっと50 msばかり速くすた、
ttp://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=2526468#1

662デフォルトの名無しさん (ワッチョイ 9ac5-FXPZ)2017/09/08(金) 22:55:01.80ID:EwiEYpeM0
さらに1桁速くしたわふーん(0.65 sec → 0.06 sec)
ttp://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=2526595#1

メモリ消費量も1/4未満になた、(34520 KB → 7432 KB)

663デフォルトの名無しさん (ワッチョイ baef-QyhX)2017/09/09(土) 14:52:21.58ID:4g0rauvm0
>>662
それって双方向連結リストなの?

664デフォルトの名無しさん (ワッチョイ 2309-g9be)2017/09/09(土) 19:52:47.52ID:FtyOtgZ20
https://ideone.com/aKaZF9
これ、なんで通らないの?
頭爆発しそう。

665デフォルトの名無しさん (ワッチョイ 2309-g9be)2017/09/09(土) 20:19:57.93ID:FtyOtgZ20
あぁ、色々いじってたら通った。
わけわかめ。

666デフォルトの名無しさん (ワッチョイ 2309-g9be)2017/09/09(土) 20:23:23.69ID:FtyOtgZ20
と思ったらイデオンGCCで動かねーでやんの。

https://ideone.com/oqpQ8i
VC2017では動く魔法のコード。

667デフォルトの名無しさん (ワッチョイ 9a4b-ZVix)2017/09/09(土) 20:39:58.02ID:iTjZctD80

668デフォルトの名無しさん (ワッチョイ 2309-g9be)2017/09/09(土) 20:47:48.75ID:FtyOtgZ20
うほ。素晴らしい。
が、今度はVCで動かなくなった。
なんじゃそれ。

669デフォルトの名無しさん (ワッチョイ 2309-g9be)2017/09/09(土) 21:07:39.82ID:FtyOtgZ20
なんか、VCもGCCも半分くらいずつ間違えてる予感。
Setだけだとストレージがないからなんかバグの予感するし。
ストレージ持たせようとすると修飾が間違ってるって言われてる感じがする。
なんだこれ。

670デフォルトの名無しさん (ワッチョイ 2309-g9be)2017/09/09(土) 21:15:58.82ID:FtyOtgZ20
識者求!急募だ!!

671デフォルトの名無しさん (ワッチョイ 2309-g9be)2017/09/09(土) 21:53:02.98ID:FtyOtgZ20
https://ideone.com/mqTzb8
これで手打ち。
よくわからん回り方されたなぁ。
とほほほ・・・。

672デフォルトの名無しさん (ワッチョイ 2309-g9be)2017/09/09(土) 21:58:32.95ID:FtyOtgZ20
最後に。さんきゅーそー。

673デフォルトの名無しさん (ワッチョイ 9a4b-ZVix)2017/09/09(土) 23:23:25.26ID:iTjZctD80
VC++のバグ…ではなくいつもの標準非準拠の独自仕様の気はする
https://ideone.com/10vEzK

674デフォルトの名無しさん (ワッチョイ 2309-g9be)2017/09/10(日) 00:32:56.15ID:8Jhjgi9Q0
>>673
およ、折衷案できそうか?
自分はVC動けばいいんだけど、
コード公開するときに動かないと間抜けっぽいから良対応しようと一応やってる。
visualデバッガが便利すぎてVCやめるの大変。

675デフォルトの名無しさん (ワッチョイ 17e4-QyhX)2017/09/10(日) 00:56:23.48ID:ldnMOHDz0
デバッガのフロントエンドは自作するもの

676デフォルトの名無しさん (オッペケ Sr3b-Pw16)2017/09/10(日) 00:57:46.72ID:9qoMDsB9r
完全な解決策も規格の規定も知っているが、
再現する最小限のコードにしてから他人に見せる知能も持ち合わせていない者には時間の無駄

677デフォルトの名無しさん (ワッチョイ fa4b-ZVix)2017/09/10(日) 02:34:17.64ID:8GGB49VK0
非修飾名の探索の問題だから発想を変えて明示的修飾で回避すればいいって話?
https://ideone.com/YTnOF2

678デフォルトの名無しさん (ワッチョイ 174d-x/0H)2017/09/10(日) 06:00:54.71ID:Jp2o0TJ00
templateの使い方を完全に勘違いしてやがる。

679デフォルトの名無しさん (ワッチョイ 2309-g9be)2017/09/10(日) 07:35:26.76ID:8Jhjgi9Q0
折衷案色々あるなぁ、感心する。

>>676
別に個人のコードでどこかに迷惑かけてるわけじゃないし、この程度のコードも読めない方が問題。
それに高慢なお方は最初から相手にしてない。マウントしてほしくてやってるんじゃないんだよ。

680デフォルトの名無しさん (ワッチョイ 2309-g9be)2017/09/10(日) 07:49:26.32ID:8Jhjgi9Q0
https://ideone.com/Ofcm9I
>>677を採用。これで解決しました。
明示の仕方がいまいちよくわかってなかった。
大変ありがとうございました。

681デフォルトの名無しさん (ワッチョイ 9a9f-KUeS)2017/09/10(日) 10:50:41.00ID:Ch3ZHKVB0
プロパティー実装例か…
しかしまぁクソ面倒だ罠

682はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5a15-xkdj)2017/09/11(月) 21:22:51.45ID:+dEH7rh50
auto で受けるとおかしげなことになるんちゃう?

683デフォルトの名無しさん (ワッチョイ 174d-x/0H)2017/09/12(火) 01:44:38.63ID:uA5S/Coo0
馬鹿に触らせるなテンプレートって昔から言うしな。
フレームワークのテンプレートライブラリ提供する側だけが使っていいんだよ。

684デフォルトの名無しさん (ワッチョイ 17e4-QyhX)2017/09/12(火) 08:52:24.85ID:n2tkiU0+0
テンプレートはSTLやboostのまねをしていれば下手なことにはならないはずだが

真似するだけでも、それなりのスキルが必要だ

686デフォルトの名無しさん (ワッチョイ e311-xkdj)2017/09/12(火) 09:35:13.31ID:M9yu8us30
何故そういうコードになっているかを理解せずに猿真似して意味があるかどうかはわからんけど
autoで受けるとおかしなことになるのは、キャストや代入で望む結果を得る方法(expression templateなど)全部そう
暗黙のキャストでなく関数呼び出しを強制すればautoでも大丈夫だけど

687デフォルトの名無しさん (ワッチョイ 0e1c-HB/9)2017/09/12(火) 10:11:33.04ID:CGKPtYms0
> 馬鹿に触らせるなテンプレートって昔から言うしな。

自分が触りたくないのはわかったから

688デフォルトの名無しさん (ワッチョイ 2309-g9be)2017/09/12(火) 19:29:46.28ID:mgCIj6GX0
>>682
コピコン切ってあるから大丈夫だと思う。あとは推論性能。

689デフォルトの名無しさん (ワッチョイ 3b00-h2R5)2017/09/12(火) 19:43:33.31ID:8IhLGzTX0
コピコン

690デフォルトの名無しさん (ワッチョイ 2309-g9be)2017/09/12(火) 20:29:35.11ID:mgCIj6GX0
コピーコンストラクタ!

691はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5a15-xkdj)2017/09/12(火) 22:54:11.94ID:cQiNwo4o0
>>688
あ、なるほど、状況を勘違いしてた。

C++17 からは RVO が使える場合は常に RVO で処理する (従来は「してもよい」というオプショナルな動作) ことと、
そのときはコピー (ムーブ) コンストラクタが無くても良いというルールが念頭にあったのだけれど、
この場合は RVO は関係なかった。 スマソ

692デフォルトの名無しさん (オッペケ Sr3b-Pw16)2017/09/12(火) 23:35:09.46ID:q3PtGkEdr
>C++17 からは RVO が使える場合は常に RVO で処理する

ほうほう、それは本当ですか

693はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 1315-SGtB)2017/09/14(木) 16:51:14.81ID:HER/jB+d0
そうです。

694デフォルトの名無しさん (オッペケ Sr4d-sxPP)2017/09/14(木) 17:39:29.28ID:7On5vAcFr
>>693
だとすると
https://wandbox.org/permlink/KeuEcKR5gy18bi3K
この二つのアドレスは同じになるはずでは?

695デフォルトの名無しさん (ワッチョイ ab1c-/PGn)2017/09/14(木) 22:59:53.42ID:AfykdPhZ0
いい流れだ

696デフォルトの名無しさん (ワッチョイ c1a6-PzL5)2017/09/15(金) 15:29:03.53ID:zUPCfesd0
"clacla.h"
class Clacla {
void func1();
void func2();
void func3();
};

"clacla.cpp" //実装部
クラスClacla くくり { <-ここ
void func1() { printf( "1" ); }
void func2() { printf( "2" ); }
void func3() { printf( "3" ); }
};
のように関数の実装時にClacla::を省略する方法ってあるでしょうか?

697はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 1315-SGtB)2017/09/15(金) 15:33:45.29ID:leF15WXE0
>>694
最適化が有効なら C++17 であろうがなかろうが clang なら RVO が効くはずだけど、 u.p の値は null になっちゃうな。
RVO がどうこうじゃなくて this の挙動に関するなんか変なルールが適用されてるとかかも?

698片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdb3-dc9P)2017/09/15(金) 16:07:51.71ID:RQr5TBB1d
>>696
クラス内部にインライン関数を埋め込む方法しかない。

699696 (ワッチョイ c1a6-PzL5)2017/09/15(金) 16:35:44.21ID:zUPCfesd0
>698
やっぱり無いですよね。
ありがとう。

700デフォルトの名無しさん (オッペケ Sr4d-sxPP)2017/09/15(金) 21:02:35.06ID:86K7wrSvr
>>697
いやだからISO/IEC DIS 14882:2017 15.2/p3の規定により常にRVOが働くわけではないのではないかと申しているのですよ
ついでにu.pがnullptrになることはない

701デフォルトの名無しさん (ワッチョイ 93c5-+NpA)2017/09/15(金) 21:24:40.19ID:xDlOGQNS0
実にC++相談室らしい流れ

702デフォルトの名無しさん (ワッチョイ 59e4-HfMd)2017/09/15(金) 21:27:27.94ID:5X/IRSU20
右辺値参照の暗黙適用は例外の処理で不都合があるよね
元の値をTmpにコピっといて例外発生で書き戻すにしても
関数A処理内で呼び出した関数Bからの例外をAのユーザコードでは完スルーなのに
コンパイラコードではコッソリ捕まえて書き戻す必要が有る
そんときロックでも掛かってたらどーすんのよと

呼び出し繋がりを横断的に管理要するとんでもないコスト増なんじゃね?

703デフォルトの名無しさん (ワッチョイ 93c5-+NpA)2017/09/15(金) 21:36:23.16ID:xDlOGQNS0
Tmpのアドレスを関数B(およびその先の関数)が知る可能性がコンパイラから見て排除できない限り
関数Aから関数Bを呼び出す前にTmpは元の値の完コピーにならざるおえないのでは…
(そうでなければ副作用のある関数を安全にコンパイルできない&安心して書けない

さらにロックに入るときと出るときは上と同じ理由で結果的に完コピーになる上に、
まともなOSならメモリバリアまで手当てしてくれるんじゃ…

704デフォルトの名無しさん (ワッチョイ 93c5-+NpA)2017/09/15(金) 21:42:30.18ID:xDlOGQNS0
つまり右辺値参照の暗黙適用が効力を持つのはスゲー広範にインライン展開されるような場合
(当然いかなるOSのAPIやシステムコール類の呼び出しも含まない
「だけ」
であって、通常のプログラマーにはあんまありがたみがはっきりしない仕様

※ 個人の感想です

705デフォルトの名無しさん (スッップ Sdb3-+ReX)2017/09/15(金) 22:02:45.85ID:1aOT1P+6d
コンパイラに頼らないで、素直にパラメーターの参照にしよう

706はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 1315-SGtB)2017/09/15(金) 22:04:08.03ID:leF15WXE0
>>700
意図するところをあらためて説明すると、
最適化オプションを有効にする (RVO が効くはず) と実際に null になるんだから
clang があてにならないのじゃない? という話。

707デフォルトの名無しさん (ワッチョイ 59e4-HfMd)2017/09/15(金) 22:08:16.65ID:5X/IRSU20
いや noexcept 付きを呼ぶ場合も有難味あると思うよ
C++は const祭りに noexcept祭り追加でござる
特殊化も爆発

708デフォルトの名無しさん (オッペケ Sr4d-sxPP)2017/09/15(金) 22:34:11.14ID:1joZngjnr
>>706
なるほど理解した
C++11の頃に輝いたclangはその後、規格的にはG++にも劣るゴミなのでそのへんは致し方ない

709デフォルトの名無しさん (ワッチョイ 5ba6-sxPP)2017/09/16(土) 11:22:55.52ID:u7cVvkyR0
forward祭り

710デフォルトの名無しさん (スップ Sdf3-1/aj)2017/09/18(月) 10:24:11.11ID:lVEmBRA9d
tcp/ipの勉強のためにC++で何か作れば勉強になるかな?って思ってるのだけど
こういうものを作れば勉強になるよってものある??
パケットの動きだったり階層の考え方だったりを学びたい

>>710
TCP/IPの勉強ならWireSharkの使い方覚えた方が早いかも
その上のプロトコルレベルなら勉強したいプロトコルの簡単なクライアントから始めればいいと思う
ちなみに俺はNetNewsに流れるむふふ画像を取り込みたかったのでnntpのクライアントをperlで組んで勉強した

712デフォルトの名無しさん (スップ Sdf3-1/aj)2017/09/18(月) 11:05:46.29ID:lVEmBRA9d
>>711
プロトコルレベルの勉強をしたい
そうなるとhttpサーバを立てることになるのかな?
そういう場合は簡単なhttpサーバとクライアントを作成すれば良いのかね?
それで通信しあってwiresharkで中身を見てtcpだったりhttpだったりを見るべき?

713デフォルトの名無しさん (ワッチョイ 939f-0QkJ)2017/09/18(月) 11:39:07.40ID:9mrqYCJU0
おれは一昔前、深夜ボリュームでかくする姉貴のPCが煩くてTCP通信でマスターボリューム弄るサーバー&クライアント作ってコッソリ仕込んでコントロールしてたな。
まぁ、やってやるぞというモチベーションは大事だとおもうよ。
ガンバってね。

714デフォルトの名無しさん (オッペケ Sr4d-2/pv)2017/09/18(月) 11:41:39.15ID:qrTqFTlir
>>713
それ仕込んでるとき超ワクワクしそう

715デフォルトの名無しさん (スップ Sdf3-1/aj)2017/09/18(月) 11:43:19.16ID:lVEmBRA9d
>>713
姉貴のパソコンにサーバプログラム常駐させる
そいつがポートXXXで待ち構える

同じ家なのでネットワーク帯は同じで
自分のpcからポートXXXにメッセージ送信する

姉貴のサーバプログラムが受け取ってボリューム下げる処理をする

こんなことしてたってことかね?

716デフォルトの名無しさん (ワッチョイ 939f-0QkJ)2017/09/18(月) 12:01:08.52ID:9mrqYCJU0
>>715
まぁ大体そんな感じなんだが、急に音量小さくすると即効でばれるので、まず、姉貴PCの音量を取得するのが第一だな。
そこからスライダーでボリューム下げていった値をサーバーに順次送信しサーバープログラムがその値に応じて音量を徐々にフェードコントロールするといった具合だな。

717デフォルトの名無しさん (オッペケ Sr4d-sxPP)2017/09/18(月) 12:08:20.13ID:nt0hX0ohr
>>716>>715の三人きょうだいの次女である可能性が否定できない

718デフォルトの名無しさん (スップ Sdf3-1/aj)2017/09/18(月) 12:10:35.92ID:lVEmBRA9d
>>716
いつも音量小さくなってたのはあんたのせいだったのね??


ってことはそれって通信はhttp?

719デフォルトの名無しさん (ワッチョイ 939f-0QkJ)2017/09/18(月) 12:15:30.74ID:9mrqYCJU0
>>718 http関係ない
ボリュームと改行の平文を繰り返し送るだけの超簡易仕様
だれでも作れる

720デフォルトの名無しさん (スップ Sdf3-1/aj)2017/09/18(月) 12:57:21.32ID:lVEmBRA9d
>>719
相互にsend recvしてるだけってことかな

>>712
サーバーよりクライアントの方が簡単だからサーバーは適当な奴持ってきて簡単なクライアントを作るところから始めればいいと思う

722デフォルトの名無しさん (スップ Sdf3-1/aj)2017/09/18(月) 14:27:41.23ID:lVEmBRA9d
>>721
IISサーバとかってことかな?
あの辺の使い方も基本は同じよね?
ポート指定して使うみたいな

723デフォルトの名無しさん (ワッチョイ 9311-BsvU)2017/09/18(月) 15:08:42.19ID:eqWC6Q8G0
>>722
> IISサーバとかってことかな?
環境ならWindows IISが簡単だろうね
ネットでググれば情報たくさんあるし

724デフォルトの名無しさん (ワッチョイ 93f0-o7xi)2017/09/18(月) 17:35:56.07ID:UWkHQHZA0
そもそも、TCP/IPの練習にC++は妥当なのか?

725デフォルトの名無しさん (スップ Sdf3-1/aj)2017/09/18(月) 17:55:46.62ID:lVEmBRA9d
>>724
CとC++しか言語知らんのや...
IISサーバーと通信できない
これのポートとかどう設定するんや...

726デフォルトの名無しさん (ワッチョイ 8109-VUiJ)2017/09/18(月) 18:29:11.61ID:Of28e9o20
ネットワークライブラリは現在策定中だっけ。

727デフォルトの名無しさん (ワッチョイ 2be3-SGtB)2017/09/18(月) 18:34:59.92ID:HogVByKA0
>>725
以前ネットワークプログラム勉強するのにこのサイト利用させてもらった
わかりやすいと思う

http://x68000.q-e-d.net/~68user/net/

728デフォルトの名無しさん (スップ Sdf3-1/aj)2017/09/18(月) 20:33:20.53ID:lVEmBRA9d
>>727
今読み始めたけど丁寧でわかりやすい

729デフォルトの名無しさん (スップ Sdf3-1/aj)2017/09/19(火) 10:23:20.37ID:mIuFgC1Fd
初歩の初歩の初歩の質問なんだけど
あるPCにポートXXを口とするサーバソフトを同時に二つ立てることはできないよね?
1つめはXXを使うとしてその後にたてられた2つめはどうなる?
(スレチっぽくなってますがよろしくです...)

730デフォルトの名無しさん (ワッチョイ 2be3-SGtB)2017/09/19(火) 10:38:02.75ID:S6233VLa0
出来ます
サーバー側はリクエストに応じて複数のプロセスを起動し、
同じポート番号を使って複数のプロセスが受け答えします
各プロセスはそれぞれで生成したソケットを使ってクライアントとやり取りします

731デフォルトの名無しさん (スップ Sdf3-1/aj)2017/09/19(火) 10:57:49.02ID:mIuFgC1Fd
>>730
それってプログラム内でforkして子プロセスを作る場合の話です?
サーバソフトAとサーバソフトBの両立ができたとすると
ポートXX使用します!ってのはどこでどちらを使うと判断するのでしょうか...

732デフォルトの名無しさん (ワッチョイ 936f-hIIm)2017/09/19(火) 13:04:43.06ID:TdcUa1CK0
特定ポートでlistenするプロセスは一つだけです。
複数のプロセスで共用は出来ません。

>>729
LANポートが複数あればできるし、LANポートがひとつしかなくてもIPアドレスを複数割り当てられるなら可能

734デフォルトの名無しさん (ワッチョイ 016f-V8Sm)2017/09/19(火) 18:44:47.92ID:PcYxkZC90
>>733
ああ言えばこういうの典型
どうでもいいけどC++と関係ないクソ話もうヤメロよカスども

しかも間違ってるという

>>735
ん?
どこか違ってたっけ?

737デフォルトの名無しさん (オッペケ Sr4d-sxPP)2017/09/19(火) 19:48:42.76ID:SHe+skknr
>>736
二つ前のレスくらい読んでほしいものだ

738デフォルトの名無しさん (ワッチョイ ab1c-/PGn)2017/09/19(火) 20:12:29.29ID:4ZFv917O0
C++98ではできない
C++11以後できるようになった
だろ、通信は本質的にマルチタスクだ

739デフォルトの名無しさん (ワッチョイ 994d-o7xi)2017/09/20(水) 00:14:27.26ID:zNeStlMI0
なにをいってるかよくわからんがすごい自信だ。

740デフォルトの名無しさん (ワッチョイ 8109-VUiJ)2017/09/20(水) 01:48:22.84ID:E2xZjesx0
規格外のライブラリならほぼ何でもありといえばありだけどさ。
ライブラリ自信はまだ策定中でしょ。

741デフォルトの名無しさん (ワッチョイ 6123-pFfB)2017/09/20(水) 03:12:29.17ID:E3lPvo/Y0
bind()する時のローカルのIPアドレスを別々にすれば同一ポートで別々のサーバプログラムって動かないの?

742デフォルトの名無しさん (ワッチョイ 016f-V8Sm)2017/09/20(水) 04:49:07.58ID:uOAr6bd90
>>741
だから動くってば
ユニークである必要があるのはIPアドレス:ポート番号の組み合わせだから

>>730
>各プロセスはそれぞれで生成したソケットを使って
まさかその生成されたソケットがサーバーと同じポート番号を持つとか思ってないよな?

いずれにせよこんなのはネットワーク初心者の話題であってC++とは何も関係ない

>>737
それが間違ってるって話
>>741が言うようにローカルアドレスを指定すれば同じPCで同じポートを使用するサーバーを複数立てられる

744742 (ワッチョイ 016f-V8Sm)2017/09/20(水) 10:56:07.53ID:uOAr6bd90
自己訂正
>まさかその生成されたソケットがサーバーと同じポート番号を持つとか思ってないよな?
あはは、これは俺の勘違いだったわ
acceptで返されるソケットはlistenポートと同じポート番号を持っている

745デフォルトの名無しさん (ワッチョイ 0665-hoCt)2017/09/21(木) 05:09:49.50ID:t8iqXrAz0
質問です。

{ 10/*%*/ } = { a,b,c };

というのは、
a = 10%
b = 10%
c = 10%
なのでしょうか?それとも、
a+b+c = 10%
なのでしょうか?

746デフォルトの名無しさん (ワッチョイ de23-KbB0)2017/09/21(木) 05:48:27.92ID:eSaSp7RC0
C++を習得するのに莫大な時間を費やしました。

C++のプロフェッショナルなプログラマーになりたかった。

なのに、ハード系の知識が無いと言う理由で、もらう仕事はVB.NET、C#.NET系ばかりでした。

747デフォルトの名無しさん (ワッチョイ de23-KbB0)2017/09/21(木) 05:51:26.56ID:eSaSp7RC0
質問を書くのを忘れやんした。

C++の仕事ってハード系、通信系、制御系以外、通常業務のシステム開発はないんでしょうか?

748デフォルトの名無しさん (ワッチョイ 8a9f-Dwg9)2017/09/21(木) 06:00:29.19ID:Bo0/1phe0
ポート重複で同じアドレスでBananaサーバーみたいなラックマウントサーバーの仕組みってあれは一つのサーバーがlistenで待って接続してきたクライアントの処理を複数の子サーバーに割り振っているだけなのか?

749デフォルトの名無しさん (オッペケ Sra3-u5jE)2017/09/21(木) 08:18:42.29ID:E1HbcZFyr
struct unko { unko()=delete; };
int main() { unko u{}; }

何故コンパイルが通るのかを理解するのに半日かかった
やはりこの言語はクソ

750デフォルトの名無しさん (ワッチョイ fa2e-hoCt)2017/09/21(木) 08:46:59.52ID:iktVOuYO0
>>746
他人から降って湧いてくることしか期待してないからそうなる
自分がやりたいことは自分で始めろ

751デフォルトの名無しさん (ワッチョイ 06cd-kYwA)2017/09/21(木) 10:13:00.29ID:JjsSVLys0
>>747
C++はC#とかでできないことがあるときに仕方なく使うイメージがある

752デフォルトの名無しさん (オッペケ Sra3-mUFf)2017/09/21(木) 11:36:34.81ID:p6kNBh4ir
>>749
あれ
何で動くんだ?
plain old dataあたりの話が噛んでる?

753デフォルトの名無しさん (ワッチョイ fa2e-hoCt)2017/09/21(木) 12:35:00.95ID:iktVOuYO0
C#の方が楽なところが特に無いのでC#という選択肢が無い

754デフォルトの名無しさん (ワッチョイ 8a4b-nCCx)2017/09/21(木) 13:21:38.51ID:TbHBi0+x0
>>752
PODがかかわってる部分はあるけど基本として理解しておくべきことは
=default,=delete指定はコンストラクタの宣言でも定義でもない
ということ

つまり>>749の文脈では
struct unko { unko()=delete; };
int main() { unko u{}; }

struct unko {};
int main() { unko u{}; }
と等価でありuはaggregate初期化されコンストラクタは呼ばれないからエラーにならない
(unko();みたいにはっきりとデフォルトコンストラクタが呼ばれる状況ならエラーになる)

755 ◆QZaw55cn4c (ワッチョイ aaef-hoCt)2017/09/21(木) 16:15:38.61ID:na02B6ss0
>>750
お、おう!

756デフォルトの名無しさん (オッペケ Sra3-u5jE)2017/09/21(木) 17:36:23.55ID:E1HbcZFyr
>>752
規格によると unko u{}; は
8.5/p17『If the initializer is a (non-parenthesized) braced-init-list, the object or reference is list-initialized』によりリスト初期化される
リスト初期化は8.5.4/p3『If T is an aggregate, aggregate initialization is performed』
に該当するのでコンストラクターが呼ばれずにaggregate初期化される。

なおaggregateの定義は8.5.1/p1により『array or a class (Clause 9) with no user-provided constructors (12.1), no (略)』
ここで8.4.1/p1により「=delete」は関数本体だが、
8.4.2/p5によりuser providedではないと見なされている(たぶん)

>>748
パケットレベルで振り分けたり、プロキシとして動作したり色々
ロードバランサ 仕組み
とかでググるがよろし
あとそこまで行くと完全にスレチなので

ネットワーク
http://mevius.2ch.net/hack/

とかに行っとくれ

758デフォルトの名無しさん (ワッチョイ 8a9f-Dwg9)2017/09/21(木) 23:20:34.43ID:Bo0/1phe0
ほほう

759デフォルトの名無しさん (ワッチョイ 0f23-Dc1X)2017/09/23(土) 11:36:40.13ID:2CJ5RW/30
>>747
20年前は普通にあった、ていうかそれしか方法がなかったが
今はもっと楽な方法があるのでほぼ無くなった

僅かな例外はパフォーマンスを求めるようなプログラムを作る場合だが
それでもライブラリなどの表から見えない部分の作成に限られる

760デフォルトの名無しさん (KR 0Hc2-GWmJ)2017/09/23(土) 21:53:53.16ID:DdQqqOWmH
各添字が 1 から X まで動く多次元配列を一次元で
A[i + X*j + X*X*k]
のように表しているのですが、この多次元配列の各添字を入れ替える操作を頻繁に行うので、関数にしたいです。
どのようにするのが良いでしょうか。

たとえば
f(A, B, 2, 3, 1);
のように引数をとって B という配列に
B[j + X*k + X*X*i] = A[i + X*j + X*X*k]
と要素を入れたいです。

「2, 3, 1」を関数の中で解釈する方法も分からなくて困っています。

761デフォルトの名無しさん (ワッチョイ 8aaa-Dc1X)2017/09/23(土) 22:14:21.88ID:dWsmcDp10
>>760
その例だと A[X][X][X] の3次元相当だけど3次元限定でいいの?

762デフォルトの名無しさん (ワッチョイ faa6-u5jE)2017/09/23(土) 22:34:01.05ID:qTNnvPi+0
https://ideone.com/x9PCnt
こんなんでええやろ

763デフォルトの名無しさん (ワッチョイ 8aaa-Dc1X)2017/09/23(土) 22:36:10.87ID:dWsmcDp10
>>760
こういう解釈でいいかな?

template <typename T, std::size_t X>
void fillA2B(T (&A)[X*X*X], T (&B)[X*X*X], int ax1, int ax2, int ax3)
{
int i, j, k;
int& ii = (ax1==1)? i: ( (ax1==2)? j: k );
int& jj = (ax2==1)? i: ( (ax2==2)? j: k );
int& kk = (ax3==1)? i: ( (ax3==2)? j: k );
for ( i = 0 ; i < X ; ++i )
for ( j = 0 ; j < X ; ++j )
for ( k = 0 ; k < X ; ++k )
B[ii + X * jj + X * X * kk] = A[i + X * j + X * X * k];
}

int main()
{
const int N = 2;
int A[N*N*N], B[N*N*N];
int n{0};
for ( int a = 0 ; a < N*N*N; ++a )
A[a] = n++;
fillA2B<int, N>(A, B, 1, 2, 3);
fillA2B<int, N>(A, B, 2, 3, 1);
fillA2B<int, N>(A, B, 3, 1, 2);
return 0;
}

764デフォルトの名無しさん (ワッチョイ 8a9f-PvnN)2017/09/23(土) 22:38:24.75ID:cFmXNXGU0
左辺が j, k ,i 右辺が i, j, k のようだが

765デフォルトの名無しさん (ワッチョイ 8aaa-Dc1X)2017/09/23(土) 22:45:31.08ID:dWsmcDp10
あ、一気に全要素にFillしなくてもいいのかな?

766デフォルトの名無しさん (ワッチョイ 0af0-PvnN)2017/09/24(日) 00:03:03.61ID:7FyCscw80
……素直に3次元の配列にすりゃあいいんじゃねえのかなコレ
どーーーしても1次元にしなきゃいけない重大な理由が背後に控えてんのかな?

767デフォルトの名無しさん (スッップ Sdaa-pgy8)2017/09/24(日) 00:08:42.25ID:xnpjieyid
普通にメモリ確保したら1次元だからな

768デフォルトの名無しさん (ワッチョイ 8aaa-Dc1X)2017/09/24(日) 00:21:25.13ID:J5lzydll0
B[ii][jj][kk] = A[i][j][k];
でも通るな

769デフォルトの名無しさん (KR 0Hc2-GWmJ)2017/09/24(日) 00:25:12.68ID:QX+6yKIgH
>>761
もちろん任意の次元を一度に扱えたら最高です。
ゆくゆくは各添字の次元を変えることも考えています。

>>762>>765
すみません。
全要素を並び替えたいです。

>>766
カラムメジャー、ロウメジャーを任意にしたいという背景があります。
また、各添字の次元が本当は任意であるということもあります。

>>763
ありがとうございます。
確かにこれで>>760はできそうです。
パーミュテーションの実装の仕方が分かりました。
原理的にはこれで任意の添字の数、次元に対応できる (それぞれ関数を作る必要はある) と思うのですが、もっとアカデミックな方法ともあるのでしょうか?

770デフォルトの名無しさん (ワッチョイ 8a4b-nCCx)2017/09/24(日) 02:35:34.07ID:0uAENq5F0
>>769
アカデミックは知らんが一般化するなら
B[ i*bi[0] + j*bi[1] + k*bi[2] + ... ]
と各次元ごとの係数を変数にして設定だな
>>760のたとえばでは bi[0] = X*X, bi[1] = 1, bi[2] = X

あとはインターフェイスにあわせてヘルパ処理を用意すればいい
f(... int x, int y, int z)
int bi[3];
bi[x - 1] = 1;
bi[y - 1] = X;
bi[z - 1] = X*X;

771デフォルトの名無しさん (オッペケ Sra3-GWmJ)2017/09/24(日) 17:29:12.46ID:vw1eQBGxr
>>770
ありがとうございます。
あとは任意個数の引数を取れるようにすれば添字がいくつあっても、各添字がどのように走っても一つの関数で対応できますね。
勉強になりました。

772デフォルトの名無しさん (ワッチョイ 8e3d-GWmJ)2017/09/25(月) 00:05:50.55ID:KE0eJu6Z0
C++とほとんど関係ないな

773デフォルトの名無しさん (ワッチョイ de1c-iatd)2017/09/25(月) 10:20:39.11ID:c/fcx1bx0
任意個数の引数って、まさか省略記号と可変個数実引数では・・・
と思ったらモロじゃねえか おいおい
このスレ的にはinitializer_listやtemplate parameter packだろ

774デフォルトの名無しさん (スップ Sd4a-6FY3)2017/09/25(月) 11:38:31.09ID:VZWzPiEFd
>>773
template parameter pack って variadic template と同じもの?
後者の呼び方には馴染んでるんだけど。

>>774
同じ

776デフォルトの名無しさん (ワッチョイ eb11-Dc1X)2017/09/25(月) 16:12:14.99ID:b+XdOI/H0
>>773
ほっといたっていずれ覚えるだろうに何故押し付けるのか

>>776
より良い代替案があるんだったらそっちに誘導すべきだろう。
実際使うべきじゃないし。

778デフォルトの名無しさん (オッペケ Sra3-25Bv)2017/09/25(月) 18:34:40.87ID:iFpSSPyJr
>>774
違う

779デフォルトの名無しさん (ワッチョイ de1c-iatd)2017/09/26(火) 10:35:57.85ID:DAuKDJeY0
>>776
このスレ的にはって書いてあるのが読めてないのか
自分が苦手なものに触れられたくないのか
どっちだ?

780デフォルトの名無しさん (ワッチョイ eb11-Nrqi)2017/09/26(火) 11:02:34.83ID:XbrOuhiT0
>>779
最近お前みたいなニワカが増えてうんざりするわ
というかCの可変長引数がどこに出てきた?

781デフォルトの名無しさん (ワッチョイ fa91-PvnN)2017/09/26(火) 11:38:28.30ID:XSwUFkBD0
つかぬことを伺いますが、
あるクラス内で定義した構造体を同クラス内でstatic constメンバとして宣言し、
外部で定義しようとしたところ、「〜との互換性がありません」と出て上手く行きません
どうすればよいのでしょうか

〜ヘッダ内
class Hage{
public:
struct A{
int a;
int b;
};

static const struct A M;

}

〜ソース内
#include "ヘッダ"
const struct A Hage::M; //不正

782デフォルトの名無しさん (ワッチョイ fa91-PvnN)2017/09/26(火) 11:39:54.54ID:XSwUFkBD0
あ、行頭の半角スペース消されるの忘れてた

783デフォルトの名無しさん (ワッチョイ eb11-Nrqi)2017/09/26(火) 11:48:05.08ID:XbrOuhiT0
const struct Hage::A Hage::M;

784デフォルトの名無しさん (スプッッ Sd4a-6FY3)2017/09/26(火) 11:48:55.33ID:r3ztyMSNd
>>781
少なくとも Hoge::A としなけりゃダメなんじゃないか

>>771を読んでもCの可変長引数とは決めつけられなかった

785デフォルトの名無しさん (ワッチョイ fa91-PvnN)2017/09/26(火) 11:51:53.92ID:XSwUFkBD0
うわあ何でこんな初歩的なことに躓いていたんだアホらしい
>>783-784サンクス

786デフォルトの名無しさん (ワッチョイ d311-Dc1X)2017/09/26(火) 15:18:58.40ID:SDiSqFpw0
###HUM###
000-K,AZ,0,1,
001-KI,L,I.T,DEF,11.2,TE,F,0.12235,
002-EM,OBLA,7##END

787デフォルトの名無しさん (ワッチョイ de1c-iatd)2017/09/26(火) 15:24:00.47ID:DAuKDJeY0
>>780
うわーおまえ、それ人に聞かなきゃ判んねえの?

省略記号は右端という初歩の初歩でミスりながら
ドヤってる笑い地獄が2日前あったんだが
突っ込めなきゃせっかくボケた芸人も泣いてるだろうな

788デフォルトの名無しさん (ワッチョイ eb11-Dc1X)2017/09/26(火) 16:32:49.03ID:XbrOuhiT0
>>787
まずはsageることから覚えような

789デフォルトの名無しさん (スプッッ Sd4a-6FY3)2017/09/26(火) 16:36:37.77ID:r3ztyMSNd
>>773の「モロじゃねえか」がどっから出てきてるのか謎だ

790デフォルトの名無しさん (ワッチョイ eb11-Dc1X)2017/09/26(火) 17:08:16.18ID:XbrOuhiT0
多分Cの可変長引数なら右端以外にも書けると思ってんじゃないかな

791デフォルトの名無しさん (ワッチョイ 0f23-hoCt)2017/09/26(火) 18:55:18.16ID:DXd+nok20
こんなイメージかな?
#define X (100)

#define f(a,b,c,d,e) ((b)[(c)+X*(d)+X*X*(e)] = (a)[(e)+X*(c)+X*X*(d)])

792デフォルトの名無しさん (オッペケ Sra3-t5bw)2017/09/26(火) 19:31:39.64ID:T9NefDHyr
>const struct A Hage::M; //不正

初歩的でなく相当に高度な気がしてならない
規格の3.4.1/p7,p8,p14あたりを頭に入れていないといけない
「class NS::C;」のように何でも「::」を付ければ良いと言うわけでもないので

793デフォルトの名無しさん (ワッチョイ 1e7a-Gpzj)2017/09/26(火) 22:59:17.35ID:pvKSJMRt0
そうでもない

794デフォルトの名無しさん (ワッチョイ 8aaa-Dc1X)2017/09/26(火) 23:10:02.38ID:28pSalnA0
だってグローバルスコープにも struct A; が存在したらどうなるか?
って考えればすぐわかりそうなモノじゃんね

795デフォルトの名無しさん (ワッチョイ faa6-t5bw)2017/09/26(火) 23:33:07.57ID:QYZ1C1Pk0
グローバルが優先される所と、グローバルよりクラスや名前空間が優先される所が入り乱れたこの言語で
どちらが優先なのかを正確に覚えてるのはかなりの変人である可能性が高い
https://ideone.com/RZTBk7

796デフォルトの名無しさん (ワッチョイ 8300-pgy8)2017/09/26(火) 23:48:01.42ID:piJXswiP0
グローバルが優先するところなんてあったか?

797デフォルトの名無しさん (ワッチョイ 8aaa-Dc1X)2017/09/26(火) 23:48:58.27ID:28pSalnA0
>>795
その例ではいったんA::の中に入っているから B はA::B になるけど
>>781 のはそうじゃないからな。

798デフォルトの名無しさん (ワッチョイ de1c-iatd)2017/09/27(水) 00:14:02.46ID:LyDwKMB00
>>788
おーいバカ、省略記号の位置の件はわかったか?
まさか789なみの重度池沼じゃねえよな

799デフォルトの名無しさん (ワッチョイ 8aaa-Dc1X)2017/09/27(水) 00:41:37.58ID:lz0JexH90
>>771>>770を参考にして新たに考えようとしてるじゃないか。
それを>>770のやり方でまんま行こうとしている、と解釈するのは悪意があるぞ。

800デフォルトの名無しさん (ワッチョイ de1c-iatd)2017/09/27(水) 00:57:18.03ID:LyDwKMB00
だからって770の大ボケを正当化する法はあんめえ

801デフォルトの名無しさん (ワッチョイ 8300-pgy8)2017/09/27(水) 07:53:47.82ID:Ep3hxvTm0
あんめえ

802デフォルトの名無しさん (ワッチョイ eb11-Dc1X)2017/09/27(水) 09:12:11.59ID:nsBNhogE0
>>800
お前まだ分からんのか・・・
>>770のどこが大ボケなんだよ
添え字演算子の中で二項演算子の後に省略記号書いて再帰的に計算させたり
パラメータパック(またはそれを含む式)も無しに引数の左端にいきなり省略記号書いたり
なんてのはCでもC++でも出来ないの
お前みたいにCの可変長引数もvariadic templateも分かってるつもりなら
>>770を見た瞬間にこれは文面上の省略であって動くコードではないと一瞬でわかるはずなんだよ

質問でもないのにageまくるわ自分も初心者のくせして同じ初心者(あるいはそれ以上)を聞きかじりの知識でバカにしようとするわ
憂さ晴らしにしか利用しないのなら出ていけ

803デフォルトの名無しさん (ワッチョイ de1c-iatd)2017/09/27(水) 09:30:35.39ID:LyDwKMB00
文面上の省略だっておw
大ボケに苦しい言い訳を上塗りして
アフォから超アフォに進化したなあ

804デフォルトの名無しさん (ワッチョイ eb11-Dc1X)2017/09/27(水) 09:41:27.37ID:nsBNhogE0
>>770じゃないよw

805デフォルトの名無しさん (ワッチョイ de1c-iatd)2017/09/27(水) 10:03:04.41ID:LyDwKMB00
どう見ても770だな
必死さの理由が他にない

806デフォルトの名無しさん (ワッチョイ fa91-PvnN)2017/09/27(水) 10:19:41.03ID:Ls/Jbx6+0
ワッチョイも知らないアホじゃん

807デフォルトの名無しさん (ワッチョイ de1c-iatd)2017/09/27(水) 11:12:43.27ID:LyDwKMB00
驚いた、ム板にIP信者がいるとはね
嘆かわしい限りだ

808デフォルトの名無しさん (スプッッ Sd4a-6FY3)2017/09/27(水) 11:41:32.93ID:/eBNIii1d
>>800
だったら>>771をターゲットにすればよかったんだよ
お前は>>770をも貶し続けていると見なされていたんだよ

809デフォルトの名無しさん (スプッッ Sd4a-6FY3)2017/09/27(水) 11:42:15.16ID:/eBNIii1d
>>808
間違えた、逆だ

810デフォルトの名無しさん (ワッチョイ de1c-iatd)2017/09/27(水) 14:47:33.57ID:LyDwKMB00
大ボケ+言い訳+IP信者+錯乱

この安定したアフォぶりは、どう見ても同一人物だなw

811デフォルトの名無しさん (ワッチョイ 1511-Txnz)2017/09/29(金) 01:30:30.30ID:ppl3WHHK0
%%%3%%%
000-DOK<NAZE-0.8112162>
001-3800%\73NMB/1,81,2,NB"IKKI"%
002-91.81%ML7"8.122231746668193,43@ML.4@"%^23.1444
003-1.33321444718%"YLD""SO"%{71.%{62.1339816{331.422231765%<<<NL6
004-LOOP%Go To"000"%

VCL

812デフォルトの名無しさん (ワッチョイ 6dcd-5mw5)2017/09/29(金) 22:15:16.68ID:7WUGaaf40
javaやc#しかやったことないような人間がc++でもメモリ管理をきちんと身につけるには何から始めるのが手っ取り早いでしょう?

813デフォルトの名無しさん (ワッチョイ 6dcd-5mw5)2017/09/29(金) 23:55:16.07ID:7WUGaaf40
そもそもみんなc++で何してるの?🤔

814デフォルトの名無しさん (ワッチョイ 03af-NUeZ)2017/09/30(土) 00:49:06.72ID:Yf3yOiqk0
人工知能ゥ・・・

815はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 1b15-Txnz)2017/09/30(土) 00:56:27.58ID:H54Xn+Px0
>>812
C++ ではなるべくスマートポインタを使って自動化すべきなんだけど、
その内側にあるメモリの気持ちを実感として持つには C の範囲で色々やってみるのもいいかな。

816デフォルトの名無しさん (ワッチョイ c523-IQJU)2017/09/30(土) 01:18:37.51ID:bL0j7tMv0
>>812-813
JavaやC#が選択肢になる状況でC++を選択する理由はない。
今C++を何に使うか決まってないのなら、JavaやC#を極める方向に努力した方がいい。

817デフォルトの名無しさん (ワッチョイ 234c-Txnz)2017/09/30(土) 01:39:01.97ID:zjlhf9G/0
VisualStudioでMFCのSDIテンプレートを作ると、ドキュメントクラス、ビュークラス、アプリケーションクラス、メインフレームクラスができますが、
これらのポインタを初期化時にグローバル化しておいて、以後あらゆるクラスから気軽にアクセスできるようにしとくのは良くないんでしょうか?
グローバル変数はあまり使うべきではないという考えは置いておくとして、動作上問題は起こるのでしょうか?

818デフォルトの名無しさん (ワッチョイ 23c5-+G6K)2017/09/30(土) 09:54:39.91ID:1M7A4t/A0
まあたまには口ですることもあるかな…

819デフォルトの名無しさん (スッップ Sd43-vp8x)2017/09/30(土) 16:24:19.18ID:EIEZdyCfd
問題が起こらないように作れば起こらない
としか言えない

820デフォルトの名無しさん (ワッチョイ 032e-asy+)2017/10/01(日) 00:09:52.37ID:A+1idbvt0
MFCのtheAppには100万回ぶち切れてきたけど動作上は特に問題は無い

821デフォルトの名無しさん (ワッチョイ 4b1c-HyX/)2017/10/01(日) 04:08:21.65ID:EFR2vscz0
あーこの人、こうやっちゃったんだ(ニヤニヤ
しながら使うもの
ARM C++ベースなんで同情するところもあるけどね

822デフォルトの名無しさん (ワッチョイ 23c5-+G6K)2017/10/01(日) 11:18:29.65ID:coFT7XLp0
グローバル変数だからといって頭ごなしにぶち切れるのもいかがなものか…
CPU視点でやるべきことに対して処理順序にあいまいさが生じないなら実行上問題無いし、
プログラマーの視点で管理できる個数なら実用上も問題無い
同一クラスの複数インスタンスが欲しければグローバルな配列にしたらやり過ごせる

ていうか仮にtheAppを根とする木構造で全てのデータを管理することを思い立ったとして、
その木の根付近をぶち切って得た2〜3の大枝をグローバル変数を根とするそれぞれ別の木にする、ぐらいの
挿し木設計は設計上のショートカットとして許されるべきや
というのは、プログラムのあらゆる箇所で
 theApp()->getMemberA()->getMemberAA()->getMemberAAA()->...->getMemberZZ()->getValue()
と書かねばならなかったものが、
 g_dataAA->...->getMemberZZ()->getValue()
ぐらいで済む

823デフォルトの名無しさん (ワッチョイ 032e-asy+)2017/10/01(日) 12:31:41.44ID:A+1idbvt0
平気でグローバル変数を使う奴はtheAppの混じったコードを使いまわし続けて大量にデータを持たせるようになる
そして結合しまくりのクラスを他のソフトにコピペしていつのまにか神theAppができある
マルチスレッドで読み書きしてるもんだから予想外のバグが起こる
上司はそれでそれが当たり前だと思ってるから同じようにしろと俺に命令する
俺切れる

824デフォルトの名無しさん (ワッチョイ 23c5-+G6K)2017/10/01(日) 12:47:25.61ID:coFT7XLp0
>マルチスレッドで読み書きしてるもんだから予想外のバグが起こる
これはグローバル変数でなくとも起きる設計なら起きるから別件
ていうか
>CPU視点でやるべきことに対して処理順序にあいまいさが生じ(>>822)
ているケースにあたる

非同期呼び出しの同期化は呼び出される側のクラスで解決すべき、というだけ
メソッド内で完結できれば最も安全
パホーマンスや処理の粒度の関係でそれが適さない場合は
トランザクション処理をちゃんと設計汁、

825デフォルトの名無しさん (ワッチョイ 23aa-Txnz)2017/10/01(日) 12:50:48.09ID:+enXMbbO0
>>823
アプリケーションの中で寿命の長いデータはどこにどうやって置いてるの?

826デフォルトの名無しさん (ワッチョイ 032e-asy+)2017/10/01(日) 14:12:37.21ID:A+1idbvt0
>>824
ちょっと足りなかったわ
マルチスレッドでかつ複数のクラスを跨って別々の場所で読み書きされているからいつどこで変更されるかわからないことが多々ある
そうなるとあちらを立てればこちらが立たずといった感じになり、きれいに書く気力が失われてさらに汚さが加速する

>>825
必要なデータだけを引数で与えるべき

827デフォルトの名無しさん (ワッチョイ ed4d-IQJU)2017/10/01(日) 14:15:44.38ID:P+J8m3XL0
グローバル変数で同期とるんじゃないぞ。そんなもので同期なんて取れないからな。
ちゃんとOSが提供する同期オブジェクト使えよ。

828デフォルトの名無しさん (スップ Sd43-vp8x)2017/10/01(日) 14:17:42.21ID:LFbo+6zld
どんな環境でもOSがあってしっかりした同期の仕組みが有るとか思ってるお花畑がいると聞いて

829デフォルトの名無しさん (ワッチョイ ed4d-IQJU)2017/10/01(日) 14:25:15.04ID:P+J8m3XL0
いやはや無知で申し訳ない。
マルチスレッド機能があって同期の仕組みが提供されない処理系があるならばご教授して頂きたい。

830デフォルトの名無しさん (ワッチョイ 456f-QuCJ)2017/10/01(日) 14:59:48.84ID:8m985+fI0
文脈上Windowsでの話なのははっきりしてるのに「どんな環境でも」とか

831デフォルトの名無しさん (ワッチョイ 23aa-Txnz)2017/10/01(日) 15:20:08.45ID:+enXMbbO0
>>826
>必要なデータだけを引数で与えるべき

引数を渡す側がそのデータをどこにどうやって保持すればいいのか、という問題が残るだけでは?

832デフォルトの名無しさん (ワッチョイ 2311-KCdQ)2017/10/01(日) 15:35:52.14ID:7TdPvZgo0
>>831
> 引数を渡す側がそのデータをどこにどうやって保持すればいいのか、という問題が残るだけでは?
再帰的にたどって行けばいいだけかと
プログラムの寿命とほぼ同じ寿命が必要ならmain( )で定義することになるだろうし

833デフォルトの名無しさん (ワッチョイ ed4d-IQJU)2017/10/01(日) 15:38:17.18ID:P+J8m3XL0
どうしてもグローバル的なものがほしいなら、グローバルにしてしまえよ。
アクセス用の関数だけしっかり同期処理書けばいい。

834デフォルトの名無しさん (ワッチョイ 23c5-+G6K)2017/10/01(日) 15:41:47.38ID:coFT7XLp0
んまーマルチスレッド機能有りのOSであり
 (1) OSがプリエンプトしてくるのを止めるAPIが無い
 (2) ユーザープログラム独自に割り込み禁止命令を実行できない(特権命令違反でトラップされる
としたらユーザー側ではフラグのread modify writeのアトミック性を保証する術がまるきり無くなる

835デフォルトの名無しさん (ワッチョイ 23c5-+G6K)2017/10/01(日) 15:43:55.69ID:coFT7XLp0
いやすまん下記も追加
 (3) interlock系の命令が使えない(特権命令違反か何かでトラップされる
(3)は使えるかな普通…
>>829のは杞憂かもしれんな…

836デフォルトの名無しさん (ワッチョイ 23c5-+G6K)2017/10/01(日) 15:51:28.11ID:coFT7XLp0
しかしまあ同期処理はOSが提供すべき(理念としてだけでなく、その方が効率よく実現できるから
というのは同意
マルチスレッド機能があるOSなら必ずプリエンプトされないコード範囲を持つので、そこでなら
interlock系の命令を持たないZ-80みたいなCPUでも何も問題なくアトミックなread-modify-writeができる、

837デフォルトの名無しさん (ワッチョイ 2311-KCdQ)2017/10/01(日) 15:52:05.08ID:7TdPvZgo0
>>834-835
Compare-And-Swapとかの命令が特権命令になってるプロセッサなんてあるんだっけ?

838デフォルトの名無しさん (ワッチョイ 23c5-+G6K)2017/10/01(日) 15:59:29.84ID:coFT7XLp0
>>837
Interlock系命令の意味で言った
正しい言葉使いかは知らん…!

839デフォルトの名無しさん (ワッチョイ cbdb-IQJU)2017/10/01(日) 16:05:24.82ID:a+6SxdIf0
atomicなread及びwriteが使えるならmutexを構成できるし、それを利用すればread modify writeも可能だよ。

840デフォルトの名無しさん (ブーイモ MM09-7+n4)2017/10/01(日) 17:15:48.85ID:zBOS+jx9M
ミューテックスが何だって?
くだらねえ話しやがって・・

841デフォルトの名無しさん (ワッチョイ 032e-asy+)2017/10/01(日) 17:18:14.77ID:A+1idbvt0
>>831
どんどん上にたどっていく
そのデータを管理しなければいけないクラスあるいはmain関数が保持すればいい
externした変数はそのクラスが所有権を持っていることと同等なので、パフォーマンス上の都合が無ければ極力共有は避けるべき
あとコードを使いまわすときにも障害になる
ファイルにまとめて他でincludeしてもそのまま使えない

842デフォルトの名無しさん (ワッチョイ 23aa-Txnz)2017/10/01(日) 17:46:49.19ID:+enXMbbO0
>>841
>そのデータを管理しなければいけないクラスあるいはmain関数が保持すればいい

クラスが持つっていうのはそのクラスのスタティックメンバにしろという意味?
それでは結局グローバル変数とか無名namespace内変数とあまり変わらないような気がする。

843デフォルトの名無しさん (ワッチョイ 032e-asy+)2017/10/01(日) 18:21:24.53ID:A+1idbvt0
>>842
言ってる意味がわからない
クラスA内クラスBとCを宣言して

B b;
C c;
c.set_data(b);

だとか

main関数内で

Dptr d_ptr = D::get_resource();
Eptr e_ptr = E::get_resource();
F f(d_ptr, e_ptr);
f.excute();

とかこんな風にする

844デフォルトの名無しさん (ワッチョイ 23aa-Txnz)2017/10/01(日) 18:30:22.24ID:+enXMbbO0
>>843
んー

>そのデータを管理しなければいけないクラスあるいはmain関数が保持すればいい

「あるいは」ってどういう意味?

main関数内に持つ方はわかるんですよ。
そうでなく、「クラスが保持」の方の解説をお願いしたい。ずっと保持し続けるんだから
スタティックメンバなのかな?と思った。

845817 (ワッチョイ 234c-Txnz)2017/10/01(日) 18:34:27.58ID:SWvA/SVx0
>>820
では、例えば初期化時にtheApp内に、Doc、View、MainFrmクラスのポインタをメンバに持たせておいて、
以降、あらゆるクラスからtheAppを介してアクセスしてもよいということですね。

こういったやり方でふとよぎった不安なんですが、
長時間アプリを起動していたとき、とあるクラスの参照ポインタがいつのまにか変わっていて、
例えばビュークラスを取得しようと「theApp.GetView()」としたときにはすでにそこにViewクラスはいない。。。なんてことは起こりませんか?

846デフォルトの名無しさん (ワッチョイ 6389-Vnaa)2017/10/01(日) 19:04:09.96ID:c8q3kohq0
>>845
起こらないように設計する。

847デフォルトの名無しさん (ワッチョイ 032e-asy+)2017/10/01(日) 19:06:45.42ID:A+1idbvt0
>>844
普通なパブリックなメンバでいいと思うけど
その所有権をもったクラスの寿命が尽きたら同時に開放される


>>845
もちろん参照元からは参照先の実態があることが保障されないのでよくある
特定のメンバの参照数が数百箇所になってたときは手に負えなくなったのでさすがに作り直した

848デフォルトの名無しさん (ワッチョイ 456f-50d/)2017/10/01(日) 19:24:06.85ID:8m985+fI0
「クラスの寿命」とかもう難しすぎてついていけんわ

849デフォルトの名無しさん (ワッチョイ 032e-asy+)2017/10/01(日) 19:38:58.01ID:A+1idbvt0
>>848
推敲とかしてないのである程度読み替えて言いたいことを汲み取ってね
そのクラスの変数の寿命な

850デフォルトの名無しさん (ワッチョイ 23aa-Txnz)2017/10/01(日) 19:42:13.70ID:+enXMbbO0
うん、寿命の長いオブジェクトをどうやって保持し続けるかっていう話なのにね

851デフォルトの名無しさん (ワッチョイ ed4d-IQJU)2017/10/01(日) 19:51:59.11ID:P+J8m3XL0
悩む理由がよく分からないが。適当な管理クラス作ればいいだけでは。

852デフォルトの名無しさん (ワッチョイ 23aa-Txnz)2017/10/01(日) 19:54:30.69ID:+enXMbbO0
>>849
寿命の長いオブジェクトをどうやって保持し続けるかがテーマなので、
「a というデータはクラスBのオブジェクトbに持たせればいい」では
じゃあそのbはどこにどうやって保持し続けるのかという無限後退に陥る。

普通のグローバル変数やシングルトン
theAppにぶら下げるの
mainの中に置く

一長一短あるのでそれ以外に何かないかなという話

853デフォルトの名無しさん (ワッチョイ ed4d-IQJU)2017/10/01(日) 20:03:44.13ID:P+J8m3XL0
別に永続化、シリアライズの話までしてないわけでしょ。
mainかグローバルの2択で推奨はmain、どのスコープからも見えてアクセスしたいならグローバルもありで終わりでしょ。

854デフォルトの名無しさん (ワッチョイ 23aa-Txnz)2017/10/01(日) 20:06:34.68ID:+enXMbbO0
>>853
あなたの意見は>>833以降ずっと一貫しているからいいですよ。

>>823の意見がわかるようでわかりにくい

855デフォルトの名無しさん (ワッチョイ ed4d-IQJU)2017/10/01(日) 20:15:10.00ID:P+J8m3XL0
MFC? H社のソフトのことかな?

856デフォルトの名無しさん (ワッチョイ 234c-Txnz)2017/10/01(日) 22:22:01.91ID:SWvA/SVx0
>>846
>>もちろん参照元からは参照先の実態があることが保障されないのでよくある
ソースコードで意図的にdeleteとか、アドレス移動する命令をいれてなくても起こるんですか?
(ガベージコレクションみたいなことが)

857デフォルトの名無しさん (スップ Sd43-vp8x)2017/10/01(日) 22:50:35.76ID:LFbo+6zld
>>829
無知を謝る必要はない

マルチコアのDSPをOSレスで使うとか

858デフォルトの名無しさん (スップ Sd43-vp8x)2017/10/01(日) 22:54:38.73ID:LFbo+6zld
>>826
パラメータで渡すべき情報と
そうじゃない情報と
がある

859デフォルトの名無しさん (スップ Sd43-vp8x)2017/10/01(日) 23:00:12.89ID:LFbo+6zld
>>852
スタティックメモリ(グローバル変数など)
auto変数(スタックやレジスタなど)
OSやAPI側の保存領域(APIを用いた設定など)
ファイルなど

860デフォルトの名無しさん (ワッチョイ 032e-asy+)2017/10/01(日) 23:08:17.57ID:A+1idbvt0
>>856
起こるわけないが

861デフォルトの名無しさん (スップ Sd43-vp8x)2017/10/01(日) 23:28:49.53ID:LFbo+6zld
意図的じゃないdelete

862デフォルトの名無しさん (ワッチョイ 4b32-HyX/)2017/10/02(月) 15:27:40.28ID:jSh1mr/v0
> プログラムのあらゆる箇所で
>  theApp()->getMemberA()->getMemberAA()->getMemberAAA()->...->getMemberZZ()->getValue()
> と書かねばならなかった

本当にあらゆる箇所に重複コードを書きまくっているとしたら相当なアフォだな
関数化かキャッシュするだろふつー

863デフォルトの名無しさん (ワッチョイ 458a-gyUt)2017/10/02(月) 17:30:53.86ID:wJY11lw/0
最近WindowsのほうでVSを入れまして、簡単なSTGを作って遊んでいるのですが、MacOSでもC++でSTGを作ることはできるのでしょうか?
Windowsでは、DxlibといったSTG制作に特化したライブラリがありますが、MacOSではどうなのでしょうか…?実際にMacでSTG制作の経験がある方、挫折した方の話をお聞かせください。よろしくお願いします。

864デフォルトの名無しさん (ワッチョイ 03eb-IQJU)2017/10/02(月) 17:45:41.63ID:M0wavUvt0
DXLibがSTG制作に特化したライブラリ…

865デフォルトの名無しさん (ワッチョイ 458a-gyUt)2017/10/02(月) 18:07:53.55ID:wJY11lw/0
>>864
何かおかしなことを言っていたらすみません。
STG制作入門のホームページでそのようなことが書かれていたので、そう認識していた次第です。

866デフォルトの名無しさん (ワッチョイ 037e-asy+)2017/10/02(月) 19:07:36.56ID:SPyFybU20
それはDirectXの薄いラッパなので何に特化しているとかはない
マルチプラットフォームで作りたいならOpenGLで作れ

867デフォルトの名無しさん (ワッチョイ 458a-gyUt)2017/10/02(月) 20:27:58.95ID:wJY11lw/0
OpenGLか…
難しそうだしまだ取っ付くべきじゃないような気がするんだけどそんなことはない?

868デフォルトの名無しさん (ワッチョイ c57f-Txnz)2017/10/02(月) 20:36:13.43ID:/AEbHlJU0
Valkan行こう

869デフォルトの名無しさん (ワッチョイ 4b5f-Z710)2017/10/02(月) 22:38:15.66ID:O4roxos+0
>>845
それぞれアクセス関数が用意されているので馬鹿なことはやめなさい

870デフォルトの名無しさん (ワッチョイ 23bd-+G6K)2017/10/03(火) 00:06:57.08ID:AOU4wQiN0
>>862
黙れよキチガイ
theApp()はtheAppかthisの間違いだがそれは別にして
メソッドgetMenberA()を有するクラスから始まって、
メソッドgetValue()を有するクラスFooまでの全てのクラス
が完璧にカプセル化された設計の元で
theAppから配下のFooのメンバにアクセスするアクセッサは実質的に>>862な状況を呈する
これはもう完璧なカプセル化を諦めて途中までグローバル変数にする(挿し木設計)か
インライン展開による最適化を期待するぐらいしか手が無い

871デフォルトの名無しさん (ワッチョイ 23bd-+G6K)2017/10/03(火) 00:11:53.92ID:AOU4wQiN0
まあ神の視座に立てば完璧な抽象化を徹底してそんな深いアクセッサをいらなくすれば良いのだが
そんなことが最初からできるなら苦労は無い、

872デフォルトの名無しさん (ワッチョイ 4b32-HyX/)2017/10/03(火) 05:23:10.92ID:ZkSEHHAS0
> カプセル化を諦めて途中までグローバル変数

ヘボ野郎

873デフォルトの名無しさん (JP 0H4b-IV3n)2017/10/03(火) 15:26:50.04ID:tYdASm94H
二次元配列の中身を1命令で一気に出力する方法はないでしょうか
いちいち2重ループかくのめんどくさいです

874デフォルトの名無しさん (ワッチョイ 4b32-HyX/)2017/10/03(火) 16:01:22.87ID:ZkSEHHAS0
CならあるがC++では一般的な方法はない

875デフォルトの名無しさん (ワンミングク MMa3-IV3n)2017/10/03(火) 16:16:18.00ID:vTZ8MAnuM
>>874
Cでの方法を教えていただけると嬉しいです

876デフォルトの名無しさん (ワンミングク MMa3-IV3n)2017/10/03(火) 16:16:57.77ID:vTZ8MAnuM
すいませんIDかわりました
>>875>>873です

877デフォルトの名無しさん (ワッチョイ 4b32-HyX/)2017/10/03(火) 16:20:42.09ID:ZkSEHHAS0
俺も暇なヤツだなw

template <typename T> void print_dim(T&);

template <typename T, int RANK>
struct print_dim_t
{
void doit(T& x)
{
for(auto& y : x) print_dim(y);
}
};

template <typename T>
struct print_dim_t<T, 1>
{
void doit(T& x)
{
for(auto& y : x) std::cout << y << ',';
}
};

template <typename T>
void print_dim(T& x)
{
print_dim_t<T, std::rank_v<T>> obj;
obj.doit(x);
}

878デフォルトの名無しさん (ワッチョイ 4b32-HyX/)2017/10/03(火) 16:34:48.99ID:ZkSEHHAS0
#define print_dim(array, type) do_print_dim_##type((type *)&array, (type *)(&array + 1))

void do_print_dim_int(int *first, int *last)
{
for(int *p = first; p != last; p++) printf(" %d", *p);
}

879デフォルトの名無しさん (ワッチョイ 4b5f-1bc6)2017/10/03(火) 16:54:32.30ID:hqWXgVBV0
暇じゃないので横着しました
int* it = (int*) mat;
for_each(it, it + ROW * COL, [](int i){cout << i << " ";});

880デフォルトの名無しさん (スプッッ Sd03-h4xY)2017/10/04(水) 18:26:58.85ID:O2xwfga8d
linuxの質問です
・koファイルからコマンドライン実行で実行ファイルを実行したい
どうやって実現するか調べてもわからなくてやり方教えて欲しいです
A --B みたいな呼び出しかたをしたい
・複数スレッドを立てているBプロセスを
全スレッドsleepにすることできる?

881デフォルトの名無しさん (スプッッ Sd03-h4xY)2017/10/04(水) 18:34:16.19ID:O2xwfga8d
>>880
親プロセスをスリープにできるだけでも問題ないです

882片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd43-sxBl)2017/10/04(水) 18:45:43.87ID:HMkkIXOid
system, execl, execlp, execle, execv, execvp, execvpe, spawn, popen, fork

883片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd43-sxBl)2017/10/04(水) 18:47:36.46ID:HMkkIXOid
sleep, usleep, nanosleep

884片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd43-sxBl)2017/10/04(水) 19:21:33.45ID:HMkkIXOid
解説が必要ですか?
はい/いいえ

885デフォルトの名無しさん (ワッチョイ c593-bw2Z)2017/10/04(水) 19:29:13.24ID:N0mfbhbs0
>>880 上半分だけ
.ko ってデバイスドライバとかのローダブルモジュールじゃないかな。
動作中のカーネルにinsmodで組み込まなきゃ使えないと思うんだけど。

886885 (ワッチョイ c593-bw2Z)2017/10/04(水) 19:36:09.54ID:N0mfbhbs0
すまん、質問の意図を取り違えたかも。

カーネルモジュールの中から外部コマンドを呼びたいって話かな。
可能かも知れん、と言うかカーネルがコマンドを実行するのと同じ手順のはずだが、
具体的な方法はさっぱり分からん。役に立たなくて申し訳ない。

887デフォルトの名無しさん (スプッッ Sd03-h4xY)2017/10/04(水) 22:05:29.41ID:O2xwfga8d
>>884
とても欲しいです...

>>886
カーネルオブジェクトから外部コマンド(実行ファイル)をコマンド形式で呼び出したいって意味ですね

888デフォルトの名無しさん (ワッチョイ ed83-IQJU)2017/10/04(水) 22:07:13.92ID:UdMKuk5G0
ハッカーですね。

889片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd43-sxBl)2017/10/04(水) 22:16:13.63ID:HMkkIXOid
>>882に書かれている関数のそれぞれの機能を比較し、該当する関数のソース(in Linux kernel)を読んでみては?

890デフォルトの名無しさん (スプッッ Sd03-h4xY)2017/10/04(水) 22:19:51.52ID:O2xwfga8d
>>889
今解説読んでいてsleep関連が終わったとこ
exec関連多すぎて大変

891デフォルトの名無しさん (ワッチョイ 5593-Xc0J)2017/10/05(木) 07:00:51.51ID:AZey7Nzq0
>>880
ちょいと検索したところ call_usermodehelper て関数があるみたい。

892デフォルトの名無しさん (スプッッ Sdda-+XcG)2017/10/05(木) 21:41:51.13ID:/Agpj2+3d
>>891
今調べたら出てきました!
自分が望んだことできそうですありがとうございます

893デフォルトの名無しさん (ワッチョイ eef2-qWqy)2017/10/06(金) 09:41:37.58ID:aNGBh62I0
("a,b,c")とは、a,b,cの合計を表すのでしょうか?
それとも、a,b,c各それぞれを表すのでしょうか?

894デフォルトの名無しさん (ワッチョイ aaeb-wbjw)2017/10/06(金) 10:15:40.40ID:tNPv5Oyi0
ここの住人はソースコードをコメントで装飾するのに、どういう書き方をしていますか?
参考にさせて下さい

895デフォルトの名無しさん (スプッッ Sdda-Qn8V)2017/10/06(金) 10:26:06.63ID:8EN3J+m8d
doxygen方式

896片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)2017/10/06(金) 11:28:24.20ID:u49AV52wd
>>893
ただのC文字列。

897893 (ワッチョイ eef2-qWqy)2017/10/06(金) 14:25:11.99ID:aNGBh62I0
>>896
ありがとうございました。

898デフォルトの名無しさん (ワッチョイ da34-HxEp)2017/10/06(金) 19:52:03.20ID:sTEh17J80
C++リテラル文字列だろ

899デフォルトの名無しさん (ワッチョイ da34-HxEp)2017/10/06(金) 19:54:12.06ID:sTEh17J80
いや、やっぱただの文字列か

900デフォルトの名無しさん (ワッチョイ 76b3-yS8h)2017/10/06(金) 21:08:44.42ID:vfMxTM1h0
→ の意味教えて下さい。

901デフォルトの名無しさん (ワッチョイ 5504-CLk5)2017/10/06(金) 21:15:27.43ID:fyJ+AUec0
そんなものありません。

902片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)2017/10/06(金) 21:46:37.43ID:u49AV52wd
「ptr->member」は、「(*ptr).member」と同じ意味。

903900 (ワッチョイ 76b3-yS8h)2017/10/06(金) 23:48:23.51ID:vfMxTM1h0
参考書の一部です
http://fast-uploader.com/file/7062856811993/

どう言う意味なのでしょうか?

904デフォルトの名無しさん (ワッチョイ 76b3-yS8h)2017/10/06(金) 23:52:15.96ID:vfMxTM1h0
本を読んでも
 structやunionが具体的に、どの様に動作してるのか分かりません。

905デフォルトの名無しさん (ワッチョイ da34-qTMp)2017/10/06(金) 23:58:13.70ID:yrQN1jb/0
基本の基本なので、
先ずは、小さなサンプル作って、実際に動かしてデバッガで追ってみる。
その上で、判らない事を質問すべき。

906デフォルトの名無しさん (ワッチョイ 1ab3-3Fj1)2017/10/07(土) 01:41:08.30ID:6wfQSWva0
質問です
以下のコードがコンパイルに通りません
class Structure { public: std::string type; };
std::vector< std::unique_ptr<void> > data;

std::unique_ptr<void> structure(new Structure);
structure->type = "HogeHoge";
data.push_back(structure);

>g++ -Wall -std=c++11 -c hogehoge.cpp
>error: ‘std::unique_ptr<void>::pointer {aka void*}’ is not a pointer-to-object type
> structure->type = "HogeHoge";
> ^
std::unique_ptr<void>ではなくて、
std::unique<Structure>にするとコンパイル通りました
voidだとだめなんでしょうか エラーになる理由を教えて下さい

907デフォルトの名無しさん (ワッチョイ 5504-CLk5)2017/10/07(土) 01:49:12.44ID:IjrnmnS30
>>906
anyつかえ。

908デフォルトの名無しさん (ワッチョイ 5593-Xc0J)2017/10/07(土) 05:28:19.29ID:9j2tI+ab0
>>900
こりゃ -> の誤植だな。
印刷屋さんがC知らなくて矢印記号と思ったんだな。
コード部分は執筆者が念を入れてチェックしなきゃね。

909デフォルトの名無しさん (ワッチョイ b632-rzHd)2017/10/07(土) 08:30:30.38ID:r58+Koxz0
>>906
エラーメッセージに書いてあるだろ
structure->type = "HogeHoge"; の代入先がオブジェクトじゃねえぜと
おまえさんはvoid = char const*;をやろうとしたんだよ

910デフォルトの名無しさん (ワッチョイ b632-rzHd)2017/10/07(土) 08:31:55.56ID:r58+Koxz0
あ、すまんちょいミスった
指摘できるやついる?解説頼むわ

911デフォルトの名無しさん (ワッチョイ aa9b-ucRI)2017/10/07(土) 08:41:11.20ID:eyY86HOM0
>>906
unique_ptrあんまりしらんから想像で書くけど
そいつがデストラクタまで管理したいからvoidじゃなくてちゃんと型渡せってことじゃね

912デフォルトの名無しさん (ワッチョイ dab3-Nz6W)2017/10/07(土) 09:00:22.02ID:y2Dkbadu0
>>906
> エラーになる理由を教えて下さい
void 型の変数なんてないから
そもそも何をしたいんだよ...

913デフォルトの名無しさん (ワッチョイ b651-iGo5)2017/10/07(土) 09:03:55.62ID:7nonADk70
unique_ptr<void>という型なので、
中にtypeというメンバーがあることがコンパイラからはわからない。

static_cast<Structure*>(structure.get())->type = "HogeHoge";
のように明示すればコンパイルだけは通るかと思ったんだが、
こっちだと>>911の問題に引っかかって、その前の行でエラーになる。

914デフォルトの名無しさん (ワッチョイ b651-iGo5)2017/10/07(土) 09:27:45.88ID:7nonADk70
>>913の最後の行は勘違いだった。
こちらの環境だと、unique_ptr<void>の時点でエラーになる。

915 ◆QZaw55cn4c (ワッチョイ 3a60-GAVN)2017/10/07(土) 11:35:23.13ID:NngrEkye0
unique_ptr<void *> だとどうなる?

916デフォルトの名無しさん (ワッチョイ dae7-XSap)2017/10/07(土) 11:58:47.95ID:rHfSD+zL0
>>913
delete できないからね
voidを渡すんならカスタムデリータもセットにしなきゃならない。

template <typename T>
struct vp_deleter {
void operator ()(void *p)const
{
delete static_cast<T*>(p);
}
};

std::unique_ptr<void, vp_deleter<int>> a(new int(8));

なら通った。

917デフォルトの名無しさん (ブーイモ MMfa-0mrS)2017/10/07(土) 12:19:56.83ID:jvf7kHO4M
void型なんて定義もなければサイズもないから
素で使うがそもそもNG

918デフォルトの名無しさん (ワッチョイ 1ab3-3Fj1)2017/10/07(土) 12:36:08.56ID:6wfQSWva0
>>907
anyは知りませんでした
stdじゃなくてboostにあるんですね つかってみます
>>909
つまり void*->type は void.type になるってことですね
voidポインタは使ったことなくて、あれから調べたのですが
アクセスする前にキャストが必要だと知りました・・
無知ゆえの初歩的なミスです 指摘ありがとうございます
>>911, >>913, >>916
スマートポインタなのでデストラクタを呼び出せるようにしないといけないんですね
カスタムデリータは知りませんでした コード参考になります

void型なのはStructureの他にもプリミティブ型とかも入れたかったからです
boost::any使うやり方とカスタムデリータ渡すやり方両方やってみます
皆さんレスありがとうございました

919デフォルトの名無しさん (スップ Sdda-99fN)2017/10/07(土) 13:41:40.48ID:j+yonEy7d
ひとつのカスタムデリータでいろんな型をdeleteするってなら無理

920デフォルトの名無しさん (ワッチョイ 6e8a-+XcG)2017/10/07(土) 14:16:25.95ID:LB5EP+Z/0
いまだにforkとthreadの動作の違いがわからない

921デフォルトの名無しさん (ブーイモ MMfa-0mrS)2017/10/07(土) 14:17:50.50ID:jvf7kHO4M
ある配列がありそれを指定した順番で並び替えしたい

std::vector< any_struct_t > array; //これを並び替えたい
std::vector< unsigned int > index_list = { 3,8,6,0,2...}; //この順番にしたい

探しているんだけど適当なライブラリが見つからない
標準ライブラリに入ってたりする?
またはアルゴリズムが知りたい
出来ればswap回数が少ない方法が知りたい

922デフォルトの名無しさん (ササクッテロリ Sp75-o/K3)2017/10/07(土) 15:34:33.81ID:cqowZFEsp
配列もう一個用意してその添え字に移動するんじゃだめなん

923デフォルトの名無しさん (ワッチョイ 7d81-XSap)2017/10/07(土) 16:00:10.47ID:ZvmF6v7F0
>>922
それが一番速そうだよね

std::vector<any_struct_t> ret(index_list);
std::transform(index_list.cbegin(), index_list.cend(), ret.begin(), [&array](auto i){ return array[i]; });

925デフォルトの名無しさん (ブーイモ MMfa-0mrS)2017/10/07(土) 16:25:34.07ID:jvf7kHO4M
>>924
それタイプミスあります?
でももう一つ配列を用意してコピーする点では
他の方と一緒ですね

別配列を用意せず全てswapで済ます方法も作ってみましたが
これにはindex_listが更に2本必要になり
効率は別配列と変わらないと予想される結果でした

参考になりました
ありがとうございました

一行目初期化はsizeだった
すまん

927デフォルトの名無しさん (ワッチョイ dae7-XSap)2017/10/07(土) 16:55:14.57ID:rHfSD+zL0
>>925
別領域を全く使わずin-placeでかつ汎用性のあるやり方ってすごく難しそう。
でも不可能性の証明も難しそうなんだよな。

928デフォルトの名無しさん (ワッチョイ 5593-Xc0J)2017/10/07(土) 17:23:03.40ID:9j2tI+ab0
index_list に含まれる値がそれぞれ重複なく1回だけ出現とか、
いかにも破られそうな条件を暗黙に期待するライブラリ、
てのも変な感じだしねぇ。

929デフォルトの名無しさん (ワッチョイ b651-iGo5)2017/10/07(土) 17:39:38.90ID:7nonADk70
任意の置換は互換の積で表せるので、swap繰り返せばin-placeで可能。
http://rikei-index.blue.coocan.jp/senkei/teigi4senkei.html

930デフォルトの名無しさん (ワッチョイ 5504-CLk5)2017/10/07(土) 17:47:14.55ID:IjrnmnS30
>>906
https://ideone.com/j7lHlZ
こういうことでしょ?

931デフォルトの名無しさん (ワッチョイ dae7-XSap)2017/10/07(土) 18:00:13.73ID:rHfSD+zL0
>>929
まだやってない場所どこだっけ?

932デフォルトの名無しさん (ワッチョイ b651-iGo5)2017/10/07(土) 18:14:41.26ID:7nonADk70
>>927
「別領域を全く使わず」を見落としてたすまぬ

933デフォルトの名無しさん (ワッチョイ dae7-XSap)2017/10/07(土) 18:35:30.53ID:rHfSD+zL0
「別領域を全く使わず」とはいっても、テンポラリの変数を1個とか2個の固定数だけ使うのは除く。

934デフォルトの名無しさん (ワッチョイ b651-iGo5)2017/10/07(土) 19:11:01.43ID:7nonADk70
屁理屈を言うと、index_listを壊していいなら、
以下の手順で別領域を使わない置換は可能。遅いけど。
for( size_t i = 0; i < array.size() - 1; ++i )
{
std::swap( array[i], array[index_list[i]] );
std::swap( index_list[i], *std::find( index_list.begin()+i+1, index_list.end(), i ) );
}

935デフォルトの名無しさん (ワッチョイ b651-iGo5)2017/10/07(土) 19:26:56.50ID:7nonADk70
おっと、index_list.begin()+i+1の「+1」は消してくれ

936デフォルトの名無しさん (ワッチョイ dae7-XSap)2017/10/07(土) 19:44:23.58ID:rHfSD+zL0
この話をきっかけに、std::next_permutation の仕様を見てみたが、どういう時に使うのかよくわからない。

937デフォルトの名無しさん (ブーイモ MMfa-0mrS)2017/10/07(土) 20:14:16.81ID:jvf7kHO4M
流石にO(n)は維持しないと
厳しいと思います

938片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)2017/10/07(土) 20:23:01.47ID:vDiuGwTad
お前ら、プログラム書くとき、普通にnoexceptを何回も書いてるの?

939片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)2017/10/07(土) 20:25:42.72ID:vDiuGwTad
>>936
permutation を実装するときに決まってんだろ?

>>938
今までthrow()と書いてた場所には書いてるよ
むしろ、書いてないの?

941片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)2017/10/07(土) 21:02:34.40ID:vDiuGwTad
>>940
コンパイラーのバカ。

942はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ae6f-XSap)2017/10/07(土) 21:05:19.53ID:JUuMz14c0
>>918
any は C++17 で標準に入ったよ。

943デフォルトの名無しさん (オッペケ Sr75-BFoK)2017/10/07(土) 21:13:10.52ID:x4ka+ayCr
規格と規格じゃないものの区別も付かない低能はすっこんでて

944900 (ワッチョイ 76b3-yS8h)2017/10/07(土) 21:13:19.89ID:m/msdGTM0
>>908
ありがとうございます。

いくら検索しても出て来ないので、困ってました。

945デフォルトの名無しさん (ワッチョイ dae7-XSap)2017/10/07(土) 21:17:07.24ID:rHfSD+zL0
>>939
わからんがな

946デフォルトの名無しさん (ワッチョイ b651-iGo5)2017/10/07(土) 23:13:09.50ID:7nonADk70
>>934
別領域を使わない置換に再挑戦。今回はO(n)のはず。
for( size_t i = 0; i < array.size() - 1; ++i )
{
size_t j = i, k = index_list[i];
while( k != i )
{
std::swap( array[j], array[k] );
index_list[j] = j; j = k; k = index_list[k];
}
index_list[j] = j;
}

947デフォルトの名無しさん (ワッチョイ b65f-lMpN)2017/10/08(日) 00:16:09.42ID:FGX6bPrh0
>>946
二重ループなのにO(n)なの?

948デフォルトの名無しさん (ワッチョイ dae7-XSap)2017/10/08(日) 00:28:37.42ID:wi1g/BWB0
後出しのようで心苦しいけどindex_listを壊すのはダメだと思う。
const参照で渡すインタフェースにできないという意味で汎用性条件を満たしていない。

949デフォルトの名無しさん (ワッチョイ b651-iGo5)2017/10/08(日) 06:22:19.14ID:+SudLjvR0
>>947
以下の2つの理由により、外側のループがn回まわる間に
内側のループの中身はたかだかn回しか実行されない。
1. 内側のループ内で処理済みのインデックスjに対し index_list[j]=j が実行される。
2. index_list[i]==i の条件が最初から満たされていた場合、内側のループは実行されない
要するに、内側のループを実行済みかのフラグとしてindex_listを使ってるだけ。
>>948
index_listを壊している時点で屁理屈なのは自覚しているんで、仕方ない。
一応、別配列にムーブする場合と比べると、
最初から正しい位置にある要素への処理が不要になるというメリットは有る。

950デフォルトの名無しさん (ワッチョイ dab3-Nz6W)2017/10/08(日) 11:20:44.83ID:HosRocIl0
>>928, >>948
ライブラリに対するオレオレ定義をいちいち開陳しなくていいよ、チラ裏にでも書いとけ

951デフォルトの名無しさん (ワッチョイ b651-iGo5)2017/10/08(日) 11:34:33.36ID:+SudLjvR0
駄目な理由が引数を壊すってことだけなら、引数を値渡しにしてやれば、
呼び出し時に勝手にコピーされるので問題ないはず。
壊していい引数を渡す時はstd::move()すればいいし。

952デフォルトの名無しさん (ワッチョイ aaeb-qWqy)2017/10/08(日) 13:39:35.60ID:GUxnbDfL0
引数がconst参照=引数の状態を変更しない(てか、できない)という意思表示
に対して
引数が右辺値参照=引数の状態を変更する(しても文句言うな)という意思表示
というのはアリ?

右辺値参照に対する理解が曖昧なんで漠然とよく分からない(何が分かって
ないかも分からないw)んだが、もっと別な意思表示方法もある?

953デフォルトの名無しさん (ワッチョイ dabd-mvC5)2017/10/08(日) 16:07:31.29ID:6tf5QjxV0
ほ〜ん>>946の奴はちゃんと動いたわ;
ttps://ideone.com/6lwMOn

954デフォルトの名無しさん (ワッチョイ dabd-mvC5)2017/10/08(日) 16:11:39.00ID:6tf5QjxV0
>>946の奴は要素[i]が内側のwhile()ループからは1回以上アクセスされないから確かにO(N)な気配、

955デフォルトの名無しさん (ワッチョイ b183-wbjw)2017/10/08(日) 23:25:19.93ID:sIfqyVAH0
右辺値参照はさっぱり意味わからんわ。

956デフォルトの名無しさん (ワッチョイ dabd-mvC5)2017/10/09(月) 09:00:03.09ID:U0LcPFS10
右辺値参照というのは、関数f()へのT型データの値渡し時に暗黙のうちに行われる(C++03までは無条件に行われていた)
 (左辺値) = (右辺値)
という代入処理において、
当該代入処理後、右辺値が関数呼び出し元によって使われなくなることが明白なとき、
 左辺値へのコピー後、右辺値をデストラクトする
という処理に暗黙のうちになっていたものを、
 右辺値から左辺値への移動
と「も」書けるようにするためのしくみ

Tに効率の良いムーブコンストラクタ(か右辺値参照を引数とする代入演算子)を定義しないとメリットが生じない
ポインタに__restrictを付けるべきかどうか悩まねばならないレベルの人用
C++03でもコンストラ・デストラ呼び出し回数削減の最適化がかかって同じような効果になるケースが多々あるから
そういうのが信用できない神経質な人向け

※ 個人の感想です

957デフォルトの名無しさん (オッペケ Sr75-BFoK)2017/10/09(月) 09:09:56.49ID:Ge9OzZ/lr
それで>>952の質問の答えはどうなるんだ?

958デフォルトの名無しさん (ワッチョイ dabd-mvC5)2017/10/09(月) 09:20:15.73ID:U0LcPFS10
>>957
右辺値参照には一時オブジェクトしか代入できない縛りがあるから_
関数fooを
 voiid foo(int&& x)
というバージョンしか定義していないとすると、
 int g_x = 10;
 foo(g_x);
がビルドが通らないのではないか;
一般的な使用を想定すれば、結局foo(const int& x)も定義必要

C++03までしか使ったこと無いから知らんけど;;

>>958
その場合はfoo(int(g_x));が通るから、必須ではないよ
コピーを外側で明示的にやらせることで、こっちのほうが責任が明確になるので好きという人もいる

960デフォルトの名無しさん (ワッチョイ 95b3-BFoK)2017/10/09(月) 10:15:14.60ID:53KUOYPr0
必然性の無い実装都合のシンクはクソ

961デフォルトの名無しさん (ワッチョイ b183-wbjw)2017/10/09(月) 17:26:43.28ID:bLguG3ky0
オブジェクトのコピーとかムーブのためにここまで言語仕様を複雑にしないといけないのか。おれにはさっぱり理解不能だわ。

962デフォルトの名無しさん (ブーイモ MMa1-0mrS)2017/10/09(月) 17:57:29.04ID:0USm99MRM
俺も右辺値参照はどうかと思う
いらないよね

使わなくてもいいんじゃないか?
使ったことないから複雑に感じるだけで、そこまで複雑でもないよ

964デフォルトの名無しさん (ワッチョイ dab3-Nz6W)2017/10/09(月) 18:45:40.84ID:UEIAYP2F0
>>961
GCをもたない言語の宿命だから嫌なら性能を犠牲にするかGCを持つ言語を使えばいい

965デフォルトの名無しさん (ブーイモ MMde-V8Tw)2017/10/09(月) 18:56:48.86ID:QjIlXwNcM
いやいやスマポがあるじゃない。
中級が多いプロジェクトならスマポ強制のほうが性能上がるんじゃないかと思う。

966デフォルトの名無しさん (ワッチョイ da04-RixE)2017/10/09(月) 18:58:40.39ID:8DJAJvC20
個人的にはC++の言語仕様の暗黒面はほとんど「参照」が絡んでいると思う。

ADLとか部分特殊化のマッチとかのほうが、はるかに複雑で暗黒だと思う

968デフォルトの名無しさん (ワッチョイ b183-wbjw)2017/10/09(月) 20:54:40.71ID:bLguG3ky0
>>964
理解してないのでなにを指摘してるかさっぱり分からないが、
つまり、気取ってC++でGCっぽいことしようとして破綻してるわけだな。

969デフォルトの名無しさん (ワッチョイ dab3-Nz6W)2017/10/09(月) 20:56:32.03ID:UEIAYP2F0
>>968
> 理解してないのでなにを指摘してるかさっぱり分からないが、
わからないなら絡んでくるなよ...

> つまり、気取ってC++でGCっぽいことしようとして破綻してるわけだな。
全然違うし

970デフォルトの名無しさん (ワッチョイ dae7-XSap)2017/10/09(月) 20:56:47.16ID:1ynB1O3m0
>>967
そう思う。
そのへんは「ルール」でしかないけど、右辺値参照はそれ自体が左辺値参照とは違うひとつの概念だから理解可能

971デフォルトの名無しさん (ワッチョイ 5504-CLk5)2017/10/09(月) 21:28:57.78ID:iWLkHfj90
右辺値参照なんか、破壊不可オブジェクトをムーブするときくらいしか使わないような。うにーくぽいんたとか。
それ以外は参照でいいし。

972デフォルトの名無しさん (ワッチョイ 958a-ZNcz)2017/10/09(月) 21:45:04.70ID:Rk3/uNWr0
右辺値参照の有用性を理解できない人間にとってはそもそもC++自体が無用だと思う
さっさと退散しなさい

973デフォルトの名無しさん (ワッチョイ b183-wbjw)2017/10/09(月) 21:56:43.96ID:bLguG3ky0
ところでなんでそんなに一時オブジエクトを参照しなきゃいけないコードを書くの?
参照元を管理するのが面倒だから? そういう人は初めからGC言語使えばよくね? ということですか?

974デフォルトの名無しさん (ワッチョイ 958a-ZNcz)2017/10/09(月) 22:03:17.69ID:Rk3/uNWr0
なんでとか言われても。。。
壊してもいい一時オブジェクトの場合、特別に効率的な扱いをしたくなるケースなんて山ほどある
それが分からないならC++なんて触らずにGC言語専門でやってればいいと思うよ

975はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ae6f-XSap)2017/10/09(月) 22:10:35.64ID:GeS0S50a0
そのあたりはトレードオフなんだよ。
そりゃあ気にせずに済むなら気にしたくないが、気にしなきゃならないときに出来ることがないのはつらいって話で。

976デフォルトの名無しさん (ブーイモ MMa1-0mrS)2017/10/09(月) 22:13:59.60ID:0USm99MRM
俺もわからん
左辺値参照ではなく右辺値参照を使った方が
良い状況ってどんなの?
あと唐突にガページコレクション出してるけど
何の関係があるの?

977デフォルトの名無しさん (ワッチョイ b183-wbjw)2017/10/09(月) 22:24:17.86ID:bLguG3ky0
もしかしてC++で仕事したことないんですか?

978デフォルトの名無しさん (ワッチョイ dae7-XSap)2017/10/09(月) 22:25:07.16ID:1ynB1O3m0
そりゃ右辺値を束縛したくてかつconst左辺値じゃダメな場合だろ

979デフォルトの名無しさん (ブーイモ MMa1-0mrS)2017/10/09(月) 22:43:46.89ID:0USm99MRM
んー?
結局無いんでしょ?
使うべきシチュが
そうならそう言えばいいのに

980デフォルトの名無しさん (ワッチョイ 8981-zCRe)2017/10/09(月) 22:45:47.51ID:jvobj8TT0
>>979
classの初期化はどう?

981デフォルトの名無しさん (ワッチョイ dab3-Nz6W)2017/10/09(月) 22:51:16.17ID:UEIAYP2F0
使うシチュエーションがない?
規格決める奴等が無駄にあーだこーだ言ってるだけとか思ってるなら病院に行った方がいいと思う

982デフォルトの名無しさん (ブーイモ MMa1-0mrS)2017/10/09(月) 22:54:00.89ID:0USm99MRM
初期化はどう?って言われても・・
右辺値参照で初期化するのがベターな状況は
浮かびませんけど

983デフォルトの名無しさん (ブーイモ MMa1-0mrS)2017/10/09(月) 22:55:12.55ID:0USm99MRM
>>981
と言いつつも
思い浮かばないんでしょ?
じゃあ君もワイと一緒ですね

984デフォルトの名無しさん (ワッチョイ dae7-XSap)2017/10/09(月) 23:09:59.39ID:1ynB1O3m0
んん?
右辺値を束縛したい(一時オブジェクトだから左辺値としての実体はない)
けどconst左辺値じゃダメ(中身を変更したいから)
 ↑
これのどこにわかりにくい点があるというのか?
「RVOが保証されるようになったらいらない」という意見なら理解できるが・・・

985デフォルトの名無しさん (ワッチョイ dae7-XSap)2017/10/09(月) 23:14:06.35ID:1ynB1O3m0
たとえば swap の実装なんか(素朴には)moveを3回繰り返すんだから
右辺値参照の有用性は明らかだろ

986デフォルトの名無しさん (オッペケ Sr75-BFoK)2017/10/09(月) 23:16:20.29ID:7RyTvmhPr
>>973「なんでそんなに一時オブジエクトを参照しなきゃいけないコードを書くの?」
 ↓
>>984「右辺値を束縛したい(一時オブジェクトだから左辺値としての実体はない)けどconst左辺値じゃダメ」
 「これのどこにわかりにくい点があるというのか?」

これがアスペというやつか

987デフォルトの名無しさん (ワッチョイ dae7-XSap)2017/10/09(月) 23:20:00.09ID:1ynB1O3m0
>>986

は?
>>979に言ってるんだよ

988デフォルトの名無しさん (ブーイモ MMa1-0mrS)2017/10/09(月) 23:25:56.07ID:0USm99MRM
>>985
これを右辺値参照Verに書き換えて
利点を示してもらえますか?

void swap(int& a,int& b)
{
int c = a;
a = b;
b = c;
}

void main()
{
int a = 1;
int b = 2;
swap(a,b);
}

989デフォルトの名無しさん (ワッチョイ dae7-XSap)2017/10/09(月) 23:26:35.20ID:1ynB1O3m0
>>986
そっちこそ唐突に>>793>>984を唐突に矢印で結び付けてるけど大丈夫か?
お前の脳内の連想なんて誰にもわからないぞ

990デフォルトの名無しさん (ワッチョイ dae7-XSap)2017/10/09(月) 23:27:28.76ID:1ynB1O3m0
>>988
利点はない
intだもの

991デフォルトの名無しさん (ブーイモ MMa1-0mrS)2017/10/09(月) 23:31:15.79ID:0USm99MRM
なら何なら利点があるの?
long long型ならあるの?
もう訳が分からないよ

992デフォルトの名無しさん (ワッチョイ dae7-XSap)2017/10/09(月) 23:32:58.04ID:1ynB1O3m0
>>991
コピーコストの大きいコンテナだったら三回も代入したくないだろ?

993デフォルトの名無しさん (ワッチョイ 8981-zCRe)2017/10/09(月) 23:34:48.01ID:jvobj8TT0
>>982
もう使わないなら右辺値参照版のコンストラクタに渡したほうがいいじゃん
そしたら、コピーが起きなくて済むでしょ?

994デフォルトの名無しさん (ワッチョイ dabd-mvC5)2017/10/09(月) 23:41:18.28ID:U0LcPFS10
>>986
右辺値を束縛したい文脈ではかわりにconst左辺値で常におkなのでは…(ていうかconstはあってもなくても良い

>>985
T型データのswapは素朴にはT型データのコピー3回+破棄2回ぐらいが生じる
のでわ…

995デフォルトの名無しさん (ワッチョイ b183-wbjw)2017/10/09(月) 23:48:51.82ID:bLguG3ky0
swapが頻繁に起こるような用途なら、なんではじめからポインタで管理しないんですか?

996デフォルトの名無しさん (ワッチョイ aafb-BFoK)2017/10/09(月) 23:49:46.71ID:qIHa8iWG0
一時オブジェクトもglvalueなんだから
T &に束縛できればよかった

997デフォルトの名無しさん (ワッチョイ 8981-zCRe)2017/10/09(月) 23:52:41.96ID:jvobj8TT0
>>995
ヒープじゃなくてスタックで処理したいから

998デフォルトの名無しさん (ブーイモ MMa1-0mrS)2017/10/09(月) 23:55:42.49ID:0USm99MRM
結局のところ
右辺値参照はコピーコストを削減出来るのが利点で
それぐらいしか使い道がないってことか

かつ、コピーコンストラクタよりムーブコンストラクタの方が
コストを軽く出来るクラスに限られると

struct a{ void* p; }; // これには効果が期待出来るが
struct b{ int p[65536]; }; // これには効果は期待出来ない

結論としては、やっぱいらねーやこんなのってことだな

999デフォルトの名無しさん (ワッチョイ 8981-zCRe)2017/10/09(月) 23:58:36.68ID:jvobj8TT0
後者も効果が期待できるよ
そして、コピーコストが削減できるだけってのは正しいが、いるかいらないかは人による

1000デフォルトの名無しさん (ワッチョイ dae7-XSap)2017/10/10(火) 00:01:39.19ID:O5j+wjNW0
>>998

> struct b{ int p[65536]; }; // これには効果は期待出来ない

それはあんたがそんな構造をよく使うんなら正しい
よかったじゃないか、結論が出てw

10011001Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 72日 12時間 33分 11秒

10021002Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php

レス数が1000を超えています。これ以上書き込みはできません。