C++相談室 part131at TECH
C++相談室 part131 - 暇つぶし2ch2:デフォルトの名無しさん (ワッチョイ 3796-ov1m)
17/07/29 11:31:44.83 o30VDF4g0.net
C/C++室のURLはこちらが正しいです。ごめんなさい。
【初心者歓迎】C/C++室 Ver.101【環境依存OK】 [無断転載禁止]©2ch.net
スレリンク(tech板)

3:デフォルトの名無しさん (ワッチョイ 6a90-qWRz)
17/07/29 12:46:26.94 Gw88XuqA0.net
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>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
---- テンプレ ここまで ----

4:デフォルトの名無しさん (ワッチョイ f396-ZO1u)
17/07/29 17:38:08.78 O6R2q/bm0.net
うむごくろう

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

6:デフォルトの名無しさん (オッペケ Srb3-Ibwl)
17/07/29 22:23:56.70 E0esoNX5r.net
日付がミスリーディングなクソレスを貼る>>3は無能

7:デフォルトの名無しさん (スップ Sd2a-pcXC)
17/07/30 02:31:41.53 xlcIQQjmd.net
>>1
CからC++の学習に進もうと思ってるんだけど、皆さんオススメの書籍とかWebとか有ったら教えてちょ

8:デフォルトの名無しさん (ワッチョイ 3bb4-749T)
17/07/30 06:50:23.38 qWNYkf/a0.net
やめとけやめとけ
Cでリスト構造あたりがすらすら書けるようになったならC#にしとけ。
生産性あがらずそっぽ向かれてるのに、
ムーブコンストラクタとか、コード増えて、さらに生産性低下。
完全にオナニー規格で、自分でとどめ刺した。
まるで民進党の蓮ポ

9:デフォルトの名無しさん (ワッチョイ 3bb4-749T)
17/07/30 07:41:41.24 qWNYkf/a0.net
>>7
URLリンク(is.muni.cz)
URLリンク(freepdf-books.com)
URLリンク(www.open-std.org)
URLリンク(www.open-std.org)
URLリンク(msdn.microsoft.com)

10:デフォルトの名無しさん (ワッチョイ 3bb4-749T)
17/07/30 07:46:18.32 qWNYkf/a0.net
11と14のドラフトあげてしもた
Straustrap 4thと14でいいと思う
URLリンク(www.open-std.org)

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

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

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

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

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

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

17:デフォルトの名無しさん (ワッチョイ 6a9f-ns/O)
17/07/30 12:26:14.76 HMlHttTQ0.net
URLリンク(www.saiensu.co.jp)
みっけた。コレだわ。
コレ読んだあとにSTLの分厚いの読むと解りやすかった。

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

19:デフォルトの名無しさん (ドコグロ MM22-gqKx)
17/07/30 12:59:03.24 Y5XJTDyYM.net
コピーライト表記が SAIENSU-SHA Co., Ltd. だからね

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

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

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

23:デフォルトの名無しさん
17/08/02 05:09:58.76 QkMqJWKd0.net
>>17
一から勉強する初心者に、
使いにくいだけの過去規格の遺物勧めて何したいんだ。
C++1xとANSI時代のC++は別物だ

24:デフォルトの名無しさん
17/08/02 08:31:16.93 j5kUV6O90.net
でもC/C++は互換性をかなり重視してくれているから、時系列に沿って勉強しても無駄ではない気がする。
っていうか、いきなりC++14勉強するのは辛いんじゃねって気がする。

25:デフォルトの名無しさん
17/08/02 09:22:34.98 dMb9Yx4tM.net
便利機能無しで学習するのはストレス溜まる。
わざわざそんな縛りプレーすることないわ。

26:デフォルトの名無しさん
17/08/02 09:30:57.66 TRQYVkPNd.net
常識とされていたことも変化しているからね

27:デフォルトの名無しさん
17/08/02 10:47:19.91 5aiRdv7G0.net
便利過ぎても自活力落ちるけどな

28:デフォルトの名無しさん
17/08/02 11:37:56.91 Mxrfj49o0.net
Effective C++ 第3版持っている人に質問
33項に書いてある「仕事を送る関数」なんだが
private継承しているのに、なんで派生クラスで基底クラスの関数を呼び出せるの?
inline関数ってところが関係しているのだろうか

29:デフォルトの名無しさん
17/08/02 11:39:16.93 Mxrfj49o0.net
ごめん補足
質問の箇所は33項 p.169ね
よろしくお願いします

30:デフォルトの名無しさん
17/08/02 12:22:32.52 SX9kgwib0.net
なんでもなにもprivate継承した基底クラスのpublicメンバは
派生クラスのprivateメンバ的扱いになるので
派生クラスの中では自由にアクセスできる

31:デフォルトの名無しさん
17/08/02 15:29:32.86 Mxrfj49o0.net
>>30
マジか……恥ずかしながらそんな基本的なこともわかってなかった
ありがとうございます

32:デフォルトの名無しさん
17/08/02 19:58:27.29 uVXFZ8FT0.net
穴を掘って入ろう

33:デフォルトの名無しさん
17/08/02 23:27:31.39 mLUoAaJZM.net
private基底とメンバ変数、機能的な違いはあるのかしらん?

34:デフォルトの名無しさん
17/08/02 23:30:18.47 wZt34zOG0.net
俺もprivateとpublicって積的関係かと思ってた
private継承とか使わんからな

35:はちみつ餃子
17/08/02 23:30:19.78 84D7BovY0.net
基底クラスへは問答無用でキャストできる。

36:はちみつ餃子
17/08/02 23:32:57.07 84D7BovY0.net
>>34
private 継承している場合は基底にキャストできない。
スライシングを起こしたくない場合には private 継承した上で
一部のメンバを using で公開するというようなテクニックもある。

37:デフォルトの名無しさん
17/08/02 23:34:00.01 mLUoAaJZM.net
おお、スライシング問題抱える訳ですな。使わないのが無難か……

38:デフォルトの名無しさん
17/08/02 23:40:10.88 mLUoAaJZM.net
あ、キャストできないが正解か。
private基底は実装を楽する手段かね。

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

40:デフォルトの名無しさん
17/08/03 01:39:28.66 3NxHKcnN0.net
vector自身をprivateにしたい場合はprivate継承
vectorのメンバを露出させたい場合はprotected継承

41:デフォルトの名無しさん
17/08/03 12:34:54.88 NztkOdZ3M.net
セマンティクス的には、
public継承はis-a関係
private継承はhas-a関係

42:デフォルトの名無しさん
17/08/03 12:53:23.95 tXFHDIDud.net
外から見たら、ね

43:デフォルトの名無しさん
17/08/03 22:13:12.27 YAnw1OKB0.net
リンゴとパイナップルとペンが入ったフルーツバスケットは
リンゴクラスとパイナップルクラスとペンクラスの多重private継承なんや

44:デフォルトの名無しさん
17/08/04 23:30:18.50 W4109686r.net
「private継承」とい言葉を見るとC++17ドラフトのUNKOなライブラリ設計しか思い浮かばない

45:デフォルトの名無しさん
17/08/05 06:26:48.70 IjGvtKjI0.net
メンバも含めてprivateなものの用途を詮索してもしょうがない

46:デフォルトの名無しさん
17/08/05 08:18:04.82 Oj6J0tUu0.net
誰か個人資産をpublicで公開してくれないかなぁ

47:デフォルトの名無しさん
17/08/05 10:59:21.66 q0G0ffZoM.net
2000年頃貯めた資産なので引き出せる紙幣はコピーだがよいか?

48:デフォルトの名無しさん
17/08/06 11:38:12.92 57DyNeACa.net
>>46
あなたのその文字も立派な個人資産。
ここに書いた瞬間2chに帰属するが。

49:デフォルトの名無しさん
17/08/06 19:15:12.69 /2i5R4CKr.net
このスレのレスで資産と呼べるのは
PostMessageでメモリ不足を検知するノウハウと
プライベートメンバーをアクセスする技くらいのものだ

50:デフォルトの名無しさん
17/08/06 19:28:38.68 OFkcQ32C0.net
>>49
>プライベートメンバーをアクセスする技くらいのものだ
え,それって private メンバのアドレスを返して外からアクセスするってやつ?

51:デフォルトの名無しさん
17/08/06 19:31:25.78 7dbJmn2Z0.net
違うだろ
それにネタ元はここじゃないし

52:デフォルトの名無しさん
17/08/06 20:55:29.92 BHhmDaJC0.net
>>50
privateをpublicでdefineするやつじゃ?

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

54:デフォルトの名無しさん
17/08/07 16:40:58.08 Y4YBisBB0.net
>>50 >>53
スレリンク(tech板:22番)

55:デフォルトの名無しさん
17/08/07 22:34:19.58 MakITfYKr.net
privateをpublicでdefineするのは潔くてカッコいいが
>>54は全てが糞すぎる

56:デフォルトの名無しさん
17/08/07 22:43:25.92 qpBf+1aM0.net
しかも既存のクラスに普通に手入れてるしね

57:デフォルトの名無しさん
17/08/08 07:52:39.36 CWtfXRt70.net
>>55
具体的に

58:デフォルトの名無しさん
17/08/08 08:21:06.59 RV4q7wpsr.net
>>57
うむ、こんなところだろう
1.既存のクラスに普通に手入れている
2.それは違うと>>53で言っているのに投下されるアスペなレス
3.privateな変数にアクセスするかと思いきや、privateな変数を出力するprivateな関数を呼び出すという意味の無い構成
4.deleteを使用するUNKOなコード
5.newを使用する残念なコード
6.コードへのリンクを投下するのでなくクソスレを経由するクソレス
7.例外安全でない
8.非staticにする必要性が感じられない
9.「(hoge->*(hoge->g()))();」というブザマな呼び出し方

59:デフォルトの名無しさん
17/08/09 18:36:43.63 UcwPIhci0.net
>>58
URLリンク(ideone.com)
改善:3, 4, 5, 6, 7
保留:1, 2, 8, 9

60:デフォルトの名無しさん
17/08/09 18:40:37.13 hewgQardr.net
いやそこは無視するだろ普通
>hoge.get()->*(hoge->g2()) = 54321;
もう何が何だか…

61:C言語ますたー《ますたー軍団(常時募集)の長》
17/08/09 18:43:38.11 s1XZJ5NhM.net
読んでないけどg()は関数ポインタを返す関数?
設計からしてダメだろ

62:デフォルトの名無しさん
17/08/09 18:53:35.78 VsUePcYe0.net
既存のクラスに手を入れてる時点でキモイ。
それならもっとやりようあるでしょ。

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

64:デフォルトの名無しさん
17/08/10 10:59:10.70 vqPWBCRZr.net
>>63
遠慮せずともじゃんじゃんプライベートにアクセスしてよいぞ
URLリンク(ideone.com)

65:はちみつ餃子
17/08/10 11:21:25.23 eseR3mB40.net
>>63
オフセットして実装するのが普通だと思うけど、メンバ変数へのポインタがオフセットで実装されるとは決まってないんじゃないの?

66:デフォルトの名無しさん
17/08/11 13:08:18.43 rA3728Ge0.net
C++の場合クラス(およびその基底クラス)内のメンバは全部ヘッダファイルを辿っていけばワカルのだから
まず全く同じ内容のヘッダファイルのコピーを作り、
ファイル名を適当に変えて、多重インクルード箇所もコピーしたもので閉じるように変更して、
privateやprotectedを全部publicにして、
クラスの名前をFoo→Foo2とか改変して、
仮想関数は適当に空の定義でもつけて、
 ((Foo2*)p)->(Fooのデータメンバ)
式にキャストしてアクセスすればデータメンバと仮想関数については問題なくアクセスできる
(ODR違反は都市伝説なので事実上これで動く
 だいたいprivate破りを意図している時点で実コードレベルで影響しない規約とか気にしても仕方が無い

67:デフォルトの名無しさん
17/08/11 13:10:51.21 rA3728Ge0.net
Foo2の仮想関数が空ではないか、というのは動作上問題にならない
vtableのしくみがわかっているならワカル以下略
一方非仮想関数の方はちょっとうまい方法が思いつかない…
private属性のメンバ関数のアドレスがとれれば勝つるのだが

68:デフォルトの名無しさん
17/08/11 15:28:00.96 CTzRRQx/0.net
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:デフォルトの名無しさん
17/08/11 15:45:01.75 GPxw37uF0.net
そりゃpushするときにBaseへの暗黙の型変換かかるからダメっしょ
ポインタつかえよBaseの

70:デフォルトの名無しさん
17/08/11 15:47:46.79 L0uHlCp20.net
>>68
そのコード本当に動く?
本質じゃなくて申し訳ないが、そのまま追試出来るコードじゃないと…
ちなみに質問の回答はスライスな。

71:デフォルトの名無しさん
17/08/11 15:57:28.65 GPxw37uF0.net
おかしいな、確かに
コピーコンストラクタもないのにコンパイラ通るのかコレ

72:デフォルトの名無しさん
17/08/11 16:00:31.30 L0uHlCp20.net
コピコンは省略可能だよー。

73:デフォルトの名無しさん
17/08/11 16:11:31.54 CTzRRQx/0.net
>>69
ありがとうございます
ポインタにすることで解決しました
>>70-71
動かしてるコードを簡略化したのでもしかしたら動かないかもしれないです

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

75:デフォルトの名無しさん
17/08/11 16:54:58.31 mfxycmdp0.net
会話としては成り立ってる

76:デフォルトの名無しさん
17/08/11 17:09:12.83 MFH9oRFs0.net
この言語はどこの業務で使われてるの?
組み込み・制御はC++使ってますとか言いながら大体これCじゃん!だから論外として

77:デフォルトの名無しさん
17/08/11 17:11:30.49 Ca8C76qb0.net
gcc が c++ で書き直された、という話はあったな

78:デフォルトの名無しさん
17/08/11 17:29:47.32 fw1fdXf30.net
>>76
URLリンク(github.com)

79:デフォルトの名無しさん
17/08/11 18:02:24.77 bpB/tg4h0.net
Webブラウザとかゲームとか

80:はちみつ餃子
17/08/11 18:34:36.55 eZ0/1svY0.net
>>76
Better C として使ってもええんやで

81:デフォルトの名無しさん
17/08/11 19:29:34.92 rA3728Ge0.net
>>76
Simulaの置き換え

82:デフォルトの名無しさん
17/08/11 20:50:37.74 W25jNYVm0.net
C言語としてg++使ってる

83:デフォルトの名無しさん
17/08/11 21:45:37.12 U5fbDsCj0.net
ウチじゃモータ制御に使ってるな

84:デフォルトの名無しさん
17/08/12 16:56:14.99 srjAo6Ap0.net
質問です。
宣言は、全ての要素に対して必要なのですか?
n = a+b:
という行があるとすると、
#include <n>
#include <a>
#include <b>
が必要なのですか?
とても初心者なので、なにとぞ教えてください。
お願いします。

85:デフォルトの名無しさん
17/08/12 17:13:58.34 AoA5DjYT0.net
意図がわかりにくいがその場合だったら#include <n> だけあればいいんじゃないの?
そうでないとしたらinclude順は#include <a>と#include <b>を先に書くべき。

86:
17/08/12 17:17:09.90 lBXwiOpA0.net
>>84
#include は宣言じゃない
多分
int n;
int a:;
int b;
のことじゃないかな?

87:デフォルトの名無しさん
17/08/12 17:21:05.88 Yn7dYYpz0.net
>84
#include
というのは、外部にあるファイルを読み込め
という命令なので、変数の宣言ではありません。
#include <a>
というのは、aというファイルを読み込めという
命令です。
n=a+b
という場合には、この式の前に、n, a, bという
変数の型を宣言する必要があります。
全てが整数ならば、
int a, b, n;
単精度実数ならば
float a, b, n;
と、倍精度実数ならば、
double a, b, n;
と書きます。
と変数の型を宣言します。
このことは、基本の基本なので、解説書の最初に書いてあるはずです。
解説書をよく読んで、その上で分からないことを
質問しましょう

88:84
17/08/12 17:27:53.44 srjAo6Ap0.net
>>85-87様
googleだけの独学なので、とても勉強になりました。
とても、ありがとうございました。

89:デフォルトの名無しさん
17/08/12 17:28:31.16 AoA5DjYT0.net
文字通りの意味だったのかよ

90:デフォルトの名無しさん
17/08/12 18:07:41.60 B05a5g6/r.net
>#include <a>
>というのは、aというファイルを読み込めという命令です。
んなこたーない

91:デフォルトの名無しさん
17/08/12 18:16:01.28 B05a5g6/r.net
>>87
>この式の前に、n, a, bという変数の型を宣言する必要があります
それは規格のどこに書いてあるのですか?

92:デフォルトの名無しさん
17/08/12 19:18:12.75 qkSSCQjy0.net
DEFINEもincludeも本質的にやってることは同じだしファイルを読み込めは間違ってるな

93:デフォルトの名無しさん
17/08/12 19:23:05.89 6XNTCj+p0.net
includeがファイルをその位置に展開しろっていうのはあってると思うけど、何が不満なんだ?
defineはただの文字列置換。

94:デフォルトの名無しさん
17/08/12 21:29:22.94 B05a5g6/r.net
× #include <a>というのは、aというファイルを読み込めという命令
○ #include <a>というのは、aというヘッダーを読み込めという命令
○ #include <a>というのは、#include <a>をaというヘッダーの内容で置き換えろという命令

95:デフォルトの名無しさん
17/08/12 22:23:06.24 AoA5DjYT0.net
またヘッダー警察が来るぞ

96:デフォルトの名無しさん
17/08/12 23:15:33.63 wV3c1N0ta.net
>>84のレベルの人に説明するのに、厳密な用語をどうこういうより、>>87レベルの説明の方が適切だろう

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

98:デフォルトの名無しさん
17/08/13 06:37:43.35 /9jKf3580.net
「C++の#includeがファイルを読み込むとは限らない」
という説明を何かで読んだ記憶がある。
例えばソースに #include <hoge.h> と書いてあっても
hoge.h というファイルの実体は存在しなくて、
コンパイラが内部的なスイッチとして使っても構わない、みたいな話。
実際にそういう動作をするコンパイラは知らんけど。

99:デフォルトの名無しさん
17/08/13 07:15:34.96 CgemGkhrr.net
>>97
もとの>>87は#includeでなく#include <>なのだが
>二つを纏めてファイルと呼称しているとしたら
いきなり自分の結論を大前提に置かれても
まあこのへんはC++17で少し変わるだろう

100:デフォルトの名無しさん
17/08/13 11:33:24.03 P6N6OiXF0.net
CSVファイルを読み込むときに#include使うことある

101:デフォルトの名無しさん
17/08/13 20:57:49.74 R0DVX6mKM.net
てか、学ぶなら1冊くらい本買えよ
Googleで独学とか効率悪すぎる

102:はちみつ餃子
17/08/14 00:14:24.38 N3oVMbyu0.net
軸がわからないと自分が何をわかってないかすらわからないからクソみてぇな思い込みで検索して見当違いの方向に突っ込んでしまうから、
そうなってから質問しても質問が見当違いすぎて回答しようがないことはよくある。

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

104:デフォルトの名無しさん
17/08/15 19:28:20.65 GzAS59pw0.net
>>103
スゲー古い本だけどこの辺りを参考にするとか
URLリンク(www.amazon.co.jp)

105:デフォルトの名無しさん
17/08/15 19:38:22.48 AjDM7F7/0.net
URLリンク(ideone.com)
これ、C++17でできるようになるんだっけ?どうだっけ?

106:デフォルトの名無しさん
17/08/15 19:51:33.69 nijih07Br.net
少なくとも似たケースを支援する機能は追加されるがそのままでは通らない
[*this]

107:デフォルトの名無しさん
17/08/15 19:53:35.30 nijih07Br.net
と思ってよく読んだら関係無かったしTは生存期間内だった
つまりC++17では無理

108:デフォルトの名無しさん
17/08/15 19:56:48.90 AjDM7F7/0.net
そうなんだ。ありがとう。
またウインドウを出せないのか。
綺麗なウインドウクラスを書く日は遠い・・・。

109:デフォルトの名無しさん
17/08/15 19:59:11.57 vSz72Ekj0.net
>>103
LLVMのtutorialでもやってみたら? (↓の一番上)
URLリンク(llvm.org)
たしか日本語訳もあったと思うけど、内容が古いので注意。

110:デフォルトの名無しさん
17/08/15 20:03:18.47 BftRsONU0.net
>>103
yacc, lex (または bison, flex) とかは知ってる?
使うと構文解析が楽になるよ。

111:デフォルトの名無しさん
17/08/15 21:06:58.79 K8T9Hr6g0.net
>>108
単にstd::function使えって話じゃねーの?

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

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

114:デフォルトの名無しさん
17/08/15 21:53:17.41 +1mFvI7w0.net
>>105
できるも何も型が違うからエラーでしょ。
ラムダ型のオブジェクトはautoでしか受けられない。

115:デフォルトの名無しさん
17/08/15 23:43:23.71 AjDM7F7/0.net
>>113
クロージャって知らない?
>>114
条件を限定することで関数ポインタに束縛できるようになりました。
まぁ今回書いたのは願望ですけど。

116:デフォルトの名無しさん
17/08/15 23:55:50.09 K8T9Hr6g0.net
>>115
キャプチャしないラムダ式は関数ポインタに変換出来るだけ。束縛じゃない。

117:デフォルトの名無しさん
17/08/15 23:58:52.92 AjDM7F7/0.net
あぁ、語弊があったね。ゴメン。

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

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

120:デフォルトの名無しさん
17/08/16 12:58:58.53 +9oABFYpM.net
もういない宣言出てるけど、スレッドローカルでやられても困るだけだと思う。

121:デフォルトの名無しさん
17/08/16 14:20:28.94 5HjXxUQN0.net
>そしてそれをC言語の関数ポインタと互換性がある形で実装可能か考えてみるといい。
もともとC言語はλ式とか、(束縛変数がクラスのこともありえるが)クラスを構文でサポートしていないのだから
「C言語の関数ポインタと互換性がある形」と逝っただけでは何を指しているのか不明確にならざるおえない
呼び出し側がいかに煩雑な記述になろうとも、動けば互換性があるという立場をとってみるテスト、
束縛変数も毎回引数渡しすればC言語の関数ポインタと互換にできるのでは…
もはやクロージャでも何でも無いが一応動く

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

123:デフォルトの名無しさん
17/08/16 15:18:13.19 5HjXxUQN0.net
>>122 関数ポインタ経由の関数呼び出しに関数名のマングルは関係無いのでは…



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

126:デフォルトの名無しさん
17/08/16 15:57:26.34 07vifjzr0.net
「正しく実装」すると互換性がないってこと?

127:デフォルトの名無しさん
17/08/16 15:59:31.27 CMzvSoma0.net
a = 0
2.times do
b = 1
3.times do
p a, b
end
end
「Rubyのしくみ」に書いてあるけど、Rubyは、Cで作ってあり、
do ~ end のブロックは、クロージャの実装。
ラムダ・Proc も、ほとんど同じ
子のブロック内で、変数が見つからなければ、
外のスコープ(先祖の方向)へ遡って、探しに行く

128:デフォルトの名無しさん
17/08/16 16:07:27.94 53LlWcImr.net
>>125
そのとおり
規格では別の型と規定されている
atexitなど関数ポインターを渡す関数ではCリンケージの関数ポインターを渡すかC++リンケージの関数ポインターを渡すかで
C版atexitとC++版atexitのオーバーロード呼び分けができることになっている
clang/G++は意図的に規格に従っていないというのが痛説
Visual C++は規格より自分が正しいという意味不明な見解

129:デフォルトの名無しさん
17/08/16 16:16:58.46 07vifjzr0.net
や、互換性がない→別の型 は真でも 別の型→互換性がない はそうじゃないような。

130:デフォルトの名無しさん
17/08/16 16:31:53.97 53LlWcImr.net
そのとおりだ
暗黙の変換は禁止されていない
ただ暗黙の変換が可能というルールも存在しないので「コンパイルが通る保証が無い」と書いた

131:デフォルトの名無しさん
17/08/16 16:48:50.64 07vifjzr0.net
なるほど。
上の方で原理的に無理みたいなことが書いてあった気がしたので念のため。

132:デフォルトの名無しさん
17/08/16 18:09:49.22 VpF+jov/0.net
マングリングっていやらしいよな

133:デフォルトの名無しさん
17/08/16 18:35:35.31 lmNMFTOO0.net
そういうCのインタフェースにはたいてい関数ポインタの他にユーザデータを指定できるようになっててそこにthisなんかを入れておくものだが、 >>105 は関数オブジェクトを関数ポインタだけに変換したいと言っているわけか……
コードを動的に生成すれば不可能ではないだろうけど、色々トレードオフがあるから言語の機能にするのはどうだろうね。
ライブラリを作っても良いんだろうけど、おとなしく定石に従っておいた方が良いよ

134:デフォルトの名無しさん
17/08/16 22:53:19.96 VOMe5hsv0.net
>>132
動的にコードを生成したとしてもどこにその生成したコードを置くのか、それをどうやって解放するのかが問題になるね。だったらコード生成してもしなくても同じ事。

135:デフォルトの名無しさん
17/08/16 23:14:18.00 lmNMFTOO0.net
>>133
> 動的にコードを生成したとしてもどこにその生成したコードを置くのか、それをどうやって解放するのかが問題になるね。
そうだね。
> だったらコード生成してもしなくても同じ事。
同じではないね。

136:デフォルトの名無しさん
17/08/16 23:47:46.20 VOMe5hsv0.net
>>134
言い方が悪かったかな?
「どこにその生成したコードを置くのか、それをどうやって解放するのか」が解決するのであれば、コードを動的に生成しなくてもキャプチャしたデータ自体をそこに置けばいいだけ。

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

138:デフォルトの名無しさん
17/08/17 05:10:47.78 gXVZW44o0.net
WTL/ATLでそれっぽいことをやってるね。
URLリンク(hp.vector.co.jp)

139:デフォルトの名無しさん
17/08/17 08:39:28.71 rYxoi1+/d.net
MS は mfc の頃から動的コード生成でやってだ記憶がある。
this をロードして jmp みたいな小さいコードを生成して Window Proc として使う。

140:デフォルトの名無しさん
17/08/17 09:01:01.55 6E9r52D/0.net
それ動的生成だろ。コードじゃなくてインスタンス。

141:デフォルトの名無しさん
17/08/17 10:51:29.58 rYxoi1+/d.net
>>139
コードだっつーの
関数ポインタ一つしか渡せないwindowprocにthisを渡すためにそうやってるんだよ。
なんで知らんのに反論するかなー

142:デフォルトの名無しさん
17/08/17 11:04:19.66 OslnP8rdM.net
>>140
ひょっとして各インスタンスにコードが含まれてるとか思ってる? w

143:デフォルトの名無しさん
17/08/17 14:38:16.10 B8c7/K0xr.net
>>138
そのサンクらしきものはどこのセグメントに置くの?

144:デフォルトの名無しさん
17/08/17 15:30:51.11 PxJqlDv90.net
自分でソース読めば良いのに。
最近はDEPとかあるから工夫が必要そうだよね、と検索したらこんなのが出てきた。
URLリンク(support.microsoft.com)

145:デフォルトの名無しさん
17/08/17 16:53:07.66 6E9r52D/0.net
>>143
MFCのどのクラスに動的コード生成の実装が書いてんの?

146:デフォルトの名無しさん
17/08/17 17:43:39.99 PxJqlDv90.net
なんか頭悪そうなのがつっかかってきた

147:デフォルトの名無しさん
17/08/17 17:47:21.07 fzzVUP+8d.net
DOS時代は動的コード生成とか良く使ったな

148:デフォルトの名無しさん
17/08/17 18:37:40.30 6E9r52D/0.net
>>145
なんで急にキレるんですか?
あなたがソース読めとアドバイスしたからMFCのどのソースか聞いただけなのに。

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

150:デフォルトの名無しさん
17/08/17 18:56:13.88 wL10pSGX0.net
質問だと思ってる時点で低能確定やん w
まあセグメントと聞いてセグメントレジスタしか頭に思い浮かばない


151:低能はROMってろ



152:デフォルトの名無しさん
17/08/17 19:26:52.61 KC+pdSEir.net
>古来よりフラットなリニアアドレスモデル
まさかそっちのセグメントに反応するとは予想外だった

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

154:デフォルトの名無しさん
17/08/18 07:51:05.48 mSCO2cNh0.net
C++を身に着けたいと思いつつも、自分でC++で何かを作るモチベーションが湧かなくって、数千行程度のC++プログラムの写経でもしようかと思ってるのですがおすすめありませんか?
SDLを使ったゲームとか興味を持ちやすくて写経しやすいかと思ってgithubとか漁ってるのですがなかなかいいのが見つからなくて悩み中です
QtみたいなC++を拡張してるのは勘弁です

155:デフォルトの名無しさん
17/08/18 08:26:03.23 cQGhZEXD0.net
あなたが何に興味を持つかなんてわかりません
C++以外の技能は?

156:デフォルトの名無しさん
17/08/18 09:19:25.85 q7vLALqK0.net
てんそるふろーでも読んでみるとか。
今を時めくフレームワークだよ。

157:デフォルトの名無しさん
17/08/18 12:28:43.04 vqpgoPDk0.net
クソだと思うやつを俺が叩き直してやるってやっていればそのうち上達してる

158:デフォルトの名無しさん
17/08/19 00:15:55.63 LWJoSxYpr.net
ぜひ叩き直してください!

159:デフォルトの名無しさん
17/08/19 10:13:11.47 2Vqw9aXW0.net
>>156
思いっきり叩いてやるからまず自分が書いたソースをどこかにアップしろ

160:デフォルトの名無しさん
17/08/19 11:23:26.49 w9JmRxmV0.net
>>157
スレリンク(tech板:20番)

161:デフォルトの名無しさん
17/08/19 12:05:03.25 uvlmBKsV0.net
他人に使わせる気のないコードなんていくら書いても意味ない
ソフトウェアとして公開して叩かれろ

162:デフォルトの名無しさん
17/08/19 12:07:34.16 w9JmRxmV0.net
>>159
>他人に使わせる気のないコード
どうすれば他人に使わせる気満々のコードになるのでしょうか?
ソースを公開する以外に何かしないといけないのでしょうか?

163:デフォルトの名無しさん
17/08/19 12:13:16.84 YuM2o2hA0.net
3行以内で書く、とか?

164:デフォルトの名無しさん
17/08/19 12:46:02.69 dHC0uy3l0.net
使いたくなるか否か、それを判定するソースコードを見せてくれれば一番早い
そしてそのソフトウェア自体をその判定にかけると得点はMAXになるのは当然

165:デフォルトの名無しさん
17/08/19 15:54:33.73 /pRbJcl80.net
>>160
・OSSライセンスを適用する
・有名処のOSSホスティングサービスで公開する
・ソフトウェアの目的と利用方法を理解しやすいようにドキュメント化する
・CPUやメモリなどのリソースを効率よく使用する
・汎用性が考慮された作りにする
・特殊化も考慮された作りにする
・バクが無いようにする
・こまめに更新し継続して改善されている事をアピールする
このくらいやれば他人に使わせる気満々のコードに見える

166:デフォルトの名無しさん
17/08/19 16:03:12.53 w9JmRxmV0.net
>>163
なるほど
でも >>158 をやる気満々で公開しようと思ってもアピール点が見つからないんです
「C++ だけで簡潔する多桁演算」というのは訴求ポイントとしてはどうなんでしょうか
誰かやってるかどうかはさておき、魅力的がどうかは気になります

167:デフォルトの名無しさん
17/08/19 16:04:19.60 w9JmRxmV0.net
×簡潔○完結

168:デフォルトの名無しさん
17/08/19 18:29:45.94 xqVOePdU0.net
右辺値参照がやっぱりわからん
template<class T>
void test(T&& t) {
f(std::forward<T>(t))
}
このstd::forward<T>(t)は左辺値なの?
名前持つt(左辺値)を転送してるから左辺値でいい?
f()はf(T&)を呼ぶであってる?

169:デフォルトの名無しさん
17/08/19 18:30:36.24 eKyb4lix0.net
C++11,14を勉強するのにいい本おしぇーてください。

170:デフォルトの名無しさん
17/08/19 19:12:00.26 o+HPRhwX0.net
effectiveなんちゃらフォイ

171:デフォルトの名無しさん
17/08/19 19:19:27.18 eKyb4lix0.net
もだーん?

172:デフォルトの名無しさん
17/08/19 19:52:37.70 g5B0Pqab0.net
>>166
forward<T>(t)はtをTの右辺値参照にキャストして返すんだから
f()はT&& tを受け取る(f(T&&)が呼ばれる)んじゃね?

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

174:166
17/08/19 20:37:29.73 xqVOePdU0.net
>>170
やっぱり右辺値参照へのキャストか
左辺値参照ぽい動きなんで質問してみた。ありがと
>>171
俺にはforwardはまだ早いってことスね
まずforwardなしでもう少し考えてみるわ

175:デフォルトの名無しさん
17/08/19 22:34:08.72 s/7RraD70.net
>>166
もとの test という関数が右辺値、左辺値どっちでも引数に取れる、そして std::forward でそのまま転送している
f がとる引数の型は test がとった引数と同じ。
つまり答えは実引数次第だ。

176:デフォルトの名無しさん
17/08/20 08:37:02.88 5zFtpOhv0.net
うにふぁいどこーるしんたっくすはしんだなぜだ!

177:デフォルトの名無しさん
17/08/20 08:45:14.41 0H5//osor.net
死んだ?
むしろ他の提案が出ておちつきそうだったのに
自尊心を傷つけられたと感じたハゲがゴネだして蒸し返えされたような

178:デフォルトの名無しさん
17/08/20 08:47:52.43 5zFtpOhv0.net
>>175
あんた詳しそうだな。今どうなってるの??
猛烈にほしいんだけど、サクッと入らんかな?
詳しいリンクとかあったらいただけないでしょうか。

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

180:デフォルトの名無しさん
17/08/20 13:06:57.93 FiktH31Q0.net
3年毎に膨らんでいく仕様とか嫌だな
そらリナスさんもブチキレますわw

181:デフォルトの名無しさん
17/08/20 14:55:44.31 5zFtpOhv0.net
>>177
あぁ、情報ありがとう。やっぱ死んだままか。
手間かけさせてゴメンね。
やっぱコンセプト無いとコードサジェスト爆発するから気に入らないんだろうなぁ。。。

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

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

184:デフォルトの名無しさん
17/08/20 15:43:51.01 Np+yxjmfM.net
メイヤーズがこっそりc++とバイナリ互換の新言語を開発している…と信じたい

185:デフォルトの名無しさん
17/08/20 15:57:28.37 uPeoc0+j0.net
そのバイナリ互換ってなに?
C++11 以降で、役に立つ仕様とどーでもいい仕様とをわけるとすれば、何?

186:デフォルトの名無しさん
17/08/20 16:05:02.55 sGdhnhOm0.net
>>181
誰も望んでいない仕様拡張?
autoは? range-based-forは? R"リテラルは?
initializer_listは? ラムダ式は? template parameter packは?
<random>は? shared_ptrは? <regex>は? <system_error>は?

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

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

189:デフォルトの名無しさん
17/08/20 16:17:20.06 uPeoc0+j0.net
>>154
TFか‥ソニーからも何か出たようだね

190:デフォルトの名無しさん
17/08/20 16:41:18.86 gPEOCHBy0.net
>>181
> スキルの差によって読める、読めないの差がありすぎてもはや言語としての体をなしていない。
日本語(自然言語)でも同じだろ。
馬鹿と天才でおなじ結果(コード)にしかならない、という方が問題だ。
それが天才側に揃っていれば理想的だが、実際は馬鹿側に揃うわけだし。
>>186
> 少なくとも個別の提案はプログラムが読みやすくなるし楽になる方向なんよね。
これは同意だが、問題は一部が本質的なところ(骨組み)まで変えられる程な点だろ。
現実的には>>185のようにプロジェクトリーダーが何を使うか厳密に決めればいい話で、
Linuxの場合はCだ、って言うんだから他の奴が布教しなければ丸く収まる話だ。
とはいえ通常製品の場合は「何でも出来る=何にも使えない」ではあるのだが、
C++の場合は半製品(製品を作る道具)ではあるし、
実際、機能はあった方が便利だったりするので、(使う側がどこまで使うか決めればいいだけ)
プロジェクトリーダーがしっかりしていれば、現在の貪欲な拡張方向も悪くない。
「全部の機能を使わないといけない」と信じている馬鹿と初心者は混乱するだろうけどね。

191:デフォルトの名無しさん
17/08/20 16:58:27.04 zvlsjK6m0.net
>>188
>「全部の機能を使わないといけない」と信じている馬鹿と初心者は混乱するだろうけどね。
残念ながらこういう人たちは少数派ではないのだよ。。

192:デフォルトの名無しさん
17/08/20 18:05:26.65 sGdhnhOm0.net
>>188
馬鹿側に揃えるポリシーを見事なまでにやってのけた言語と言えば。。。
IDENTIFICATION DIVISION.
再帰できない、ダミーセクションできない、動的記憶ない、オラこんな村いやだ♪
で、その結果なにが起きたか。。。
エロパブの嬢がどこかで見覚えのある顔だと思ったら、うわあ(kwskはガン無視します)

193:デフォルトの名無しさん
17/08/20 18:47:40.43 gPEOCHBy0.net
>>190
COBOLの事か?だとするとあれは試行錯誤の結果だ。非難されるべき物でもない。
そもそもあの時代の言語は再帰出来ないのも多かった。Fortran77もBASICもそうだろ。
俺が思うに、第


194:一世代言語(C以前)は「プログラミングとはこうあるべき」、 つまり、プログラミング自体を規定しようとしている。 COBOL:自然言語の仕様書がそのままソースになるべき C:所詮アセンブラ smalltalk:オブジェクト間のメッセージングこそが真の未来 Lisp:ラムダこそ真理 BASIC:馬鹿でも使えることが重要 Fortran:所詮計算機だろ で、C以外が全部糞だったのでCで統一された。 当然第二世代言語はCの後継で、C++/Java/C#のような面子になる。 とはいえ、COBOLの方向性は間違いでもないよ。 ソース自体が可読性のあるドキュメントであるべき、ってのは今でも理想だろ。



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

196:デフォルトの名無しさん
17/08/20 19:05:55.32 QoZjiUMw0.net
>>192
BASIC で再帰ができるのは,ハドソン系ベーシック等,マイクロソフト以外の BASIC ではないか?

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

198:デフォルトの名無しさん
17/08/20 19:45:06.60 sGdhnhOm0.net
s/CP/CPU/
CPじゃ制御プログラムだねw

199:デフォルトの名無しさん
17/08/20 21:07:10.22 gPEOCHBy0.net
>>194
> 全変数がグローバルなのでやりにくいができるにはできた
これは一般的には出来るとは言わない。
再帰が出来る=関数ローカルの変数が定義出来る、だよ。
変数共通で突っ込むのは今なら「再入」と呼ばれる物に近く、
これは言語として云々ではなく、対応する構造にするかどうかだけ。
また、CPUのスタック操作命令は高速化に寄与するだけであって、
無ければエミュレートすればいいだけだろ。
その論法だとスタック操作命令がないCPUではC言語を実装出来ないことになるが、
これはないだろ。
(S/370上のC言語実装も無いとは思えないし)

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

201:デフォルトの名無しさん
17/08/20 22:03:55.37 sGdhnhOm0.net
秀和の解析本にはBASICのくせにunwindがあるぞってなのが載ってたね

202:デフォルトの名無しさん
17/08/20 22:43:04.76 gPEOCHBy0.net
>>197
> 再帰の定義はサブルーチンの中からそのサブルーチンを呼び出すことで、
> それをやりやすく補助する存在は本質じゃない
これは屁理屈だ。
なぜならこの定義では、「再帰出来ない」言語なんて無いから。
再帰出来る/出来ない『言語』を議論している時点で、この定義は無意味で、
「普通に再帰を記述した時に問題なく動くか」が議論用の定義になる。
これは当然であり、自明だ。
つか、君は何が言いたかったんだ?
君の定義ならCOBOLだって再帰出来るだろ?

203:デフォルトの名無しさん
17/08/21 04:24:06.96 LgR8oR3f0.net
再帰アルゴリズムを繰り返し(ループ)アルゴリズムに変換することは普通のアーキテクチャー上では常に可能、
再帰回数に応じて新規のメモ化用領域を本質的に必要とするという重症なケースでも、最悪配列が使えればどうとでもなる、
>>197
メインフレームってグローバル変数として配列とか確保できなくて
いちいちGETMAINするしかないのスゲー
>>199
System/370で動くGCCの実装があったと聞いたわ(ただし今はSystem/390が動作下限とのこと)
再帰ができるかどうかはしらんwwwwwww

204:デフォルトの名無しさん
17/08/21 06:45:36.67 OHbYaZtv0.net
>>199
> 君の定義ならCOBOLだって再帰出来るだろ?
(当然だが当時のCOBOLは)できないよ
戻り番地を1つしか覚えてないのでネストしたら戻れなくなる

205:デフォルトの名無しさん
17/08/21 07:37:14.11 7Rgof7Fhr.net
そろそろよそでやれ

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

207:デフォルトの名無しさん
17/08/21 08:10:41.60 M1FJxIMj0.net
>>199
だから見解が違っているねと言ったろ
アセンブラは再帰できるのか、できないのかという問いと、
COBOLは再帰できるのか、できないのかという問いに、
同じバックボーンで答えることが俺には出来ないが
おまえさんには出来るということだろ?
>>200
bfdではi370だね

208:デフォルトの名無しさん
17/08/21 22:52:00.36 Ec7rLiDE0.net
ついに裁判か…
URLリンク(www.bengo4.com)

209:デフォルトの名無しさん
17/08/21 23:00:08.39 M1FJxIMj0.net
犯人扱いしておいて違ったら知らん顔という制度そのものが間違ってる
捜査協力した人には謝礼だろうが
にせ伝票で架空の謝礼費を着服なんかしてないで
やるべきことをやれっての!

210:デフォルトの名無しさん
17/08/21 23:01:02.71 M1FJxIMj0.net
架空の謝礼費を内部告発した仙波さん、えらい扱い受けたよね

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

212:デフォルトの名無しさん
17/08/21 23:12:01.91 M1FJxIMj0.net
たったの千円でも知らん顔とは次元が違う
謝礼の対象でないという取り決めがあるばかりに
警察官の横柄な態度を誘発しているんだよ

213:デフォルトの名無しさん
17/08/21 23:56:14.20 pHph3yYu0.net
>>208
たかだか3年に1度の更新がそんなにしんどいのかよ
追い続けるもクソもねえ
重箱の隅をつついても1冊程度にまとめられる量しかないのに

214:デフォルトの名無しさん
17/08/21 23:59:39.85 RPf0vXrN0.net
最近は生ポインタ撲滅されそうと聞いたが
今までのメソッドとかどうしてるん
混在してるだろ

215:デフォルトの名無しさん
17/08/22 00:35:41.09 CYQ4BtpJ0.net
生ポのオレオレ定義

216:デフォルトの名無しさん
17/08/22 00:59:49.41 2UJiCQ8C0.net
プロパティーいつ実装されるのやら
getsetくっそマンドクサ

217:デフォルトの名無しさん
17/08/22 01:03:51.34 NIldwpVs0.net
>>208
ほとんどが待ってた機能だぜ?
言語仕様だけでなくライブラリまで
おまえろくすっぽC++使ってねえだろ

218:デフォルトの名無しさん
17/08/22 02:32:46.66 Z58zmq8rp.net
全くわからない
雰囲気でc++を使っている

219:デフォルトの名無しさん
17/08/22 02:42:19.05 S2ZGAu0e0.net
VSのインテリセンスさんだって
いまだについていけず
ポンコツなエラー吐きまくってるわけだし
まだまだ大丈夫!

220:デフォルトの名無しさん
17/08/22 11:30:22.61 FcKiiis6a.net
>>210
>重箱の隅をつついても1冊程度にまとめられる量しかないのに
お前は本を出したことないから「1冊程度にまとめ」るのがどれだけ大変か分からないだけ

221:デフォルトの名無しさん
17/08/22 12:26:19.96 NIldwpVs0.net
そういうおまえはあるのか?

222:デフォルトの名無しさん
17/08/22 12:33:51.83 c0Kw6L5Fd.net
雑誌の編集長ですから

223:デフォルトの名無しさん
17/08/22 12:42:39.12 NIldwpVs0.net
それが本当なら恥ずかしい見積もりミスしてんぜおまえさん

224:デフォルトの名無しさん
17/08/22 12:43:40.67 aOcQtSkRH.net
>>217
本を読む、理解する側の分量の話をしてるんだから、まとめる側の労力が大きいかどうかはどうでもいいのでは?

225:デフォルトの名無しさん
17/08/22 15:03:21.13 d7ebk59r0.net
うん。するどい。

226:デフォルトの名無しさん
17/08/22 15:14:35.21 NIldwpVs0.net
雑誌ってエロ本か何かだろどーせ
技術系の雑誌やっててあーゆーバカ言っちゃ自殺もんの恥だぜ

227:デフォルトの名無しさん
17/08/22 17:02:21.79 w4zQmMtVr.net
>重箱の隅をつついても1冊程度にまとめられる量しかないのに
その一冊程度の更新にclang/gcc/vc++すべてが追従出来ていないというのに

228:デフォルトの名無しさん
17/08/22 17:10:08.87 hmTXL6wT0.net
>>205
情熱があるんだね,うらやましい‥
ガス欠状態から脱却した

229:デフォルトの名無しさん
17/08/22 17:20:14.07 NIldwpVs0.net
あいたた、本にまとめることも、実装とテストも、
とにかく量的な感覚がどこにもないのか

230:デフォルトの名無しさん
17/08/22 20:47:37.89 0/CmF7JC0.net
>>213
なら、publicにしちゃえばいいじゃんといってみる。
関数は振る舞いを書くべきだと思うし、変数の代わりに使うものじゃないと思うんだ。
あと、オブジェクト指向的にクラス変数は基本悪である、ということも考えるべきではないだろうか。

231:デフォルトの名無しさん
17/08/22 20:56:12.81 COEJtZVq0.net
>>227
横からだけど俺もそれに同意だ
余分な抽象化は単に工数が増えるだけ
しかしなんで"貪欲"な標準化委員会はプロパティは入れないんだろな

232:デフォルトの名無しさん
17/08/22 21:04:28.96 dxaP++Hz0.net
プロパティ導入したら、なんかいいことあるの?

233:デフォルトの名無しさん
17/08/22 21:13:44.10 CYQ4BtpJ0.net
>>227
クラス変数って何?

234:デフォルトの名無しさん
17/08/22 21:18:39.19 BxNeEQM2M.net
>>229
変数そのものがバッキングフィールドにカプセル化されることで、変数へのアクセスを必ずメソッド経由にできる

235:デフォルトの名無しさん
17/08/22 21:46:13.74 dxaP++Hz0.net
>>231
バッキングフィールドってメンバ変数をprivateにすれば今でも同じことできるんじゃね?

236:デフォルトの名無しさん
17/08/22 22:05:33.19 q1PzJh5lM.net
地味に嬉しいのは既存のパブリックメンバ変数にアクセスしてるコードを変更せずに処理を追加できること

237:デフォルトの名無しさん
17/08/22 22:30:23.44 uMve0U0S0.net
>>232
privateな変数はclass内からアクセスし放題だけど、バッキングフィールドはアクセッサ経由以外では絶対に触れない

238:デフォルトの名無しさん
17/08/22 22:34:14.35 ONlIaE3KM.net
c++erは厳しくしつけられているので、既存のpublicメンバがそもそも存在しない

239:デフォルトの名無しさん
17/08/22 22:35:33.43 uMve0U0S0.net
>>235
これは正しい


240:



241:デフォルトの名無しさん
17/08/22 22:36:16.75 ONlIaE3KM.net
おっと変数が抜けた

242:デフォルトの名無しさん
17/08/22 22:58:36.57 D8nSL4rC0.net
>>233
逆にそれが入らない原因なのでは?
軽い処理(public変数)なのか重いかもしれない処理(関数呼び出し)なのか、
見た目分かるようにしろってのがC++の流儀なんだろ。
俺はあった方がいいと思うけどね。
速度チューニングでこの手のマイクロマネージメントは全く意味がないから。

243:デフォルトの名無しさん
17/08/22 22:59:26.20 UHwuUWMX0.net
publicなメンバが一つもなかったらそもそもインスタンスを構築できないのでは…

244:デフォルトの名無しさん
17/08/22 23:02:04.62 UHwuUWMX0.net
>>238
メンバ変数の公開よりもアクセサーを設けてインライン展開してもらう方がC++の思想的に望ましいのでは…

245:239
17/08/22 23:02:59.41 UHwuUWMX0.net
スマンfriendを使えば良いのか…

246:デフォルトの名無しさん
17/08/22 23:13:00.45 zLx3ukqP0.net
>軽い処理(public変数)なのか重いかもしれない処理(関数呼び出し)なのか、
>見た目分かるようにしろってのがC++の流儀なんだろ。
C++って、それを判断するのが最も困難な部類の言語だと思うが。

247:デフォルトの名無しさん
17/08/22 23:20:46.21 NIldwpVs0.net
set/get用のデータメンバをちまちま用意するという
狭い考えに限定してきやがる思考妨害アイテムは無用

248:デフォルトの名無しさん
17/08/22 23:28:17.57 D8nSL4rC0.net
>>240
それはオブジェクト指向の理想。C++はそっちを向いていない。
>>242
いや簡単な部類の言語だ。

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

250:デフォルトの名無しさん
17/08/22 23:37:39.41 CYQ4BtpJ0.net
はいはい属性の抽象化属性の抽象化

251:デフォルトの名無しさん
17/08/22 23:39:19.18 CYQ4BtpJ0.net
>>245
0回

252:デフォルトの名無しさん
17/08/22 23:41:09.40 +MsUtw+Or.net
残念
0回または1回
因みに確認のためにムーブコンストラクターを追加すると0回に変わる

253:デフォルトの名無しさん
17/08/22 23:49:21.67 +MsUtw+Or.net
ということで、見た目で判断することは難しいのではないかと

254:デフォルトの名無しさん
17/08/23 00:09:19.34 CuDbJhab0.net
つかお前ら他言語使ってないだろ。
逆に言えばC++はその程度の精度での見積もりが出来る、ということなんだよ。
GC言語なんてGCがどこで走るか予測不能だから、実行時間の保証なんて全く出来ないし、
JIT言語はJIT側にその最適化が入っているかどうかで全く速度が変わってしまう。
つまりJava/C#/JavaScript等はその精度での見積もりはそもそも不可能なんだよ。
それとは別に、C++はその辺の仕組みがかなり複雑になっているのは認めるが、
それでも他言語と比べたら精度高く見積もれる方だよ。
getterを使った場合の問題は、それが見積もりにくくなることと、
あまりに多用するとどこで処理しているのか分かりにくくなる点だが、
まあ、適切に使っている限りはかなり使える機能だから、有った方が便利なんだけどね。
だから普通に考えれば「貪欲」なら当然入れるべきだし、
むしろラムダより先に入れるべきだが、入れないんだから何か引っかかってんでしょ多分。

255:デフォルトの名無しさん
17/08/23 00:16:20.92 Cw77BvbJ0.net
>>248


256:はちみつ餃子
17/08/23 02:11:33.58 wuLlGfOo0.net
getter がただの変数アクセスに被せてあるだけならまともなコンパイラなら最適化で消えるから速度的なペナルティはゼロだよ。

257:デフォルトの名無しさん
17/08/23 07:57:53.52 KTb6BBkr0.net
a = 1;
こんなコード片で、aの型がプリミティブ型かconstr(int)/operator=(int)を持つクラスなのかによって
実際に実行される処理内容が違う時点で
>軽い処理(public変数)なのか重いかもしれない処理(関数呼び出し)なのか、
>見た目分かるようにしろってのがC++の流儀なんだろ。
そんなものないとわかるだろう。
それににしても、そこからGCのオーバーヘッドに話が


258:飛ぶのはさすがにアクロバティックすぎるw 実実行時間の話なら、マルチスレッドの非リアルタイムOS上のプログラムはどれも正確な見積もりなどできん。



259:デフォルトの名無しさん
17/08/23 08:29:43.04 kvkWqUxa0.net
プリミティブ型? ああJava訛りね、C++用語はISO/IEC14882:2011 3.9.1に規定あるから
a = 1; がビルトインの代入か、トリビアルのoperator=か、
ユーザー定義のoperator=か、コンストラクタを呼び出すか、
コピーかムーブか、読めない人はC++には向いてないので無理しなくていいよ
要するにアセンブラ苦手なんだろ
マルチスレッドでもタイムクリティカルとか割り込みマスクとかあるしね
別にRTOSに限ったことじゃなく

260:デフォルトの名無しさん
17/08/23 11:11:46.28 KtaXakwM0.net
>>254
オメーは何が言いてえんだw
無意味に反論するんじゃねえよ
だからアホだって言われるんだよ

261:デフォルトの名無しさん
17/08/23 12:25:37.91 kvkWqUxa0.net
C++を批判するには
おまえ足んねーものが
多すぎつってんだよ

262:デフォルトの名無しさん
17/08/23 18:58:23.34 HlA0mWJs0.net
C++ 標準委員会のドワンゴ江添は、職務質問の手荷物検査を拒否したら、
警官10人に、現場で1時間半以上、拘束されたらしい
捜査でもない、任意の行政処分なのにw
それで東京都を訴えた

263:デフォルトの名無しさん
17/08/23 19:16:52.69 Rd2CDMDCM.net
>>254
> a = 1; がビルトインの代入か、トリビアルのoperator=か、
> ユーザー定義のoperator=か、コンストラクタを呼び出すか、
> コピーかムーブか、読めない人
それがわかったからと言ってなんになるんだ?
定義が常に読めるとは限らんだろ
> 要するにアセンブラ苦手なんだろ
逆アセしてでも読めとか言ってるなら単なる老害のアホ

264:デフォルトの名無しさん
17/08/23 22:25:37.71 kvkWqUxa0.net
>>258
ほーお、おまえさんは定義が読めないと判断できないのか
普通の人は宣言まで読めれば判断できるんだがw
逆汗読まないほうがバカガキ
バカガキからみて普通の人は老害というだけ

265:はちみつ餃子
17/08/24 00:52:21.94 MQSUCcmg0.net
そうか。

266:デフォルトの名無しさん
17/08/24 07:16:54.28 uGClSq1gM.net
老害だと思ってたら基地害だったと言うオチかよ w

267:デフォルトの名無しさん
17/08/24 07:27:59.03 kJk0ElnZ0.net
熱いなプロパティ
はやく標準化されればいいのに

268:デフォルトの名無しさん
17/08/24 10:04:23.28 VdsYrxcW0.net
いらね

269:デフォルトの名無しさん
17/08/24 11:04:12.57 h3Bt5TkH0.net
プロパティじゃないと出来ないことってなになの

270:デフォルトの名無しさん
17/08/24 11:21:59.10 ItTZCijS0.net
見た目だけじゃね?

271:デフォルトの名無しさん
17/08/24 11:45:56.43 VdsYrxcW0.net
IDEがやれば済むこと
わざわざ言語に入れる必要なし!

272:デフォルトの名無しさん
17/08/24 12:19:36.07 TzTK1OIfM.net
メンバ変数と関数の呼び出し統一化。
いらんというのは同意。

273:デフォルトの名無しさん
17/08/24 14:05:25.76 5zDLSTW70.net
オブジェクトの状態と操作の区別
関数でも代用できてしまうけど、変数のように扱えるってのが大きい
変数のような使い方で処理を挟める、これはPublicなメンバ変数では出来ない

274:デフォルトの名無しさん
17/08/24 14:20:51.13 VdsYrxcW0.net
できるよバーカ
C++98より前、ARM C++の時代から

275:デフォルトの名無しさん
17/08/24 17:42:35.34 hLrI3YRl0.net
たしかに、operator()とoperator=があればできそうではある

276:デフォルトの名無しさん
17/08/24 18:28:45.68 dK94ZXMf0.net
>>269
どうやって?コードよろ

277:デフォルトの名無しさん
17/08/24 18:48:22.87 hLrI3YRl0.net
ARMだとテンプレート�


278:ネいから、メンバ変数にしたい型ごとにラッパークラス作らないいけないから大変そう



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

280:デフォルトの名無しさん
17/08/24 18:54:42.67 4nWMkj3x0.net
訂正
×:、(*3)の時点でできる
○:、(*3)の時点でできている

281:デフォルトの名無しさん
17/08/24 19:23:39.06 hLrI3YRl0.net
ARMテンプレートあったわ。失礼

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

283:デフォルトの名無しさん
17/08/24 20:11:18.34 VdsYrxcW0.net
>>272
アフォwww
template と try catch それと typeid はARMで新設されたんだよ
おまえ多重継承だけだと思ってんだろ

284:デフォルトの名無しさん
17/08/24 20:14:15.85 G5OnAPYO0.net
>>273
*1の時点であるよ

285:デフォルトの名無しさん
17/08/24 20:17:27.08 LSCbdyW40.net
>>273
(*2)の時点で 'i' があった場所に置かれる、
と素朴に思ってた

286:デフォルトの名無しさん
17/08/24 20:39:47.98 oFKMCsHnd.net
🐒

287:デフォルトの名無しさん
17/08/24 21:28:30.26 YTCHjYE8M.net
>>273
(*2) の時点で新規領域に abcdefgh をコピーしてその後に \0 を置く

288:デフォルトの名無しさん
17/08/24 21:29:59.02 G5OnAPYO0.net
新規領域もコピーもないでしょ

289:デフォルトの名無しさん
17/08/24 21:33:49.00 4nWMkj3x0.net
コピーが生じないんだとしたら、
std::string::size()はいつも1バイトだけサバを読んだ値を返すってこと?

290:デフォルトの名無しさん
17/08/24 21:34:29.37 G5OnAPYO0.net
せやで

291:デフォルトの名無しさん
17/08/24 21:35:38.05 4nWMkj3x0.net
なのか

292:270
17/08/24 22:02:35.81 oFKMCsHnd.net
プロパティはこれじゃアカンの?
URLリンク(wandbox.org)

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

294:デフォルトの名無しさん
17/08/24 22:15:25.24 4nWMkj3x0.net
データメンバ直アクセスでなくてpropertyにすると良いことがあるというのは
マーシャリングを裏で勝手にやって来る点

295:デフォルトの名無しさん
17/08/24 22:28:47.63 TzTK1OIfM.net
メンバ関数でいいじゃん。ということだろ。

296:デフォルトの名無しさん
17/08/24 22:34:36.32 4nWMkj3x0.net
  |
  | ('A`) .oO(名前考えるのマンドクセ
 / ̄ノ( ヘヘ ̄ ̄ ̄


297:デフォルトの名無しさん
17/08/24 22:54:26.67 TzTK1OIfM.net
0変数:getter, 1変数:setter, 尻尾付き:メンバ変数
とかは良くやるな

298:デフォルトの名無しさん
17/08/25 00:06:28.73 w8QRZZ7K0.net
>>287
それ以前のVC++/CLIからサポートされてる。
>>286
駄目。
propertyは新規機能ではなく、見た目だけの問題だから、
逆に言えば、見た目がpropertyで書いた時より分かりにくいようなら駄目なんだ。
ほぼ同じ事はラムダとファンクタでもそうだけど。

299:デフォルトの名無しさん
17/08/25 00:10:22.03 hVYhQQjP0.net
>>268
オペレーターのオーバーライドとにたような感じになると思うけど、その挟み込む処理の重さが隠蔽されてしまうという問題があって、一般には、非推奨だとおもうのだけど今はかわってきてるのかね?
たとえば、代入しているだけだとおもったら、実


300:はファイルアクセスまでしてたとかかな。



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

302:デフォルトの名無しさん
17/08/25 00:49:30.90 w8QRZZ7K0.net
>>294
K&Rというか生Cが嫌っている理由は「余計なことをするな」だ。
適切に使っている限りC++は不透明ではない。それでも彼等は嫌うだろ。
>>293
横だが結局は使い方次第だよ。C++はいくらでも読みにくいコードを書けるから。
ただ、きちんと使えば有用な機能だよ。
演算子オーバーロードについてはgoogleは「慎重にやれ」だね。
URLリンク(ttsuki.github.io)
どうでもいいが、何故演算子は「オーバーロード」なんだ?
言われてみれば「オーバーライド」の方が適切な気がする。

303:デフォルトの名無しさん
17/08/25 02:45:57.11 g+9HiqWa0.net
>>293
それは言語機能の問題じゃなく実装の問題じゃない?
propertyってメンバ変数がどうなっているかに関わらずオブジェクトの状態を表すもの
言語機能の話をしているのであって
既存の機能をやりくりして似たことは出来るって言われてもって感じ

304:デフォルトの名無しさん
17/08/25 04:18:10.56 4FaT6XJy0.net
「処理の重さを隠蔽するな」なんて思想がそもそもあるのかね?

305:デフォルトの名無しさん
17/08/25 05:23:39.04 RGmsOxnq0.net
>>295
オーバーロードは新設で、たいていのoperatorがこっち
オーバーライドは変更で、代入やnewが本当はこっち

306:デフォルトの名無しさん
17/08/25 06:02:53.19 sj2/Y28y0.net
property ってパブリック変数とどう違うの?

307:デフォルトの名無しさん
17/08/25 06:53:00.86 s9vD7wq8M.net
>>294
> >258理論によれば、老害じゃなければ一目で処理の重さがわかるんじゃね
どこにも「わかる」って書いてないのにどんなアホ解釈したらそんな結論になるんだよ w

308:デフォルトの名無しさん
17/08/25 06:55:30.90 s9vD7wq8M.net
>>295
> どうでもいいが、何故演算子は「オーバーロード」なんだ?
> 言われてみれば「オーバーライド」の方が適切な気がする。
オーバーロードとオーバーライドの違いもわかってないの?
まあ>>298も色々おかしいが

309:デフォルトの名無しさん
17/08/25 07:02:27.63 g3SOHHgl0.net
オーバーロードってモモンガ

310:デフォルトの名無しさん
17/08/25 07:24:58.66 crVCqQ4J0.net
URLリンク(ideone.com)
URLリンク(qiita.com)
なんか通った。プロパティですよ?
こんなかんじでいいのかな?
何で動いてるのかよくわからん。Orz

311:デフォルトの名無しさん
17/08/25 07:49:18.88 4dE2HuPo0.net
>>300
>>254>>258の流れをa=1;の実行速度が一目見てわかるのかどうかという問題提起の意味に解釈すた、
パフォーマンスを読みきるには何の言語であれボトルネック(ループ回数×1回の実行時間が最大の処理)の特定が必要だが
C++は演算子のオーバーロードとかインライン展開とかテンプレートがそれ以前の障害として立ちはだかる点がCより重症
パフォーマンスを上げるための手段を豊富に提供してプログラムを書く人の選択に委ねているみたいな?
つまりC++はソースコードのROM専はお断りな言語
>>295
スマン言いたかったのはK&Rではなくてカーニハンとロブ・パイクやったorz
『プログラミング作法』の第7章「性能」のところにC++の特性について(CやJavaとの比較が)


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



313:デフォルトの名無しさん
17/08/25 08:42:44.14 XasQqnRJ0.net
>>298
いや、new もオーバーロードでしょ。

314:デフォルトの名無しさん
17/08/25 08:51:39.36 crVCqQ4J0.net
newはオペレーターじゃないの?

315:デフォルトの名無しさん
17/08/25 08:53:26.21 mWX/padLd.net
いやいや、newは新しいって意味

316:デフォルトの名無しさん
17/08/25 09:08:17.73 crVCqQ4J0.net
新しくメモリのようなものを持って来るってことでしょ。
言語上ではオペレーターじゃないの?

317:デフォルトの名無しさん
17/08/25 09:09:11.80 mWX/padLd.net
オペレーターかどうかの議論なんて誰もしてない

318:デフォルトの名無しさん
17/08/25 09:11:08.77 crVCqQ4J0.net
オペレータはオーバーロードするもんじゃね?
まぁいいか。

319:デフォルトの名無しさん
17/08/25 09:52:04.11 RGmsOxnq0.net
>>305
「本当は」って書いてるだろ
# 流れを読んでない近視眼的なアフォどもは無視

320:デフォルトの名無しさん
17/08/25 09:54:07.34 mWX/padLd.net
「本当は」とは?
C++の規格?
本来の英語の意味?

321:デフォルトの名無しさん
17/08/25 09:55:05.21 mWX/padLd.net
突然「本当は」とか書いても、どういう意味でどういう意図で書いたかなんてわからんぞ

322:デフォルトの名無しさん
17/08/25 10:21:51.52 RGmsOxnq0.net
わかんなくていい
バカ以外とさえ話せれば

323:デフォルトの名無しさん
17/08/25 12:45:56.08 s9vD7wq8M.net
>>304
ごちゃごちゃ書いてるけどどこから
> 老害じゃなければ一目で処理の重さがわかるんじゃね
が出てくるのかさっぱりわからん

324:デフォルトの名無しさん
17/08/25 12:58:22.38 BrjL74izM.net
>>311
いや、グローバルのオペレーターに対して、型特化を新設するんだから、newも代入も、オーバーロードでいいんだよ。って話。
c++の実現方法(クラス内定義)でイメージしちゃうから、オーバーライドと思っちゃう気持ちはわかるけど。

325:デフォルトの名無しさん
17/08/25 13:22:21.09 2fWpITWD0.net
operatorを仮想関数にしたことないや

326:はちみつ餃子
17/08/25 13:27:32.63 a70Vb5yP0.net
そうか。

327:デフォルトの名無しさん
17/08/25 14:12:03.69 RGmsOxnq0.net
::operator newは新設か?
ユーザー定義するとビルトインを置き換えるだろ

328:デフォルトの名無しさん
17/08/25 14:14:35.88 11RxMW0L0.net
>>319
だからオーバーライドだというの?

329:デフォルトの名無しさん
17/08/25 21:42:16.87 0c3f6Usc0.net
そういえば昔C++のoperator批判を見たなと思って探してみたらこれだった。
URLリンク(local.joelonsoftware.com)

330:デフォルトの名無しさん
17/08/25 22:11:25.23 IbGqUCQq0.net
operatorをオーバーライドしてる人いるみたいだけど、operatorを仮想関数にするのってどういう時なの?

331:片山博文MZ
17/08/25 22:17:04.37 M7y+0IYNd.net
>>322
ポインタから多態を利用じゃねーの?

332:片山博文MZ
17/08/25 22:28:47.46 M7y+0IYNd.net
ポインタじゃなくてC++参照ね。

333:デフォルトの名無しさん
17/08/25 22:37:18.66 IbGqUCQq0.net
>>323
具体的には何のoperatorをオーバーライドしてるの?

334:デフォルトの名無しさん
17/08/25 22:39:23.28 11RxMW0L0.net
遺伝子

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

336:デフォルトの名無しさん
17/08/25 22:47:00.20 g+9HiqWa0.net
男はオーバーロード
女はオーバーライド

337:デフォルトの名無しさん
17/08/25 23:16:33.27 11RxMW0L0.net
>>327
それってダブルディスパッチの問題起きないの?

338:片山博文MZ
17/08/25 23:29:12.56 M7y+0IYNd.net
>>329
お馬鹿で済みません。

339:デフォルトの名無しさん
17/08/25 23:44:46.18 11RxMW0L0.net


340:デフォルトの名無しさん
17/08/25 23:58:05.92 w8QRZZ7K0.net
よく分からん揉め方をしているが、
俺は>>298の表現は極めて的確で分かりやすいと思うぞ。
俺はあれで納得だ。サンクス。一応言っておく。

341:デフォルトの名無しさん
17/08/26 00:07:55.23 NVd9gXan0.net
>>327
RealクラスとComplexクラスを比較した時の振る舞いが直感的じゃなくね?

342:デフォルトの名無しさん
17/08/26 00:16:33.84 m69mKCvsr.net
はてoverloadとoverrideは排他的な存在だっただろうか
ちなみに規格で::newはreplace, displace
overrideとは言わない

343:片山博文MZ
17/08/26 00:17:51.21 HPL6ZAk0d.net
>>333
その場合はオーバーロードよりも強力なダブルディスパッチを使うのが妥当だった。すまね。

344:デフォルトの名無しさん
17/08/26 00:20:52.21 kchnKiPS0.net
まだおまいらオーバーなんちゃらで言い争っているのかw

345:片山博文MZ
17/08/26 00:39:36.17 HPL6ZAk0d.net
URLリンク(qiita.com)
これを貼るだけだったな。

346:デフォルトの名無しさん
17/08/26 03:28:35.80 KpMB1a9f0.net
>>332
operator newって仮想関数にできなくない? なんでオーバーライドが的確なの?

347:デフォルトの名無しさん
17/08/26 08:56:30.09 jcvKb5O50.net
>>336
言い争ってなんかいねえぜ
一部のアフォどもをこっちはスルーしてるんで争いになってない

348:デフォルトの名無しさん
17/08/26 17:00:12.26 dtKp7Pu80.net
>>334
排他的くねなぜならシグネチャが変わらないオーバーロードは無いしシグネチャが変わるオーバーライドもこれまた無いからだ

349:デフォルトの名無しさん
17/08/26 17:19:10.37 XR3UemNVr.net
そうか?
URLリンク(ideone.com)
これはオーバーロードかつオーバーライドだと思うが
オーバーロードは特定の関数について言及しているのではなく同一スコープに同一の名前が複数存在する状態を指すものだと思っとりました

350:デフォルトの名無しさん
17/08/26 18:47:41.02 O53zOlu10.net
>>341
それは
上の方はオーバーライド

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

351:デフォルトの名無しさん
17/08/26 19:44:51.20 dtKp7Pu80.net
>>342
あー左様かvoid B::f(int)のオーバーライドとf()のオーバーロードが同時にありえるのか、
完全に排他的(背反)というわけでもないな
ただしそれぞれ独立な概念とは言える
なぜなら下記の4通り全ての組み合わせが有り得、互いの成立要件に他方の成立の真偽が関係しないだから、
1. オーバーライド∧オーバーロード
2. オーバーライド∧¬オーバーロード
3. ¬オーバーライド∧オーバーロード
4. ¬オーバーライド∧¬オーバーロード

352:デフォルトの名無しさん
17/08/26 19:47:02.66 dtKp7Pu80.net
訂正
△: ただしそれぞれ独立な概念とは言える
○: ただしそれならそれでそれぞれ独立な概念とは言える

353:デフォルトの名無しさん
17/08/26 23:26:52.66 rkE5GYva0.net
同じ名前の関数で、引数が同じならオーバーライド、 引数が違えばオーバーロードだよ?
そんなに難しい話じゃないはずだった気がしたんだけどな。

354:デフォルトの名無しさん
17/08/26 23:42:30.55 eHXsO5oX0.net
>>345
usual な operator new は、いつも
void* operator new(std::size_t);
というシグネチャなのに、なぜオーバロードなのか
という話題だったのでは?

355:デフォルトの名無しさん
17/08/27 00:10:24.07 NCmIfXRWr.net
「同じ名前の関数で、引数が同じならオーバーライド、 引数が違えばオーバーロードだよ?」
これまた珍説を

356:
17/08/27 00:50:06.39 Cp6PBSjn0.net
>>347
>引数が違えばオーバーロードだよ?
演算子のオーバーロード

357:デフォルトの名無しさん
17/08/27 00:54:36.33 DagGpBhC0.net
おまいらのアタマがオーバーフロー

358:デフォルトの名無しさん
17/08/27 02:06:53.19 99717IEt0.net
みんな人に説明できるだけのまともな言語能力を備えてから来てくれ
あとクソみたいな反論をするのもやめよう

359:デフォルトの名無しさん
17/08/27 07:10:35.78 NCmIfXRWr.net
>>348
それは>>298>>319を読んだ上で物申してるのかね

360:デフォルトの名無しさん
17/08/27 10:16:57.94 FD5yZ+sq0.net
2010年にも同じような話あったみたいね
URLリンク(cpplover.blogspot.jp)

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

362:はちみつ餃子
17/08/27 15:08:55.59 hmah67i90.net
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 性は無意味になる。

363:デフォルトの名無しさん
17/08/27 15:29:34.75 nap9vlyD0.net
>>354
>寿命が尽きたオブジェクトにはアクセスは許されないから
>もはや logical も bitwise も関係なく const 性は無意味になる。
これはだいたいワカタ
前半はわからん
bitwise const でないオブジェクトがROMに割り付けられたり、とか、
bitwise const でないオブジェクトがmemcpy()的手段で同じビットパターンに繰り返し上書きされるみたいな
処理があったりするとbitwise constでないことは致命的だが
それ以外のケースではconstといいつつクラス内部ではmutableな扱いであっても全く実害無いんじゃ…
ていうかそもそもC++の非PODオブジェクトに対するconstはbitwise constなのかかなり疑問が、、

364:はちみつ餃子
17/08/27 16:21:07.86 hmah67i90.net
>>355
logical const であれば性質として充分だよ。
だけど、それをコンパイラがチェックすることは出来ないから、
原則としては bitwise const を要求して、
それがちゃんとできてなけりゃエラーも出す。
だけど、 bitwise でなくても logical に出来る場面では
プログラマの責任でやるよっていうのを mutable キーワードで表すってわけ。

365:デフォルトの名無しさん
17/08/27 16:23:29.96 Pcpci17F0.net
ルールを増やせば増やすほど使ってもらえない。

366:デフォルトの名無しさん
17/08/27 16:50:02.45 99717IEt0.net
しかし現実には使われているもよう

367:デフォルトの名無しさん
17/08/27 16:52:16.64 OhTIHz5/0.net
おい、mutableなんてキーワード初めて知ったぞw
ググってみたらC++11から導入されてたんだな知らんかった、、、

368:デフォルトの名無しさん
17/08/27 16:55:16.46 7+G8dT33M.net
またまたご冗談を

369:はちみつ餃子
17/08/27 17:26:13.10 hmah67i90.net
>>359
ANSI で規格化された最初から有ったがな (´・ω・`)

370:デフォルトの名無しさん
17/08/27 19:19:01.73 +rBIMmXP0.net
>>359
いやいやおいおい…

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

372:デフォルトの名無しさん
17/08/27 23:06:36.65 Pcpci17F0.net
どんどんキーワードが増えるのは思いつきで仕様を決めてるからだ。
無能SEの下のプロジェクトではよくあること。
50年は仕様を追加しないつもりで仕様を決めてほしい。

373:はちみつ餃子
17/08/27 23:35:20.73 hmah67i90.net
コンピュータを取り巻く事情は予想の斜め上をいく形でどんどん変わるのに言語だけのんびりしとれるかいな

374:デフォルトの名無しさん
17/08/28 00:12:36.48 OtmMiMVk0.net
永久に仕様が追加されない言語なんてたくさんあるから好きなのを使いなよ
機能が必要になった背景やそれを追加することが適当だという根拠まで知ってろとは言わないからさ

375:デフォルトの名無しさん
17/08/28 00:24:42.42 JtlNpsV60.net
雑魚に上から言われる筋合いはない。そんな態度だから囲まれて職質されるんだよ。

376:デフォルトの名無しさん
17/08/28 00:26:53.59 GiFa6ZsP0.net
つ、追加しなくても1.5年待てば倍速くなるもん…!
ていうかメモリバリア周りの扱いが未だに規格化されていないのは言語としてはお寒い状況だといわざるおえない
ゆくゆくはOpenMPIを正式に取り込んでキャッシュスヌープ無しのメニーコア環境でも
最高のパフォーマンスを発揮できるだけの選択肢をプログラマに提示し、
さらにはGPGPU対応もしてホスイ、

377:デフォルトの名無しさん
17/08/28 00:29:36.83 GiFa6ZsP0.net
スマンOpenMPIはOpenMPのつもりで言った!

378:デフォルトの名無しさん
17/08/28 01:19:26.30 83bJD8zl0.net
openmpみたいなマクロまみれよりtbbのほうが好き

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

380:デフォルトの名無しさん
17/08/28 01:31:42.56 OtmMiMVk0.net
後から来た輩(ビャーネ・ストラウストラップ)

381:デフォルトの名無しさん
17/08/28 01:37:29.69 JtlNpsV60.net
CとC++が同じ言語と思ってるとは、さすが見込みどおりの雑魚。

382:デフォルトの名無しさん
17/08/28 02:11:44.25 nC18rNgy0.net
実務でコード書く人=Windowフォームにボタンを乗せる仕事の人

383:はちみつ餃子
17/08/28 03:06:17.85 yPLR2tUq0.net
ライブラリの蓄積もあるからさ。 負債の蓄積とのバランスだよねー。
ときどき Go とか Rust とかみたいなのが出てきて一新してくれりゃいいんだけど、
C++ はともかく C はいつまでも死なない気がする。

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

385:デフォルトの名無しさん
17/08/28 07:36


386::18.26 ID:GiFa6ZsP0.net



387:デフォルトの名無しさん
17/08/28 07:36:46.75 96+DvSIX0.net
ウニファイドコールシンタックスを直ちに入れるのです。
コードサジェストが爆発してもいいじゃない。

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

389:デフォルトの名無しさん
17/08/28 07:58:00.50 GiFa6ZsP0.net
中間言語とか3番地コードと条件判断とgotoで必要にしてほぼ十分なのでは…

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

391:デフォルトの名無しさん
17/08/28 12:49:34.85 0HhHgrwNM.net
ちょっとしたコーディングミスで、以下の簡易コードように書いてしまって、ハマったのですが、コンパイルエラーにならなかった事に驚きました。
string a(何らかの文字列);
string s = s.replace(置換指示); //a.replace() と書こうとした。
コピーコンストラクトの右辺に、構築中(?)の自分自身を使ってしまったと言う事なのですが、これは規格上合法なのでしょうか?

392:デフォルトの名無しさん
17/08/28 12:59:59.78 0HhHgrwNM.net
↑のサンプル貼っておきます。
URLリンク(ideone.com)

393:デフォルトの名無しさん
17/08/28 13:04:19.26 96+DvSIX0.net
x^=x でゼロになるんだっけ。
一応昔からある文法だけど。

394:デフォルトの名無しさん
17/08/28 16:57:17.16 KK7lC/68d.net
>>384
それの使い道がよくわからん
コンパイラと環境によっては x=0 より速かったりとか?
即値は全て名前を付けなきゃいけないとかいう糞コーディングルールの回避とか?
volatileをつけて、
ダミーリードと0クリアを1文で書けるとか?
思い付くのはこのくらい

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

396:デフォルトの名無しさん
17/08/28 17:43:39.28 +dyqlMtL0.net
>>385
アセンブラでよく使う xor eax,eax を逆コンパイルするとアレになる

397:デフォルトの名無しさん
17/08/28 17:52:50.38 eeKFZJ460.net
のっぷぁ

398:デフォルトの名無しさん
17/08/28 17:54:52.47 eeKFZJ460.net
or eax,eax だろバカチン

399:片山博文MZ
17/08/28 18:02:16.04 HJX32+mcd.net
xor eax,eaxがゼロクリアで、
or eax,eaxが何もしない。

400:デフォルトの名無しさん
17/08/28 18:08:57.91 Wq6HqE7w0.net
さすがにPC系コンパイラで
0クリアを最適化しないのは無いかと
xor eax, eax は0イディオムとか言って、
普通のxorとは微妙に扱いが異なる
昔は sub ax, axより xor ax, axの方が微妙に速かったりした
今はフラグ以外は同じ
>>390
何もしないわけじやない
ちゃんとフラグが変わる

401:デフォルトの名無しさん
17/08/28 18:38:50.00 7lbHEj3b0.net
URLリンク(www.st.rim.or.jp)
昔とはこういうスゴイ編み物の時代ですかね

402:デフォルトの名無しさん
17/08/28 19:05:01.12 Wq6HqE7w0.net
だね

403:片山博文MZ
17/08/28 19:10:04.94 HJX32+mcd.net
編み物だって意味のあるつまら


404:ないことの積み重ねで実現されている。 プログラミングだって多分同じ。



405:デフォルトの名無しさん
17/08/28 19:36:30.92 KK7lC/68d.net
コルモゴロフの最小プログラムに対しても同じ事が言える?

406:デフォルトの名無しさん
17/08/28 19:37:58.17 y0vE8H3MM.net
>>382
質問を変えると、
何でコンパイルエラーにしてくれないんだろう?
ってところが気になっています。

407:デフォルトの名無しさん
17/08/28 19:41:20.09 MWmJNebXr.net
>>382
3.3.2/1には反しないが3.8/6的にはだめだろう(たぶん)
未定義動作なのでコンパイルエラーになることは要求されていない

408:デフォルトの名無しさん
17/08/28 19:41:46.31 KK7lC/68d.net
別のsが定義されてるとか

409:デフォルトの名無しさん
17/08/28 19:58:41.88 rn9GWLpv0.net
>>391
それは x86/インテル方言なだけでは?
普通のアーキテクチャならばロードだけでフラグが変わるもんですキッパリ

410:デフォルトの名無しさん
17/08/28 20:21:02.23 KK7lC/68d.net
x86の話をしてるわけだけど

411:デフォルトの名無しさん
17/08/28 20:22:04.01 KK7lC/68d.net
eaxなんてレジスタ、他にあるか?

412:デフォルトの名無しさん
17/08/28 20:48:55.97 GiFa6ZsP0.net
inline void zero_clear(int& x) { x ^= x; }

413:デフォルトの名無しさん
17/08/28 20:55:31.76 GiFa6ZsP0.net
3E AF

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

415:デフォルトの名無しさん
17/08/28 22:33:21.77 Wq6HqE7w0.net
intel公式のドキュメントに書いてあるレベルだから
普通のコンパイラは当然そういうコードを吐くと思うよ

416:デフォルトの名無しさん
17/08/29 00:27:36.33 AHYNkT+D0.net
OpenMPIを用いたプロセス並列コードのプロファイルを取りたいんですが、
gprofだとテンプレートがごちゃごちゃしててすごく見にくいです。
何か勧めなフリーのプロファイラはないでしょうか?


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch