[表示 : 全て 最新50 1-99 101- 201- 301- 2ch.scのread.cgiへ]
Update time : 03/29 07:39 / Filesize : 79 KB / Number-of Response : 353
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part116



1 名前:デフォルトの名無しさん mailto:sage [2015/02/24(火) 22:01:58.64 ID:13AsGslF.net]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part115
peace.2ch.net/test/read.cgi/tech/1418877984/

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

次期規格C++1yはこちら
C++14/C++1z 20
peace.2ch.net/test/read.cgi/tech/1410382924/

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

2 名前:デフォルトの名無しさん mailto:sage [2015/02/24(火) 22:03:06.67 ID:13AsGslF.net]
STLつかうと一気に実行ファイルサイズが10倍に?!

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

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

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

#include <stdafx.h>
後死ね。

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

3 名前:デフォルトの名無しさん mailto:sage [2015/02/24(火) 22:04:15.37 ID:13AsGslF.net]
----テンプレここまで----

4 名前:デフォルトの名無しさん mailto:sage [2015/02/25(水) 19:25:45.94 ID:mKx2rGPv.net]
いちお月様ー貴様

5 名前:デフォルトの名無しさん mailto:sage [2015/02/26(木) 20:19:51.49 ID:tVqEyAds.net]
#endif

6 名前:デフォルトの名無しさん mailto:sage [2015/02/26(木) 21:05:38.68 ID:MirCIX3E.net]
#ifndef NDEBUG
>>1さんありがとうごじます
#endif

7 名前:デフォルトの名無しさん mailto:sage [2015/02/28(土) 12:34:02.28 ID:fHGpMEcn.net]
お前らのせいで template template parameters のデフォルト引数が書けなくて
猥らにも未使用な属性を露出するはめになっちゃたじゃねぇかorz

8 名前:デフォルトの名無しさん mailto:sage [2015/02/28(土) 12:41:42.34 ID:a/G4RwQW.net]
>>7
どこのこと?
template<template<typename T> class a = ★> struct X;
template<template<typename T=★> class a> struct X;

9 名前:デフォルトの名無しさん [2015/03/02(月) 14:48:17.71 ID:+sP2klOG.net]
非名前空間にある関数と同じ名前を
もつインスタンス関数を持つクラス内で
前者の関数をコールするためには
どのようにしますか?

10 名前:デフォルトの名無しさん mailto:sage [2015/03/02(月) 14:58:01.57 ID:vmAwrSSK.net]
::func



11 名前:デフォルトの名無しさん mailto:sage [2015/03/02(月) 15:45:16.86 ID:hivCPt76.net]
#define private public

12 名前:デフォルトの名無しさん [2015/03/02(月) 16:33:55.97 ID:+sP2klOG.net]
>>10
ありがとうございま
自分の位置から相対的に何個上とかは無理なんですね。
した

13 名前:デフォルトの名無しさん [2015/03/02(月) 22:45:25.74 ID:+22kW03l.net]
インナークラスが、アウタークラスに、勝手には依存できないのさ

14 名前:デフォルトの名無しさん [2015/03/03(火) 07:50:54.20 ID:9xo9xj4t.net]
値渡しのconstはオーバーロードという名のクライアントの要求にあるわけじゃないですか。
しからば仮引数をconstにして定数演算の最適化に利用したいライブラリー開発者の
要求に答えることができませんね。

15 名前:デフォルトの名無しさん mailto:sage [2015/03/03(火) 07:57:57.25 ID:ed5OtmA4.net]
日本語でおk

16 名前:デフォルトの名無しさん mailto:sage [2015/03/03(火) 12:52:29.95 ID:0H9O2eaz.net]
薄気味の悪い文章だ。

17 名前:560 mailto:sage [2015/03/03(火) 20:26:26.70 ID:2pykA5xk.net]
NGW: じゃないですか

18 名前:デフォルトの名無しさん mailto:sage [2015/03/04(水) 10:28:20.17 ID:eysaIXjg.net]
>>14
その const はオーバーロードに影響しないから、宣言では const 無しにしといて
定義で勝手に const つけていいんだよ。

19 名前:デフォルトの名無しさん mailto:sage [2015/03/04(水) 13:40:22.05 ID:sEOnXYVe.net]
関数ローカルのPOD変数にconstつけるかつけないかで最適化に影響するようなコンパイラなんてあるん?
めんどくせえな

20 名前:デフォルトの名無しさん [2015/03/04(水) 13:53:30.81 ID:l8MsMF4o.net]
constつけられる場所には全てつけてるよ
すごく安心する^^



21 名前:デフォルトの名無しさん mailto:sage [2015/03/04(水) 16:10:12.02 ID:dDcQZ4yU.net]
>>20
return には付けないよな?

22 名前:デフォルトの名無しさん [2015/03/05(木) 10:19:45.44 ID:dDo/Jz4C.net]
今さら変えられんが、デフォがconstであるべきだったな

23 名前:デフォルトの名無しさん mailto:sage [2015/03/05(木) 10:36:20.48 ID:h/XJ3WoQ.net]
llvmかよ

24 名前:デフォルトの名無しさん mailto:sage [2015/03/05(木) 20:20:43.01 ID:gRAg7Udc.net]
const int f();
const unko g();

decltype(g())はconst unkoだけど
decltype(f())がconst intでなくintになる糞仕様を何とかして欲しい

25 名前:デフォルトの名無しさん mailto:sage [2015/03/05(木) 20:21:32.63 ID:1Acz44Yd.net]
decltype((f()))なら?

26 名前:デフォルトの名無しさん mailto:sage [2015/03/05(木) 20:37:31.42 ID:Z1VFzrPe.net]
関数呼び出し式はもともとid式ではないなら、
カッコ増やしても変わらないはず。

27 名前:デフォルトの名無しさん mailto:sage [2015/03/05(木) 21:01:30.77 ID:6vcov9qd.net]
decltypeはなんでこんな糞仕様になってしまったのか・・・

28 名前:デフォルトの名無しさん [2015/03/06(金) 15:15:40.83 ID:waWP92ey.net]
auto i = 5;
これで i が const int になったら、それこそ糞だろ

29 名前:デフォルトの名無しさん mailto:sage [2015/03/06(金) 18:42:23.03 ID:Ff67jPYI.net]
出た
「配列がconstポインター」と同等レベルの初心者

30 名前:デフォルトの名無しさん [2015/03/06(金) 20:09:28.66 ID:waWP92ey.net]
言語障害か、こいつ



31 名前:デフォルトの名無しさん mailto:sage [2015/03/07(土) 05:03:12.99 ID:95kHk/4r.net]
decltypeの糞仕様と基本型のconstの特別扱いの糞の両方がある。
>>24はdecltypeの問題ではないな

32 名前:デフォルトの名無しさん mailto:sage [2015/03/07(土) 16:23:52.47 ID:ZJ5WVqXi.net]
>>31 「基本型のconstの特別扱い」ってなぁに?

33 名前:デフォルトの名無しさん mailto:sage [2015/03/07(土) 20:18:27.72 ID:lexZIoDv.net]
基本型の特別扱いなどというものは存在しない
非クラス型に限ってprvalueはconstが剥がれるというルールが有るだけだ

34 名前:デフォルトの名無しさん mailto:sage [2015/03/07(土) 20:22:10.62 ID:3PLc8m1Q.net]
const char*か
しかしとんでもねえルールだ

35 名前:デフォルトの名無しさん mailto:sage [2015/03/07(土) 20:40:48.24 ID:kgoMpLop.net]
c++11のenumはprimitiveか否か

36 名前:デフォルトの名無しさん mailto:sage [2015/03/07(土) 21:05:31.66 ID:URfbPLhP.net]
まずそのprimitiveとやらの定義を訊こうか

37 名前:デフォルトの名無しさん mailto:sage [2015/03/08(日) 21:49:24.84 ID:U2m6dpOF.net]
プリミティブ=JAVAドカタ発見器

38 名前:デフォルトの名無しさん [2015/03/09(月) 09:01:55.53 ID:C5HzDcEX.net]
rubyはプリミティブが無い
Javaはプリミティブの配列は0に初期化される
C++はプリミティブがconstがはがれる

39 名前:デフォルトの名無しさん [2015/03/09(月) 09:36:27.85 ID:PKrvJtFu.net]
fundamental types

40 名前:デフォルトの名無しさん mailto:sage [2015/03/09(月) 23:03:22.24 ID:1gPhoGUH.net]
C++にはプリミティブというものが無い
>>38はJAVAドカタに相違ない



41 名前:デフォルトの名無しさん mailto:sage [2015/03/10(火) 01:36:49.84 ID:UgYMz3L+.net]
何をしたときに「constがはがれる」なんて動作するの?

42 名前:デフォルトの名無しさん mailto:sage [2015/03/10(火) 06:44:41.25 ID:zWP2NH7t.net]
どう見ても勘違い君だから触るなよ...

43 名前:デフォルトの名無しさん mailto:sage [2015/03/10(火) 07:58:07.67 ID:kBEgSjWh.net]
>>24にかかれてるだろタコ

44 名前:デフォルトの名無しさん mailto:sage [2015/03/10(火) 12:15:36.74 ID:UgYMz3L+.net]
n3936 の 7.1.6.2 p4 で decltype の示す型が規定されているけど、
「constがはがれる」なんてルールは見当たらないよ。

45 名前:デフォルトの名無しさん mailto:sage [2015/03/10(火) 18:25:09.32 ID:W9aR9hFL.net]
>>44
decltypeの問題ではないよ
Clause 5

46 名前:デフォルトの名無しさん mailto:sage [2015/03/10(火) 22:07:24.79 ID:dg/tj86w.net]
>>44
ISO/IEC 14882:2014 5段落6
『If a prvalue initially has the type“cv T,”where T is a cv-unqualified non-class, non-array type, the type of the expression is adjusted to T prior to any further analysis.』

↓コンパイルエラーに注目
ideone.com/sEQARr

47 名前:KUSO KOTE ◆unko./w.Osri mailto:sage [2015/03/10(火) 22:13:59.15 ID:dg/tj86w.net]
ついでにISO/IEC 14882:2014 3.10p4
『class and array prvalues can have cv-qualified types; other prvalues always have cv-unqualified types. See Clause 5.』

48 名前:44 mailto:sage [2015/03/11(水) 00:50:13.29 ID:vDxY1toS.net]
>>45-47
把握した。ありがとう。

49 名前:デフォルトの名無しさん mailto:sage [2015/03/11(水) 04:33:40.33 ID:vLo4R3vK.net]
何のための誰得な仕様なの

50 名前:デフォルトの名無しさん [2015/03/12(木) 17:23:13.27 ID:4A2VUCCf.net]
sprintfでコピーされる文字列長を
コピーせずに知る方法を教えて下さい



51 名前:デフォルトの名無しさん mailto:sage [2015/03/12(木) 18:12:07.63 ID:nvy6f4L6.net]
前にも同じ質問あったな

52 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/03/12(木) 18:15:54.41 ID:ul3bYXTG.net]
>>50
CRTのソースをみてエミュレートする

53 名前:デフォルトの名無しさん mailto:sage [2015/03/12(木) 21:34:37.05 ID:sWZMM9R0.net]
snprintfをバッファ長ゼロで呼ぶ

54 名前:デフォルトの名無しさん mailto:sage [2015/03/12(木) 22:04:33.17 ID:DBsYm82i.net]
sprintfを使わない

55 名前:デフォルトの名無しさん [2015/03/12(木) 22:27:34.87 ID:L+z6pulG.net]
>>53
ありがとうございます。

>>52,54
とんでもない無能ですね。やる気を出してください

56 名前:デフォルトの名無しさん mailto:sage [2015/03/12(木) 22:39:08.25 ID:cIZ+bXYz.net]
めんどくさいからsnprintf_sに固定長渡して
失敗したら諦めてるわ

57 名前:デフォルトの名無しさん mailto:sage [2015/03/12(木) 23:23:28.91 ID:h4ieQffB.net]
めんどくさいからstd::to_string()して+でくっつけてる

58 名前:デフォルトの名無しさん mailto:sage [2015/03/13(金) 20:15:23.30 ID:krOXv2Oj.net]
>>50
何でそんなことしたいんだ?
コピー後の文字列長を求めれば確実なんじゃないか?

59 名前:デフォルトの名無しさん [2015/03/13(金) 20:33:22.46 ID:9FB9uPZE.net]
>>58
馬鹿なんですか
コピーしきれなかったらどうするんですか
ちゃんと考えてものを言ってください

60 名前:デフォルトの名無しさん mailto:sage [2015/03/13(金) 20:39:02.80 ID:5+Y+ymKY.net]
数字は10進数で桁数を出す。
文字列はstrlenあればいけるだろ。

っていうか、バッファーのところNULLにしたら概要出してくれるんじゃなかったっけ。



61 名前:デフォルトの名無しさん mailto:sage [2015/03/13(金) 21:08:46.46 ID:krOXv2Oj.net]
>>59
大き目にバッファを用意しておけばいいだろ

62 名前:デフォルトの名無しさん [2015/03/13(金) 21:09:58.39 ID:9FB9uPZE.net]
>>60
16進数だったり桁数指定だったり指数表示だったりいろいろあるでしょう
それを全部自前でやれとは回答としてはゼロ点ですね
脳味噌入って無いんですか

63 名前:デフォルトの名無しさん mailto:sage [2015/03/13(金) 21:15:27.03 ID:5+Y+ymKY.net]
最後まで読まないで人罵倒することしか頭にない変態紳士め。

64 名前:デフォルトの名無しさん mailto:sage [2015/03/13(金) 21:38:20.63 ID:5+Y+ymKY.net]
あれ?バッファにNULL渡したら死にやがった。
昔出来ると読んだ記憶があったんだが、何だっけな。
snprintf使っておくのがベターなのか?
正直すまんかった。

65 名前:デフォルトの名無しさん mailto:sage [2015/03/13(金) 21:52:28.16 ID:5+Y+ymKY.net]
ttp://ideone.com/cPifEZ
土下座しろ。

66 名前:デフォルトの名無しさん mailto:sage [2015/03/13(金) 22:07:58.66 ID:nMWoJLTD.net]
なにこの1人相撲。
あとなんで+2なん?

67 名前:デフォルトの名無しさん mailto:sage [2015/03/13(金) 22:10:48.20 ID:5+Y+ymKY.net]
適当。C言語嫌いなんだよ。C++でvector使ってるから。
土下座マダー?

68 名前:デフォルトの名無しさん mailto:sage [2015/03/13(金) 22:34:12.55 ID:nMWoJLTD.net]
>>67
誰に何故土下座を要求してんの?

69 名前:デフォルトの名無しさん mailto:sage [2015/03/13(金) 22:35:27.72 ID:5+Y+ymKY.net]
>>62
脳みそ入ってない奴に解かれてやんの。
ど げ ざ。

70 名前:デフォルトの名無しさん mailto:sage [2015/03/13(金) 22:38:30.75 ID:nMWoJLTD.net]
>>69
解くってsnprintf 使う方法は>>53 で既出なのにマジで何がしたかったのか解らん



71 名前:デフォルトの名無しさん mailto:sage [2015/03/13(金) 22:40:50.94 ID:5+Y+ymKY.net]
動くコード書いたのにこの仕打ちとは、世知辛い世の中だ。
それに質問主理解してなかったジャン。

72 名前:デフォルトの名無しさん mailto:sage [2015/03/13(金) 22:44:40.53 ID:nMWoJLTD.net]
俺もC言語面倒くさくて嫌いだが、こんなアホっぽいのがC言語嫌いC++使うとか言ってるからC言語使いからC++が低く見られるのかもな…

73 名前:デフォルトの名無しさん mailto:sage [2015/03/13(金) 22:45:45.34 ID:5+Y+ymKY.net]
監視すんのめんどくさくなったからもういいや。
あー、書き損。

74 名前:デフォルトの名無しさん mailto:sage [2015/03/14(土) 02:22:29.77 ID:Zay2tm1W.net]
いいかげんC++はインラインメソッドとメンバ変数の後方参照が出来るようになって欲しい。
いちいちコード分けるの面倒。

75 名前:デフォルトの名無しさん mailto:sage [2015/03/14(土) 03:26:27.12 ID:t/iyHNA+.net]
いやできるだろ何言ってんだ

76 名前:デフォルトの名無しさん mailto:sage [2015/03/14(土) 09:03:28.14 ID:Z0HeSYTJ.net]
hppインクルードするだけで使える形のライブラリ書いてるが、関数本体が
長くなると一覧性が悪いな。
関数メンバのプロトタイプ宣言みたいなものが欲しいわ。

77 名前:デフォルトの名無しさん mailto:sage [2015/03/14(土) 09:10:57.91 ID:lGpxwPy8.net]
>>74
どういうコードがコンパイル通るようになってほしいのですか?

78 名前:デフォルトの名無しさん mailto:sage [2015/03/14(土) 09:39:53.35 ID:wEOVq8GH.net]
>>76
関数メンバってなに?

79 名前:デフォルトの名無しさん [2015/03/14(土) 10:07:34.92 ID:uyiCZLkr.net]
なんか頭悪い発言スレ化してきてるな

80 名前:デフォルトの名無しさん mailto:sage [2015/03/14(土) 15:05:27.63 ID:UmboQnI7.net]
大丈夫。頭悪いのはちゃんと回答してくれてる人達に毎度茶茶入れてるキチガイ一匹だけだから。
こんなキチガイ二匹もいる訳がない。
何度ここで勉強させてもらったか。ここがなかったら未だにポインタも分からんかったまである。



81 名前:デフォルトの名無しさん mailto:sage [2015/03/14(土) 16:26:44.67 ID:dIU+dE4A.net]
最近 ID をたぶらかす方法を覚えたみたいだな、例のドカタキチガイちゃん
また全板にわたって盛大にやってくれ

82 名前:デフォルトの名無しさん mailto:sage [2015/03/14(土) 20:20:37.60 ID:Zay2tm1W.net]
>>7
ようするにヘッダに全部書きたい。
hppとcppを行き来するのが面倒だから。

83 名前:デフォルトの名無しさん mailto:sage [2015/03/14(土) 21:22:48.28 ID:Zay2tm1W.net]
そんでよく分からないのは、
クラス内クラス同士の場合、後方参照が許されてるっぽいのに、
グローバル空間だとダメなところ。

class out
{
  class A{ /*A内からBのメソッドが呼べる*/ };
  class B{ };
};

class A{ /*A内からBのメソッドが呼べない*/ };
class B{};

これなんで?中途半端くない?

84 名前:デフォルトの名無しさん mailto:sage [2015/03/14(土) 21:44:48.40 ID:wcL59cGU.net]
          ,. -‐‐‐- 、
         / !      ヽ
        _,!-y-‐-、-、   |
        ゞヽ}i⌒ヽ\ \ {
        }〉ソー-// 入 ヽ、
        >仝\//__,.ゝ、  >   コーホー
       o|ii_ii_:|oニ二三____,.>'
    ''''''} ̄~フハ      ;/;' /_,;,7'
   ;;;''''/_  / | | `ー-‐'´_,,,/' ,,/r'~`ヽ';
     ,r'~ `V ヽニニニ二、-'{ 十 )

85 名前:デフォルトの名無しさん mailto:sage [2015/03/14(土) 23:13:17.18 ID:2sFyhS5H.net]
っ フレンドクラスー!!

86 名前:デフォルトの名無しさん mailto:sage [2015/03/15(日) 02:45:54.75 ID:IG+uIRAd.net]
フレンドクラス関係ない。

87 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 00:05:55.94 ID:kOLN6eD/.net]
ポインタ渡しと参照渡しとスマートポインタ渡し?のどれが一番いいの?
どれも欠点があるみたいでわけわかんないんですけど。

88 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 00:09:07.00 ID:sovfZ05h.net]
使いどころによるとしか言えないだろそんなもん

89 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 00:09:50.83 ID:eWM9qhCG.net]
値の変更があるとき ->ポインタ渡し。
値の変更が無いけどスライシングなくしたい -> 参照渡し
メモリを共有したい ->スマポ。

というルールで俺はやってる。

90 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 00:19:08.83 ID:kOLN6eD/.net]
>>89
ありがとうございます。
そのヒントを手がかりに調べてみます。



91 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 00:37:01.74 ID:dRjYd+3d.net]
基本全部const参照と右参照でいいよ
他が必要な時が来たら設計を見直してそれでも必要なら使えばいい

92 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 01:04:58.99 ID:02ciAWXG.net]
値の変更無い時はconst参照な。const大事

93 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 02:51:28.32 ID:b30KLGb3.net]
みんなセッターとかゲッターとかまじめに書いてるの?

94 名前:デフォルトの名無しさん [2015/03/17(火) 03:05:03.26 ID:t2ppCg0V.net]
雪駄と下駄はまじめに履いてる

95 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 03:11:27.51 ID:Sby901wn.net]
>>93
ゲッター/セッターという概念そのものが設計ミス

96 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 03:17:18.62 ID:Vi/eJRXz.net]
setter/getter は簡単なものなら、クラスの本体に直接、

inline 指定して、コードを書いておく

97 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 12:25:05.62 ID:D7FiHOLw.net]
セッターゲッターは書くな。どうしても必要になったら書けばいいだけ。

参照じゃなくてポインタはnullptrが普通にありえるかどうかかな。

98 名前:デフォルトの名無しさん [2015/03/17(火) 12:40:05.23 ID:tVRGZdcr.net]
必要もないのに書くバカいるの?

99 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 12:42:17.16 ID:VlE2ZkQf.net]
メンバ変数ごとに書いてたらあほらしいしおかしいわな

100 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 12:51:30.17 ID:fdD6RiQU.net]
>>98
本当に結構いるから困る
全部書くのがルールだと思ってやがる



101 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 13:35:18.13 ID:XYhjQqq+.net]
必要あってもゲッター書かないことを模索しろよ
少なくとも内部データ構造丸裸にするゲッターは抽象が実装に依存する

102 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 15:09:22.39 ID:9wYhQc5T.net]
もうそれpublicでいいじゃん!レベルならともかく
そういうの以外についても?

103 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 19:28:48.97 ID:u03+oswx.net]
内部状態を必要以上に晒すなって話。逆転する方法で済む場合もある
B b=A.GetB(); X.Use(b); → A.Accept(X){ B b; X.Use(b); }

104 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 19:40:38.77 ID:V9Y5nR4b.net]
(1) 先に内部のデータ構造を作って
(2) そのあとそれらを丸ごと外に見せるためにゲッターを作る
(3) いつもそうやってクラスを作ってる

そういう行動パターンならまずいだろうな

105 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 19:46:02.32 ID:V9Y5nR4b.net]
抽象と実装の依存を逆転させるのはやめなさい

と忠告されて
それを受け入れて
日々の業務で配慮できる人は
職業プログラマの中の何人に一人いるというのか?!

106 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 19:53:35.11 ID:02ciAWXG.net]
まず外部に出す入力、出力のインターフェースを作ってから中身作るから
eclipseに付いてるメンバー変数からgetter,setterの自動生成の機能とか存在意義が解らんよね

107 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 20:05:43.00 ID:b30KLGb3.net]
C#はその辺うまくやってるんだよな。
C#のプロパティとか、一見変数にアクセスしているように見えて実はメソッド呼び出しだったりするので、
最初は気持ち悪いと思ったんだけど、あれって実は、
セッター/ゲッターを書かなくい言い訳のために存在しているんだよね。
メンバ変数をパブリックで公開しておいて、
プロパティ化の必要が出たらプロパティに出来るっていう。

108 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 20:15:21.53 ID:u03+oswx.net]
俺今 java 土方だけど、むしろ必須。Alt + Shift + R が体に染みつくレベル

109 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 20:55:09.34 ID:he3uyXd7.net]
セッターゲッターってデバッグ時にブレークポイント置いて、いつどの関数が値を参照・変更しているか調べるのに使っているのですが、本来そういう用途に使うものですか?

110 名前:デフォルトの名無しさん [2015/03/17(火) 20:56:44.35 ID:dX8V8eXl.net]
アクセッサー一言で済む言葉をゲッターセッターというやつ何なの?



111 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 21:05:50.88 ID:he3uyXd7.net]
>>110
それはね、そんな事に拘らない大人の人たち。君も早く童貞捨てて男になりなさい。

112 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 21:24:18.48 ID:/0y2c5YQ.net]
>>107
後発言語だけたってそのあたりは上手だよな
リエンジニアリングのリスクさえなければ一気に普及しそうなんだが
俺も個人的にはC++よりはこっち使いたい

113 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 21:29:18.26 ID:vq5GH1Dg.net]
>>110
accessorはsetter含む定義と含まない定義があってな

114 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 21:52:40.02 ID:R3SqHR4I.net]
セタゲタが悪いってのは幻想な
例えばコレクションのカウントプロパティとか概念上そこにあるのが自然なプロパティなんていくらでもある
悪いのは何も考えずにセタゲタを拒否するやつと何も考えずにセタゲタ全部のフィールドに対して作るやつ

115 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 22:01:29.52 ID:x4nvlXOr.net]
>>114
先にメンバ変数があって
後からゲッタセッタを足したらアウトだけどな

116 名前:デフォルトの名無しさん [2015/03/17(火) 22:02:49.01 ID:CGA6ytOR.net]
考え方が極端すぎるな

117 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 22:04:13.61 ID:Fctsf0UD.net]
>>110
アクセサ == ゲッタ
アクセサ != セッタ

118 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 22:04:55.08 ID:7rYotda6.net]
クラスの実装を変えてsetter, getterをチョコチョコ変更してたらクソだわな。

119 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 22:09:07.60 ID:iAsbPPSN.net]
先にデータ構造の設計を完了して
そのあとプライベートメソッドを作って
最後にパブリックメソッドを足していくことを普通だとしてる人は
だいたい半分くらいいるから

両派はずっと相容れないよ

120 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 22:13:26.49 ID:fdD6RiQU.net]
>>114
カウントを保持しない、または把握しないコレクション設計なんていくらでもあるじゃん



121 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 22:23:24.43 ID:R3SqHR4I.net]
>>120
君は実にバカだな
そういう概念のコレクションならばそれらしくカウントプロパティをなくせば良い
ただそれだけのこと
適切なプロパティは善であることに揺るぎはない

122 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 22:28:42.46 ID:Z3zuZFzt.net]
(A) ほぼ当たり前のように、いつもせsetter/getterを付ける。例外的に稀に作らない。

(B) 原則としてsetter/getterを作らない。例外的に稀に作る。

どっちがいい?

123 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 22:34:15.15 ID:RTMNGUZk.net]
どっちも極端なんだよ
必要なら作ればいい

124 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 22:34:40.85 ID:R3SqHR4I.net]
どっちもダメ
設計で吟味された適切なプロパティを作るだけ
原則などない

125 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 22:34:47.57 ID:02ciAWXG.net]
必要なら結果的に作られる。
それだけ多いか少ないかなんてどうでもいいんだよ

126 名前:デフォルトの名無しさん mailto:sage [2015/03/17(火) 22:53:38.53 ID:7rYotda6.net]
インターフェースってーの?
どうやったらどう動くかってのがクラス設計でしょ。
で、データ構造が決まってくると。
getsetを必然としてしまうと、クラスの振舞とデータ構造が切り離せないじゃん。

127 名前:デフォルトの名無しさん mailto:sage [2015/03/18(水) 00:13:21.55 ID:24dY5kJQ.net]
getXXXやsetXXXが必要なら作る。
その実装がメンバ変数のgetterやsetterであるかはどうでもいい。
複雑な処理の計算結果だったり
それのmutableなキャッシュを返すとかでも

128 名前:デフォルトの名無しさん mailto:sage [2015/03/18(水) 00:38:14.26 ID:Z4+04rL5.net]
あえていえば、getter/setterなんてこだわるなよと言いたい。
そんなのただの結果でしかないのだからもう少しちがうネーミングを求む。

隠蔽できてないじゃんと。

129 名前:デフォルトの名無しさん mailto:sage [2015/03/18(水) 00:52:08.37 ID:OuG/w9AN.net]
>>124
> 設計で吟味された適切なプロパティ

というのは、過去の実績としてメンバー変数の何割がそれに該当するくらいの存在比になる?

130 名前:デフォルトの名無しさん mailto:sage [2015/03/18(水) 12:48:34.31 ID:3T5MyfTZ.net]
>>127
支持。



131 名前:デフォルトの名無しさん mailto:sage [2015/03/18(水) 20:44:08.00 ID:h6vLXlXO.net]
ほとんど構造体がわりにしか使ってないような用途のクラスに
セタゲタ用意するのは萎えるね。

132 名前:デフォルトの名無しさん [2015/03/19(木) 00:02:03.88 ID:01sO/RrA.net]
別スレでも質問したのですが、
class cLoadText
{
public:
cLoadText() : PI(3) {}
void Setting();

private:
//色々

vector <int> PI;
};

void cLoadText::Stting()
{
PI.resize(5);
}

このようにresizeすることが出来ません。
「配列は初期化子リストでのみ初期化できます」と出てしまいます。

resizeの仕方を教えて下さい

133 名前:デフォルトの名無しさん mailto:sage [2015/03/19(木) 00:11:59.77 ID:pYPIUQ8y.net]
ttp://ideone.com/TeSyph
コンパイル通るんだから隠さず全部張れ

134 名前:デフォルトの名無しさん [2015/03/19(木) 00:15:04.16 ID:01sO/RrA.net]
>>133
すみません
ありがとう御座います

135 名前:デフォルトの名無しさん mailto:sage [2015/03/19(木) 01:35:08.96 ID:noU2qMQu.net]
setter/getter は、無条件に全メンバ、作る方が、
迷いが無くて、一々考えなくてよいから速い

途中で必要になって、置換して作ると、
かえって時間がかかるし、バグも出る

最初からクラスの本体内に、
inlineで定義しておけば、コスト0

136 名前:デフォルトの名無しさん [2015/03/19(木) 01:54:09.95 ID:YOg3jQUC.net]
そしてカーズは考えるのをやめた

137 名前:デフォルトの名無しさん mailto:sage [2015/03/19(木) 02:16:07.81 ID:noU2qMQu.net]
人は愚かだからね。
そりゃ、関心事のほとんどは、人間に対するものだよ

いかに実装・詳細を見せないか。
それらを見せると人は、色々と考えて、間違いを犯す!

まさに、*FILE なんてそう。
くわばらくわばら。実装・詳細に近寄るべからず!
ひたすら隠ぺいするのみ!

138 名前:デフォルトの名無しさん mailto:sage [2015/03/19(木) 20:06:01.05 ID:ygDVwDTU.net]
>>135
現実的にはそんなことはないような。
考えなくて済む利点を言うなら、デフォルトで書かないというのが間違いないね。

139 名前:デフォルトの名無しさん mailto:sage [2015/03/19(木) 23:10:24.61 ID:xsGoZORT.net]
>>135
> setter/getter は、無条件に全メンバ、作る方が、
> 迷いが無くて、一々考えなくてよいから速い

今は何割くらいがそちらの派閥なの?

140 名前:デフォルトの名無しさん mailto:sage [2015/03/20(金) 00:35:53.57 ID:kFbLT/qS.net]
釣りだろ。
そこまで愚かな方針がたとえあったとしても続くわけがない。



141 名前:デフォルトの名無しさん mailto:sage [2015/03/20(金) 01:15:14.54 ID:bGDqKCOV.net]
最初にメンバー変数から作ります。

仕様が出来る頃には実装もテストも終わってます。
( ̄ー ̄)ドヤッ

142 名前:デフォルトの名無しさん [2015/03/20(金) 05:05:59.33 ID:dOiGdIE8.net]
君らは、一体どういう作り方をしているの?

get_a { return 0; }

一般的にはテスト駆動開発で、
ひとまずコンパイルが通るように、スタブから作っておく

これでひとまず動くから、客の要望も聞ける。
メンバ変数などの詳細は後

143 名前:デフォルトの名無しさん mailto:sage [2015/03/20(金) 09:07:31.87 ID:IjoHJbl9.net]
大半の実装を終えてからパブリックメソッドの設計に取りかかる奴がいるんだよな

144 名前:デフォルトの名無しさん mailto:sage [2015/03/20(金) 14:24:27.22 ID:+Z7yaCvp.net]
>>143
実装がとても難しくて、その実現が最優先な場合、それはありだと思う。

145 名前:デフォルトの名無しさん mailto:sage [2015/03/20(金) 15:07:04.79 ID:bD2AVuY9.net]
実装が難しいからpublicは後から考える?
中学生レベルの話をしてるのか?

146 名前:デフォルトの名無しさん mailto:sage [2015/03/20(金) 15:18:37.09 ID:OqdH58/s.net]
>>144
パブリックの設計を後回しにすることを正当化できるほどの難しい実装って具体的に何を実装するときですか?

147 名前:デフォルトの名無しさん mailto:sage [2015/03/20(金) 15:48:08.81 ID:p3Xq9eSj.net]
研究レベルのことなんじゃね?

148 名前:デフォルトの名無しさん mailto:sage [2015/03/20(金) 17:36:32.96 ID:che7vf9K.net]
難しいときほどインターフェースから決めていくんじゃねーの?

149 名前:デフォルトの名無しさん mailto:sage [2015/03/20(金) 17:52:47.00 ID:+Z7yaCvp.net]
実装が難しくて専門家に好きなようにやってもらうときとかさ。あるだろう?

150 名前:デフォルトの名無しさん mailto:sage [2015/03/20(金) 18:05:23.46 ID:ieC2O0gO.net]
>>149
具体的に何のコード?



151 名前:デフォルトの名無しさん mailto:sage [2015/03/20(金) 19:20:14.19 ID:+Z7yaCvp.net]
>>150
言えないけど一種のシミュレーション。
必要なデータは参照できてる状態で、自然なインタフェースとしてはcalcメソッド一発なんだけど、多段に分けて制御を途中で返すプログラムができてきた。
複雑さの問題と資源的な問題で、そうせざるを得ないと判断したが、インタフェースとしては当初の想定とは異なるものになった。
まあ>>145さんにとっては中学レベルの問題でしょうがね。

152 名前:デフォルトの名無しさん mailto:sage [2015/03/20(金) 19:49:46.66 ID:UWqpI5yE.net]
>>151
> インタフェースとしては当初の想定とは異なるものになった。

当初に想定してんじゃん

実装終えてからインターフェースの設計をする実例になってないし

153 名前:デフォルトの名無しさん mailto:sage [2015/03/20(金) 19:58:45.01 ID:kFbLT/qS.net]
心の中で想定してたけど設計はしてないんだろ。

154 名前:デフォルトの名無しさん mailto:sage [2015/03/20(金) 20:00:27.00 ID:69NtnG64.net]
設計はしてても詳細実装をしてみたら変わってくるのはよくあること。
最初からインターフェース無視して作るとかはないだろ。

155 名前:デフォルトの名無しさん mailto:sage [2015/03/20(金) 20:08:43.90 ID:kEq90xmY.net]
インターフェースを定めて
このインターフェースに合うように作ってくださいと外部に依頼して
分かりましたそれで作りますと仕事を請け負おうわけでしょ?

納品する際に実装の難しさを理由にインターフェースは違っていますなんて言ったら
検品通らないですよ

156 名前:デフォルトの名無しさん mailto:sage [2015/03/20(金) 20:22:41.27 ID:Daap3Bvc.net]
>>154
そゆこと

>>155
業務系アプリかなんかのプログラマーの人?

157 名前:デフォルトの名無しさん mailto:sage [2015/03/20(金) 21:26:43.40 ID:hI8+B7Y0.net]
>>144
「とても難しくて」の難しさが伝わってこないんですけど
プログラミング始めて何年くらいの方なんですか?

158 名前:デフォルトの名無しさん mailto:sage [2015/03/20(金) 21:31:35.74 ID:kFbLT/qS.net]
>>157
>>151に書いてあることで想像できない?

プログラミングの難しさではなく、問題そのものが難しい場合だね。

159 名前:デフォルトの名無しさん mailto:sage [2015/03/20(金) 21:32:12.44 ID:8sMOXdGr.net]
>>157
アルゴリズムから考案しなきゃならないような、
とても難しいプログラムを開発した事無いのか?

160 名前:デフォルトの名無しさん [2015/03/20(金) 21:33:41.99 ID:g2iYv7QR.net]
それとインターフェースと何が関係するのか



161 名前:デフォルトの名無しさん mailto:sage [2015/03/20(金) 21:38:51.88 ID:kFbLT/qS.net]
一言でいうとトレードオフだよ。

自然なインタフェースはだいたい事前に思い浮かぶし、その通りにできれば何も悩まない。
厳密な解が求まらないとか、現実的な時間内に解けないとか、どういう制約が出てくるか、それをどう回避できるかとかは
実装してみないとわからないがけっこうある。

そういうときは「妥協したインタフェース」になるんだよ。どう妥協すべきかなんて事前に計算でないだろ?

162 名前:デフォルトの名無しさん mailto:sage [2015/03/20(金) 21:52:06.18 ID:69NtnG64.net]
数値解析とかやってると、こういう方針でいこうと思ってもなんだかんだで効率悪いしインターフェース変えようとか普通にある。
そもそも、数値解析をやるということは客に納品する職業プログラマじゃなくて自家用だし、それで破綻はしない。

163 名前:デフォルトの名無しさん mailto:sage [2015/03/20(金) 21:55:54.93 ID:8R4gJpo3.net]
>>159
具体的にどのようなものが該当?

164 名前:デフォルトの名無しさん mailto:sage [2015/03/20(金) 22:00:53.80 ID:en+bkcOB.net]
>>162
> インターフェース変えようとか普通にある。

変えればいいじゃん
変えるなという話は出てないし

インターフェース定めてそれに従って実装する
インターフェースの問題点が発覚したら新しいインターフェースを定める
新しく定められたインターフェースに従って実装する
これでいいじゃん

実装に依存してインターフェースを設計することを正当化する理由として「変わるから」は使えないよな?

165 名前:デフォルトの名無しさん mailto:sage [2015/03/20(金) 22:03:54.72 ID:8t27nLZP.net]
>>164
仕事でやるなよ
そのうち刺されるぞ

166 名前:デフォルトの名無しさん mailto:sage [2015/03/20(金) 22:12:18.95 ID:kFbLT/qS.net]
最初は >>143-144 から始まっている。
インタフェースを変える変えないではなく、インタフェースを後決めにすることについての是非。

167 名前:デフォルトの名無しさん mailto:sage [2015/03/20(金) 22:14:32.67 ID:7R8SYIun.net]
・開発中は他人と連携しない
・開発が落ち着いたらインターフェイスを整える
なら別にいい

168 名前:デフォルトの名無しさん mailto:sage [2015/03/20(金) 22:19:29.65 ID:F6uSjiv/.net]
ホウレンソウできない奴は
インターフェース仕様に従わないものを勝手に作って
土壇場まで言わないんだよな

169 名前:デフォルトの名無しさん mailto:sage [2015/03/20(金) 22:45:10.74 ID:8sMOXdGr.net]
>>163
顔認証

170 名前:デフォルトの名無しさん mailto:sage [2015/03/20(金) 23:45:12.21 ID:Jj6lQhtW.net]
この議論がsetter,getterをメンバー毎に作るかって話とどう関係すんのか解らない。
いつの間にか話変わってた?



171 名前:デフォルトの名無しさん mailto:sage [2015/03/20(金) 23:59:08.21 ID:5AkEDrBF.net]
>>170
メンバー毎に作るのは
まずメンバーができて
そのあとメンバーに合わせてインターフェースができることになるのでは?

172 名前:デフォルトの名無しさん mailto:sage [2015/03/21(土) 00:47:15.31 ID:+cCVLyHf.net]
雪駄とかは基本的に作らんな。
手続きを公開しておけば変数単体を参照する需要ってあんまりないと思うんだけど。
配列見せろとかは多少目をつむるけど。
クラスが仕事だ。って感じやね。俺の場合。

173 名前:デフォルトの名無しさん mailto:sage [2015/03/21(土) 01:59:58.45 ID:wTPdkcAS.net]
俺なんかは趣味プログラマーだから、classじゃなくて全部structだぜ。
全メンバpublicだし、細々した短いメソッドも作らん。メンバ変数に直接アクセスしてガシガシ。
そっちの方が実装するのが断然早い。
一人でやってるからできる芸当だな。うらやましいだろ。
プログラミングなんて職業にしても何も楽しいことないと思うね。
自分が思うように気ままに書いたほうが絶対楽しい。

174 名前:デフォルトの名無しさん mailto:sage [2015/03/21(土) 02:12:27.71 ID:2Cfhk+vt.net]
それはあんた、複数人で開発してみたいってのが見えるよ

175 名前:デフォルトの名無しさん mailto:sage [2015/03/21(土) 03:15:42.83 ID:UFfQG/bW.net]
>>173
1人で作ってるとお前みたいなゴミプログラマーに邪魔されなくていいよね

176 名前:デフォルトの名無しさん mailto:sage [2015/03/21(土) 05:28:54.71 ID:FH7eF9wx.net]
俺なんかは趣味プログラマーだから、classじゃなくて全部グローバル変数だぜ。
全メンバグローバルだし、細々した短いメソッドも作らん。グローバル変数に直接アクセスしてガシガシ。
そっちの方が実装するのが断然早い。
一人でやってるからできる芸当だな。うらやましいだろ。
プログラミングなんて職業にしても何も楽しいことないと思うね。
自分が思うように気ままに書いたほうが絶対楽しい。

177 名前:デフォルトの名無しさん mailto:sage [2015/03/21(土) 05:39:53.81 ID:+cCVLyHf.net]
C/C++使う意味ねー。

178 名前:デフォルトの名無しさん mailto:sage [2015/03/21(土) 05:53:50.49 ID:ayQ8HKxK.net]
実際、ソースファイル1つで終わるくらいのミニツールとかだと
publicやグローバル上等の方が効率的に開発できるんだよな。

179 名前:デフォルトの名無しさん mailto:sage [2015/03/21(土) 06:04:26.82 ID:qnP8SmNL.net]
>>170
難しいアルゴリズムやってるんだぞ、ってどや顔したい構ってちゃんがいただけ
気にしなくていいよ

180 名前:デフォルトの名無しさん mailto:sage [2015/03/21(土) 06:48:23.51 ID:pHXUpzh9.net]
仕事は辛いが1人じゃ絶対に手を出せないようなシステム弄るのは楽しいよね
バカ高いライセンス料金とかも会社負担だし
あと客相手だと要求自体が厳しいからスキルアップしやすい



181 名前:デフォルトの名無しさん mailto:sage [2015/03/21(土) 06:54:53.47 ID:VwMzQXBk.net]
>>170
例えば座標を保持するとして、中身を直交座標で作ってたけど極座標でデータを保持した方が良いとなったとき、
getsetで実装データ直いじりにしてたら呼び出し側も全部書き換えだわな。
データのアクセスと実装が分離してた方がいいよね。
そういう話。

182 名前:デフォルトの名無しさん mailto:sage [2015/03/21(土) 07:54:44.50 ID:siPVs/24.net]
>>181
いや、その場合はget,set経由にしているのが生きる例なのでは?

183 名前:デフォルトの名無しさん mailto:sage [2015/03/21(土) 08:04:04.44 ID:ajuKLkKm.net]
>>181
そういう意味ではgetter/setterで分離されているだろ。
データメンバと一対一対応すること自体が目的じゃないんだから、その状態を維持するために
わざわざインターフェースを変更したりしないだろう。

184 名前:デフォルトの名無しさん mailto:sage [2015/03/21(土) 08:09:28.65 ID:33k4bkbj.net]
>>176
コードを書くときは、誰かが読むということを考えながら書く癖をつけたほうがいいぞ。趣味で書いてたとしても、時間が経つと人はやったこと忘れるから。

185 名前:デフォルトの名無しさん [2015/03/21(土) 09:04:57.36 ID:tIU7X1pC.net]
日本人が日本語に慣れてない外人の為に綺麗な文法で文字を書くことは必要ないでしょ
どんな汚い文でも「日本でおk」なんていわれることはあっても読めないことはないのだから

186 名前:デフォルトの名無しさん mailto:sage [2015/03/21(土) 09:34:51.56 ID:NjRKtIY1.net]
内部で文字列メンバーを抱えてるクラスが
getterで文字列クラスへのconst参照を外に見せてたら
文字列クラスを別のクラスに変えようとしても難しくなるよな?

187 名前:デフォルトの名無しさん [2015/03/21(土) 09:37:29.49 ID:tIU7X1pC.net]
オブジェクトのハンドルを返しては行けないのはあたりまえでしょ

188 名前:デフォルトの名無しさん mailto:sage [2015/03/21(土) 09:42:23.82 ID:leCA2lLq.net]
>>186
string返すようにすりゃ
実質問題でないだろ。
それも嫌なら内部にstringも
持っておけば良い。

189 名前:デフォルトの名無しさん mailto:sage [2015/03/21(土) 09:48:07.07 ID:DIvWRuL5.net]
コンテナ的なクラスだったら個々の要素に直接アクセスする方法があるべきだが、
そうじゃないクラスならそうじゃない。

あたり前か。
コンテナ的(悪く言えばオブジェクトの寄せ集め)なクラスしか作ったことない初学者だと、
「要素にアクセスできなきゃ意味ないし、getter/setter必要でしょ?」
と思い込んでしまうのかもしれない。

190 名前:デフォルトの名無しさん mailto:sage [2015/03/21(土) 09:49:17.97 ID:kqW1gpJ+.net]
>>185
同じ内容でも、ぐちゃぐちゃの文は読みにくく意味を取るのに余計な時間が掛かるし、
矛盾やら抜け漏れが起こりやすく、それが存在するかどうかも分かり難い。

要するにバグを含む可能性が高く、バグを直すのもそのぐちゃぐちゃの文に
手を入れないといけないとかメンテ性も悪いってことだな。



191 名前:デフォルトの名無しさん mailto:sage [2015/03/21(土) 09:53:39.63 ID:DIvWRuL5.net]
クラス入門記事とかで、ベクタークラスやストリングクラス中心に説明していると、
要素アクセスのことが最大の関心事なってしまうのかもしれん。

192 名前:デフォルトの名無しさん mailto:sage [2015/03/21(土) 10:07:24.24 ID:eyl+kM++.net]
csに汚染された僕は要素参照したいならポインタかスマポの配列にすればいいじゃないって思うんだ
set_Itemとget_Itemをメンバに追加して参照を返すop []とは決別するんだ
きっとcppの世界も安全で美しい世界になるよ

193 名前:デフォルトの名無しさん mailto:sage [2015/03/21(土) 10:10:12.71 ID:nP6je3/T.net]
IDが新しい言語っぽい

194 名前:デフォルトの名無しさん mailto:sage [2015/03/21(土) 10:14:13.18 ID:HlA0yPUF.net]
getter/setter乱造に対して、ここでは

カプセル化の失敗
実装依存インターフェース設計

この2点が問題点として挙げられてるわけだな

他にないの?

195 名前:デフォルトの名無しさん mailto:sage [2015/03/21(土) 14:23:38.37 ID:ayQ8HKxK.net]
まわりくどい、ってのは?

196 名前:デフォルトの名無しさん mailto:sage [2015/03/21(土) 16:19:49.11 ID:CQIci0mN.net]
>>195
何と比べて何がまわりくどい?

197 名前:デフォルトの名無しさん mailto:sage [2015/03/21(土) 21:05:22.24 ID:wTPdkcAS.net]
C#だと、メンバ変数をpublicで公開しておいても、
あとでプロパティに書き直せるんだぜ?
自動実装プロパティもあるから、
public int member { get; set; }
これだけでsetter/getterが用意されるんだぜ?
C++11にこういった仕組みがあれば良かっただけの話。
何故入らなかったんだろうね。

198 名前:デフォルトの名無しさん mailto:sage [2015/03/21(土) 21:15:06.83 ID:H4vnCtpe.net]
>>197=どうしようもないバカ
Think different? by 2ch.net/bbspink.com

199 名前:デフォルトの名無しさん mailto:sage [2015/03/21(土) 21:17:03.16 ID:Wq5Rp15Z.net]
え?
Think different? by 2ch.net/bbspink.com

200 名前:デフォルトの名無しさん mailto:sage [2015/03/21(土) 23:20:45.67 ID:fi0av/ji.net]
フィールドを丸出しの痴漢野郎が後からプロパティで取り繕うたって手遅れだよ



201 名前:デフォルトの名無しさん mailto:sage [2015/03/21(土) 23:29:26.96 ID:/1WUKsZg.net]
>>197
それはC#の欠点

202 名前:デフォルトの名無しさん mailto:sage [2015/03/22(日) 00:30:02.17 ID:w9cAhcxl.net]
>>196
publicで変数を公開するのと比べて。

203 名前:デフォルトの名無しさん mailto:sage [2015/03/22(日) 06:36:44.03 ID:FADneXJj.net]
変数の直接アクセスがダメって怒られたからgetter量産したJAVAドカタにしか見えない。
C++はリフレクションが無いんだからせめて
public virtual int member {get;set;} とか
public int member {get; private set ;}
にしないと意味無くね?

204 名前:デフォルトの名無しさん mailto:sage [2015/03/22(日) 10:48:32.65 ID:EAPeSLEN.net]
C++信者の教条主義にはうんざりだ
その正しい設計とやらが品質や生産性に与える影響の定量的データって存在するの?

205 名前:デフォルトの名無しさん mailto:sage [2015/03/22(日) 10:53:20.85 ID:PKxDsRUX.net]
c++はむしろそう言うの一番緩い気がするんだが。
仕様自体がなんでもありのカオス過ぎる。

206 名前:デフォルトの名無しさん mailto:sage [2015/03/22(日) 11:13:05.90 ID:9ijd/r0x.net]
>>205
信者の話だろ
俺の回りにはいないからよく知らんけど

207 名前:デフォルトの名無しさん mailto:sage [2015/03/22(日) 11:57:54.47 ID:UD5BMgeo.net]
そもそも境界を明確にしたくてやってる。getter/setter を何も考えすに増やしたら、境界が穴だらけで確認も一苦労だし
境界を動かしたくなっても大変だ

C++ だと境界があっても侵入してくる友達とかもいるしなあ

208 名前:デフォルトの名無しさん mailto:sage [2015/03/22(日) 11:59:13.94 ID:FHqRUY0c.net]
なんでも教条主義的なのは良くないね。
そういうやつはstd::pairのfirstメンバとsecondメンバもアクセッサ用意しろとか言うのかな?

209 名前:デフォルトの名無しさん mailto:sage [2015/03/22(日) 12:17:43.18 ID:EAPeSLEN.net]
境界を明確にすると、生産性や品質が向上するの?
定量的データは存在するの?

210 名前:デフォルトの名無しさん mailto:sage [2015/03/22(日) 12:19:03.03 ID:CvAUvH6J.net]
有るよ



211 名前:デフォルトの名無しさん mailto:sage [2015/03/22(日) 12:25:19.22 ID:B74/Dr8M.net]
>>204
カプセル化しろだとか
実装依存でインターフェース作るなだとか
それらは言語非依存の話だろ

212 名前:デフォルトの名無しさん mailto:sage [2015/03/22(日) 12:29:28.68 ID:a4d1QeSf.net]
>>208
コンテナは特例だろ
コンテナは全クラスの中の一割にも満たないだろうし

213 名前:デフォルトの名無しさん mailto:sage [2015/03/22(日) 13:19:59.45 ID:f09FMk3S.net]
>>212
うん、そうだね。
上の方でも書いたが、クラス入門記事を書いたサイトなんかでvectorを例にあげたものが結構多くて、ミスリードさせてる面があると思う。
コンテナを入門例にする弊害はもうひとつあるげど。

214 名前:デフォルトの名無しさん [2015/03/22(日) 14:24:44.71 ID:KqEpS/vg.net]
標準ライブラリはスネークケースなのに
なんでお前らはキャメルケースなの?
標準をリスペクトしろよ

215 名前:デフォルトの名無しさん mailto:sage [2015/03/22(日) 14:33:07.47 ID:CvAUvH6J.net]
標準と区別しやすい方が良い

216 名前:デフォルトの名無しさん mailto:sage [2015/03/22(日) 20:42:54.20 ID:MxnNmn3I.net]
関数テンプレートの部分特殊化を勉強中なのですが、テンプレートを駆使して実装すると、
ややこしいので実装に非常に苦労するのと、その時はどうにか理解できて動かせたとしても、
あとで見直すと何の処理しているのか思い出すのに時間がかかります。

それなら、部分特殊化などはせずに、それぞれの型に応じて、似たような関数を必要な個数だけ
書き下すほうが私には分り易いのですが、みなさんはどうでしょうか?

217 名前:デフォルトの名無しさん mailto:sage [2015/03/22(日) 20:51:01.26 ID:+PdyLyEl.net]
型はTYPEとして認識してるから、テンプレートのほうが抽象化されてて読みやすい。

218 名前:デフォルトの名無しさん mailto:sage [2015/03/22(日) 21:17:57.52 ID:85Ajb4qC.net]
C++のテンプレートはいわゆる黒魔術的なもので個人の知識欲を満たすには良いのですが現場では全く推奨されていません
テンプレートの利用は最小限で済むようにしっかりと設計をしましょう

219 名前:デフォルトの名無しさん mailto:sage [2015/03/22(日) 21:21:40.65 ID:st2tKls6.net]
んなこたー無い

そりゃ科学技術を悪魔の所業だと恐れる未開人の反応

220 名前:デフォルトの名無しさん [2015/03/22(日) 21:23:06.87 ID:OTwiJSdy.net]
テンプレート使うと型が曖昧になるとか言われてしまった



221 名前:デフォルトの名無しさん mailto:sage [2015/03/22(日) 21:26:54.53 ID:+PdyLyEl.net]
>>220
抽象化ってそういうもんだし、型を用途別に認識してるような人間には読みにくいと思う。
もっと透過的に総合的にTYPEとして認識していれば読みやすい。

222 名前:デフォルトの名無しさん mailto:sage [2015/03/22(日) 21:35:56.06 ID:LZ22PPBw.net]
この世界にはあなた方が思う以上に未開人がまだまだ居るんです
業務で書いたコードは誰が保守するかわかりません
ユーザーの事を真摯に考えるならば、テンプレートの多用は避けましょう

事実として設計が良くできたシステムではテンプレートの利用はそれほど多くなりません
逆に言えばテンプレートを多用していると、設計が雑なのではないかと疑ってよいでしょう

基本的なオブジェクト志向が出来ていれば実装する言語はなんでも構わないはずです
UMLで記述された設計書がC++でしか実装出来ないものになるでしょうか?
他の言語にはC++のテンプレートはありません
他の言語で実装できるものになぜテンプレートを使う必要があるのでしょうか

223 名前:デフォルトの名無しさん mailto:sage [2015/03/22(日) 21:39:47.48 ID:+PdyLyEl.net]
楽するためとコード量減らすため。
逆にウィローの密度が上がって上級者向けになる。

個人的には、組み込み型をそのままテンプレートクラスにしたものが欲しい。
継承してoperator*実装するわ。色々イテレーションさせるために。

224 名前:デフォルトの名無しさん mailto:sage [2015/03/22(日) 21:44:01.30 ID:st2tKls6.net]
設計が良くできていれば、template使った方がメンテ性は格段に上がる。
特に大がかりなプログラムになれば成る程ね。

規格もコンパイラやライブラリさえどうにかなるなら、その時点でなるべく新しい方にしておいた方がいい。
記述性もメンテ性も上がるし、諸々のサポートも長く続くしね。

225 名前:デフォルトの名無しさん mailto:sage [2015/03/22(日) 21:45:05.48 ID:FHqRUY0c.net]
>業務で書いたコードは誰が保守するかわかりません
レベルの低い人はいるが、それと共に生きていくか、切り捨てて競争に勝ちにいくのか。
会社によるとしか言いようがないな。

226 名前:デフォルトの名無しさん mailto:sage [2015/03/22(日) 21:47:00.39 ID:+PdyLyEl.net]
https://www.youtube.com/watch?v=cRDVQOduEx8
頑張れ明日のプログラマー。

227 名前:デフォルトの名無しさん mailto:sage [2015/03/22(日) 21:51:40.37 ID:st2tKls6.net]
>>222
つまりc++の殆どの標準ライブラリは設計の良くできていない糞と

まあ一部本当に糞な部分が存在するのは確かだが

228 名前:デフォルトの名無しさん mailto:sage [2015/03/22(日) 22:23:27.08 ID:MxnNmn3I.net]
templateの発想は良いと思うのですが、記述方法を
もう少し簡素に出来ないのかなと思います。

229 名前:デフォルトの名無しさん mailto:sage [2015/03/22(日) 22:25:20.60 ID:Es/fnACy.net]
ポインタ本を読んで分からないことがあったので質問させて下さい。

char str[10];
str="ABC";

これがダメな理由が分からないです。
静的領域に'A','B','C'という配列が出来て、"ABC"という文字列は配列の先頭アドレスを示すから
strという配列の先頭アドレスに、"ABC"を格納したアドレスが入るということではないのでしょうか?

本にはスカラやら色々書いてますがいまいち理解できませんでした。

230 名前:デフォルトの名無しさん mailto:sage [2015/03/22(日) 22:27:18.64 ID:XbO38xnH.net]
char str[10]の時点で、メモリのある場所に10個分のcharのデータが確保される
strはその場所を示してるだけで、後で変更不可能



231 名前:デフォルトの名無しさん mailto:sage [2015/03/22(日) 22:31:21.35 ID:Es/fnACy.net]
あ、そうか・・・
言われてみればそのとおりですね。 ありがとうございます。なぜこんなことで数時間悩んでたんだ・・・

232 名前:デフォルトの名無しさん mailto:sage [2015/03/22(日) 22:32:46.32 ID:+PdyLyEl.net]
char[10]っていう型なので、char*との型変換はサポートしてない。

233 名前:デフォルトの名無しさん mailto:sage [2015/03/22(日) 23:07:06.07 ID:XatTIShe.net]
いやでもSFINAEを多用したテンプレートバリバリの他人のソースコードを読みたいと思うか?
限度って物があると思う。

234 名前:デフォルトの名無しさん mailto:sage [2015/03/22(日) 23:15:40.78 ID:+PdyLyEl.net]
ある程度パターンあるからそれを知ってるかの違いだと思う。
constexper出来たのでSFINAEは減ってくと思う。

235 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 00:27:31.31 ID:M3nkBPPX.net]
関数テンプレートを使うとソースコードが美しくなくなるのが
最大の問題だと思う。
templateとかtypenameとか似たよな名前が沢山出てくるのも変だし、
typenameでもclassでもいいとかも変だし、
特殊化する時に構造体使うのも変だし、全てが変だ。
テンプレートという考え方自体は良いと思うが実装のしかたに難があるなあ。

236 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 00:34:57.95 ID:nQj6e6EY.net]
typenameの規制緩和は今度入る予定だ。
定型文だからそれこそ、そういう型だと思うべきでは?

237 名前:デフォルトの名無しさん [2015/03/23(月) 01:09:02.68 ID:jYOEZXcw.net]
緩和つーても、あれっぽっちじゃねえ。
typename前置みたいな糞ルールを片付けてくれるんならまだしも。

あとexport廃止も何だかねえ。
翻訳フェーズが再帰的にループするのは制御構造として別に汚くないのに。

238 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 01:43:52.38 ID:NupNPfA+.net]
汎用的な処理以外でのtemplateは
設計ミスか黒魔術かもしれない

239 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 02:09:57.00 ID:mg7QYnuC.net]
言語なんて自然言語を含めて変なところなんていくらでもある
C++イディオムについて行けないなら自分の知性を疑え

240 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 05:44:33.15 ID:xwACqlut.net]
>>229-232
const char * s1 = "ab";
const char * const s2 = "cd";
char s3[] = "ef";

ここで、s1, s2 は変数だが、s3 は変数ではなく!、
配列の先頭アドレスの別名

ちなみに、書き込みできない rodata(ReadOnly)領域には、
ab, cd, s2

書き込みできる data 領域には、
ef, s1 が入る

また、書き込みできない rodata/text 領域は、
ファイルにデータがあるため、
スワップ領域に書き込まれないし、

同じアプリの複数プロセスで、
データが共有されるため、エコであり、
なるべく、const にした方がよい



241 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 06:23:51.77 ID:XTpYB3rU.net]
C/C++ プログラムのコンパイルと実行
7ujm.net/linux/1.html
を見てコンパイルしていますが上手いこといきません。

ソースは次のとおりです。

242 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 06:24:51.10 ID:XTpYB3rU.net]
# vi test.cpp
# cat test.cpp
#include <stdio.h>

class test{
public :
void out(){
printf("test test");
}
};

int main(char*args []){
test t;
t.out();
getchar();
return 0;
}
# gcc -o test.exe test.cpp
test.cpp:10:5: 警告: ‘int main(char**)’ の第一引数は ‘int’ であるべきです [-Wmain]
int main(char*args []){
^
test.cpp:10:5: 警告: ‘int main(char**)’ は 0 個または 2 個の引数のみとります [-Wmain]
/tmp/ccMmfykR.o:(.eh_frame+0x4b): `__gxx_personality_v0' に対する定義されていない参照です
collect2: エラー: ld はステータス 1 で終了しました
# g++ -o test.exe test.cpp
test.cpp:10:5: 警告: ‘int main(char**)’ の第一引数は ‘int’ であるべきです [-Wmain]
int main(char*args []){
^
test.cpp:10:5: 警告: ‘int main(char**)’ は 0 個または 2 個の引数のみとります [-Wmain]

何が原因なのでしょうか??

243 名前:デフォルトの名無しさん [2015/03/23(月) 06:31:49.23 ID:91/eC9il.net]
int main()

244 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 06:33:26.87 ID:nQj6e6EY.net]
mainは規格上
<type> main(void);
<type> main(int,char**);
であると厳密に規定されていたと思う。
char**単体では何個の引数が入力されたか知ることは難しい。

245 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 07:31:35.40 ID:U7lhbTJw.net]
>>244
ひとつ抜けとる

246 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 07:34:25.08 ID:nQj6e6EY.net]
え?イジワルしないで追記してよ。

247 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 07:53:36.32 ID:QGdOu4B9.net]
char**単体で何個の引数が入力されたか分かるやつ

248 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 07:56:05.98 ID:nQj6e6EY.net]
え?標準C/C++でそんなことできるの?

249 名前:デフォルトの名無しさん [2015/03/23(月) 08:43:56.61 ID:jYOEZXcw.net]
(void)と(int,char**)以外は未定義じゃなく処理系定義だからな。
gccのアチラ製らしい尊大な言いぐさで242が混乱した、
本来なら「対応していません」と言う「べき」だった、
そういうことだ。

250 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 08:52:32.61 ID:h9PpfwFW.net]
>>249
ここはC/C++スレではなくC++スレ



251 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 09:15:36.21 ID:U7lhbTJw.net]
>>246
環境変数

252 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 09:22:50.40 ID:0V7gGH5J.net]
>>249
そんな、うんこサイトで勉強するな。

253 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 09:28:02.11 ID:nQj6e6EY.net]
>>251
あー、パースしないといけないから結構めんどくさいな。
Linuxの場合は環境変数のハッシュがあるんだっけか。
windows使ってるけどそんなことしないからなぁ。

254 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 09:33:33.74 ID:RnMSimPV.net]
>>253
デタラメが多すぎてまるで狂った人のようになってる

255 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 09:39:51.18 ID:0V7gGH5J.net]
envpが環境変数のハッシュ…
お里が知れるな

256 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 09:49:40.19 ID:h9PpfwFW.net]
SJISののろいだな

257 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 11:39:33.90 ID:g/PuNzsZ.net]
コピーコンストラクタとoperator=って、記述内容がいつもほぼ同じなんだけど、
二つの処理を共通化してしまうと、なにか問題でもありますか?

コピーコンストラクタでは *this = rhs; とだけ書いてしまって、
operator=だけにメンバの代入処理を記述するという方法です。

258 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 11:51:57.29 ID:octrM0VV.net]
>>257
やるべきことはそれの逆だ。

259 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 11:59:13.30 ID:g/PuNzsZ.net]
>>258
すみません、ちょっとよくわからないのですが、
operator=からコピーコンストラクタを呼び出せるということですか?

260 名前:デフォルトの名無しさん [2015/03/23(月) 12:03:23.29 ID:/01WT41o.net]
代入したい時は=を使いたいでしょ。関数にオブジェクトをコピーしたい時に
はコピーコンストラクタが必要でしょ。

=の演算子のオーバーロード時にコピーコンストラクタを使いたければどうぞ。



261 名前:デフォルトの名無しさん [2015/03/23(月) 12:04:45.20 ID:/01WT41o.net]
>>260

関数にオブジェクトをコピー

関数の引数を通してオブジェクトをコピー

262 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 12:12:34.45 ID:h9PpfwFW.net]
慣れの問題
そのるーるに馴染まなければ
代替"言語"を提示しましょ

263 名前:デフォルトの名無しさん [2015/03/23(月) 12:16:08.78 ID:+XT1kww+.net]
例を書いてみて

264 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 12:38:38.58 ID:h9PpfwFW.net]
?

265 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 12:55:42.31 ID:octrM0VV.net]
>>259
foo& operator =(const foo& src)
{
foo tmp(src); //コピーコンストラクタ
tmp.swap(*this); //情報入れ換え
return *this;
}
というイディオム

266 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 13:09:01.60 ID:g/PuNzsZ.net]
>>265
fooクラスにswap(const foo& src)というメンバ関数を作成して、
そこにメンバの代入処理を記述するということですか?

そうなると、結局はコピーコンストラクタと同じような代入処理が
別のメンバ関数に存在することになりませんか?

267 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 14:17:51.12 ID:octrM0VV.net]
>>266
代入ではなく入れ換え(swap)。
たとえば大きな配列をぶら下げたポインタだとしても、個々の要素を相互コピーなどせずポインタ値だけすげ替えればよい。
std::swapとかでぐぐってみれば?

268 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 14:18:47.27 ID:octrM0VV.net]
>>266
そのswapにはconstはダメ

269 名前:デフォルトの名無しさん [2015/03/23(月) 19:39:09.35 ID:jYOEZXcw.net]
>>250
3.6 Start and termination[basic.start]
3.6.1 Main function[basic.start.main]
2 An implementation shall not predefine the main function. This function shall not be overloaded. It shall have a return type of type int, but otherwise its type is implementation-defined.

270 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 22:13:35.52 ID:KsjCjkkH.net]
>>267
ポインタじゃないメンバは結局コピーなんだから>>257のやりたいことに対する回答としては的外れだな。
そもそも>>265のイディオムは、Effective C++では、他のオブジェクトをポインタで保持するクラスで自己
代入の場合でも安全にコピーする方法として紹介されているものだし。
ちなみに>>257の質問については、コピーコンストラクタからoperatoe=()を呼ぶのもその逆も間違いで、
共通部分があればそれをprivate関数にして両者から呼ぶようにするべきと説明されている。



271 名前:デフォルトの名無しさん [2015/03/23(月) 22:14:58.99 ID:fVAELCtW.net]
Effective C++で説明されてるってこと?

272 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 22:39:04.03 ID:KsjCjkkH.net]
最後の段落のことであれば、そう。第3版p.57あたり。

273 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 22:55:22.72 ID:k7XREfiY.net]
>>270
>ポインタじゃないメンバは結局コピー
std::vectorを値で持ってる場合とかは?

>自己代入の場合でも安全にコピーする方法
自己代入と言うより例外安全性の問題でしょ?

あと、Effective C++じゃなくてExceptional C++だったと記憶している。

274 名前:デフォルトの名無しさん [2015/03/23(月) 23:00:57.34 ID:2qhNLH+n.net]
&amp;hearts;

275 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 23:05:30.55 ID:k4Iv9Yid.net]
こいつは多分swapがnothrowで実装できる場合が多い事を知らないし
例外安全性に対する認識もないんだろうな
その辺りの前提が無いとcopy & swapは回りくどく無駄な処理に見えても不思議ではない

276 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 23:25:28.43 ID:qYKKxyMs.net]


277 名前:デフォルトの名無しさん mailto:sage [2015/03/23(月) 23:26:08.37 ID:qYKKxyMs.net]
結局どうなの?

278 名前:デフォルトの名無しさん [2015/03/24(火) 00:06:03.95 ID:ci+F9ib3.net]
毛っ、け、け、け(青森県の方言)

279 名前:デフォルトの名無しさん mailto:sage [2015/03/24(火) 07:00:15.11 ID:OlMq8+E5.net]
swapが意味あるメンバ以外はコピー代入で記述することになるから
結局>>265でもコピーコンストラクタとコピー代入のコードの共有にはならない。

280 名前:デフォルトの名無しさん mailto:sage [2015/03/24(火) 09:09:31.31 ID:I6wG2MHB.net]
>>270
コピーコンストラクタからoperator=を呼ぶのではなく、
Copyのような名前のメンバ関数を作っておいて、コピーコンストラクタからもoperator=からも
Copy(rhs);を呼ぶようにするということですね。

たしかにこれなら、コピーする処理のソースコードは一つにできそうです。



281 名前:デフォルトの名無しさん mailto:sage [2015/03/24(火) 10:49:21.59 ID:y8D2IAAg.net]
>>280
operator=からCopy(rhs)を呼ぶようにするなら、その関数内でメンバ変数への値の代入を順次やっていくように思えるんだけど。
x_ = a;
y_ = b;
z_ = c;
みたいにさ。
その問題点は分かってる?

282 名前:デフォルトの名無しさん mailto:sage [2015/03/24(火) 11:49:12.70 ID:mcQ2KYMH.net]
>>280
> たしかにこれなら、コピーする処理のソースコードは一つにできそうです。

くだらない手抜きを嬉しいと思う考え捨てないと危ないぞ

283 名前:デフォルトの名無しさん mailto:sage [2015/03/24(火) 12:56:58.37 ID:XLDH32TT.net]
同じ処理のコードを一つにまとめるのは手抜きじゃないだろ

284 名前:デフォルトの名無しさん mailto:sage [2015/03/24(火) 16:07:13.05 ID:Y088m5Hx.net]
>>283
あいつの場合は例外安全を身に付けるのが先

手抜き重視すると
「全メンバーに対する処理をswapとコピーコンストラクタの両方に書くのメンドクセ。
コピーコンストラクタがコピー代入を呼ぶようにすれば一ヶ所で済むんじゃね?」
に落ち着く

285 名前:デフォルトの名無しさん mailto:sage [2015/03/24(火) 16:32:34.89 ID:CAAyuzcN.net]
本当に手抜き重視するなら生ポインタでメンバー持たずにデフォルト生成のコピーオペレーターとコンストラクタで済ませる

286 名前:デフォルトの名無しさん mailto:sage [2015/03/24(火) 19:50:57.45 ID:y8D2IAAg.net]
>>285
まあそれでも代入演算子を定義するなら同じパターンが必要になるけどね。
実は必要ないってことがほとんど。
上でgetter/setterの話出てたけど、オレは基本代入演算子はdeleteだ。

287 名前:デフォルトの名無しさん mailto:sage [2015/03/24(火) 22:09:19.49 ID:HjFfiljb.net]
なんだか「ボクの読んだExecptional C++に書いてあったやり方以外は認めない」
って低能がいるようだな

288 名前:デフォルトの名無しさん mailto:sage [2015/03/24(火) 22:29:55.90 ID:rpeH1el6.net]
くだらない手抜きを嬉しいと思う考え捨てないと危ないぞ

289 名前:デフォルトの名無しさん mailto:sage [2015/03/24(火) 22:35:21.24 ID:CAAyuzcN.net]
手を抜けるところは抜くべきだろ
何言ってんだ

290 名前:デフォルトの名無しさん mailto:sage [2015/03/24(火) 22:41:25.26 ID:rOFSYfDv.net]
あと保守性だよな
同じコード2箇所に書いて片方だけ修正し忘れとか嫌



291 名前:デフォルトの名無しさん mailto:sage [2015/03/24(火) 22:46:37.72 ID:rpeH1el6.net]
>>289
おまえ下らない手抜きしてんのか?
どうしようもない奴だな。

292 名前:デフォルトの名無しさん mailto:sage [2015/03/24(火) 22:49:20.96 ID:rOFSYfDv.net]
下らない手抜きって、例えばどういう?

293 名前:デフォルトの名無しさん mailto:sage [2015/03/24(火) 22:52:48.14 ID:CAAyuzcN.net]
何かのネタかと思ってググってしまったよ…

294 名前:デフォルトの名無しさん mailto:sage [2015/03/24(火) 22:55:18.39 ID:rpeH1el6.net]
いや、わからん。
>>282のマネをしてみただけ。

295 名前:デフォルトの名無しさん mailto:sage [2015/03/24(火) 22:56:41.14 ID:rpeH1el6.net]
流れを追ってみたが、誰の発言がどうダメなのか判断できなくなって発狂してしまった。
許してください。

296 名前:デフォルトの名無しさん mailto:sage [2015/03/24(火) 23:00:08.42 ID:rOFSYfDv.net]
していたのは下らない手出しだったか

297 名前:デフォルトの名無しさん mailto:sage [2015/03/24(火) 23:01:42.41 ID:07528NRI.net]
>>292
この流れで出てる手抜き例は>>257だけかと
違ってたら他は知らん

298 名前:デフォルトの名無しさん mailto:sage [2015/03/24(火) 23:10:39.85 ID:rpeH1el6.net]
>>257か...
コピーコンストラクタは失敗しても構わない。だから operator = に依存しても別に構わない。

だけど operator = それ自体は例外安全を考慮する必要がある。(*thisの整合性を守らなければならない)
そうすると・・・

なんか循環してない?

299 名前:デフォルトの名無しさん mailto:sage [2015/03/24(火) 23:12:50.12 ID:OlMq8+E5.net]
始まりは>>258のような気がするな。
逆に突っ込まれたのを取り繕おうとしてグダグダになるパターンのような。

300 名前:デフォルトの名無しさん mailto:sage [2015/03/24(火) 23:23:37.91 ID:31iHMNlf.net]
template<typename T> struct C1 {
T x,y,z;
void swap(T&r){std::swap(x,r.x);std::swap(y,r.y);std::swap(z,r.z);}
C1(const C1&r):x(r.x),y(r.y),z(r.z){}
C1&operator=(const C1&r){C1 tmp(r);swap(tmp);return*this;}
};

template<typename T> struct C2 { // 手抜き
T x,y,z;
C2(const C2&r){*this=r;}
C2&operator=(const C2&r){x=r.x;y=r.y;z=r.z;return*this;}
};



301 名前:デフォルトの名無しさん mailto:sage [2015/03/24(火) 23:25:48.60 ID:CAAyuzcN.net]
俺のオススメは >>285 にも書いたけど生ポインタをメンバーに入れず出来る限りコピーコンストラクタ、コピー演算子はデフォルト生成のものを使う
メンバーに可変長の配列欲しければstd::vector
コピー不可なポインタ持ちたければstd::unique_ptr

moveにも自動で対応してくれる

302 名前:デフォルトの名無しさん mailto:sage [2015/03/24(火) 23:27:30.38 ID:X8yhOJK8.net]
>>300
C1はネットの世界で一部の例外安全厨だけが言ってる
そんな回りくどいこと実務でやってたら干されたりクビになったり蹴られたり刺されたりするからやめとけよ

303 名前:デフォルトの名無しさん mailto:sage [2015/03/24(火) 23:44:44.24 ID:rpeH1el6.net]
>>299
あー
>>265がデタラメだから?

304 名前:デフォルトの名無しさん mailto:sage [2015/03/24(火) 23:55:30.28 ID:rpeH1el6.net]
>>301
すいませんが教えてください。
自分が作ったんじゃないクラスがA B のふたつあって、
A a;

B b;
をメンバに持つときってコピー演算子はどうしてますか?

305 名前:デフォルトの名無しさん mailto:sage [2015/03/25(水) 00:10:38.94 ID:IfOZa4FK.net]
設計について相談なんですが
class A : public Base {...};
class B : public Base {...};
std::vector< std::unique_ptr< Base > > objs;
objs.push_back( std::unique_ptr< A >( new A() ) );
objs.push_back( std::unique_ptr< B >( new B() ) );
異なるクラスを同一のコンテナに格納したくて抽象クラスを継承させる方法で試してみたのですが、純粋仮想関数が増えまくってやめてしまいました。
具体的にはコンテナに格納したオブジェクトの順番を管理したいのですが、何かうまい方法ありませんでしょうか。

306 名前:デフォルトの名無しさん mailto:sage [2015/03/25(水) 00:24:56.55 ID:GA9WsxhK.net]
>>304
何もしない
AかBがコピー禁止してるなら訳あっての事だろうから自動的にそれらをメンバーに持つクラスもコピー禁止

>>305
shared_ptrかweak_ptrで入れれば?
必要な所で派生の型で持っとく

307 名前:デフォルトの名無しさん mailto:sage [2015/03/25(水) 00:37:14.42 ID:1YXCDFuZ.net]
コピィ代入なんか使わない俺
スマポとか特殊なクラス以外でコピィ要らなくね?
どんな時に使うんだよ

308 名前:デフォルトの名無しさん mailto:sage [2015/03/25(水) 00:37:54.83 ID:IfOZa4FK.net]
>>306
dynamic_castして持っておくってこと?
dynamic_castって何となく抵抗あるんですよね。みんな普通に使ってるのかな。

309 名前:デフォルトの名無しさん mailto:sage [2015/03/25(水) 00:40:32.91 ID:GA9WsxhK.net]
>>308
違う
生成してshared_ptrに入れてそのまま持っとけばいいだろ

310 名前:デフォルトの名無しさん mailto:sage [2015/03/25(水) 00:42:06.53 ID:2VS3tjRn.net]
>>306
いや、AもBも別にコピーは禁止してないです。ただ例外発生の可能性はあり。
こいつらをメンバに持つクラスを作って、代入演算子も書かなきゃならないときのはなしです。



311 名前:デフォルトの名無しさん mailto:sage [2015/03/25(水) 00:44:29.60 ID:GA9WsxhK.net]
万が一知らなかった時の為に言っておくけど、
shared_ptr<A>をshared_ptr<void>に入れることが出来る。
順番を保持したいだけなら(それをどうするのか知らんが)std::vector<void>に突っ込めばいい

>>310
なんで代入演算子を書く必要があんの?

312 名前:デフォルトの名無しさん mailto:sage [2015/03/25(水) 00:47:50.97 ID:2VS3tjRn.net]
>>311
>なんで代入演算子を書く必要があんの?

問題のための問題です。

313 名前:デフォルトの名無しさん mailto:sage [2015/03/25(水) 00:53:27.12 ID:IfOZa4FK.net]
>>311
知らなかった!ありがとう。
いまパーサを書いててそのために順番が必要なんだ。
これで試してみます。

314 名前:デフォルトの名無しさん mailto:sage [2015/03/25(水) 01:16:54.43 ID:GA9WsxhK.net]
>>313
shared_ptr<Derived>から shared_ptr<Base>とか、キャストの必要ない方向へのポインタの変換なら出来る。
parserなら親子とか出てくるかもしれんが循環参照に気を付けなよ

315 名前:デフォルトの名無しさん [2015/03/25(水) 08:25:13.60 ID:Cs/cNnzy.net]
void型のポインタに突っ込むなんてまじでやめて

316 名前:デフォルトの名無しさん mailto:sage [2015/03/25(水) 08:36:25.42 ID:GA9WsxhK.net]
>>315
理由は?
voidポインタからキャストして使えと言ってるわけでは”ない”というのを理解して言ってるわけだよね?

317 名前:デフォルトの名無しさん [2015/03/25(水) 08:56:10.92 ID:Cs/cNnzy.net]
「キャストして使えと言ってるわけではないからvoid型ポインタは正しい!」

なんだこの理論

318 名前:デフォルトの名無しさん mailto:sage [2015/03/25(水) 09:06:09.40 ID:GA9WsxhK.net]
>>317
いやだからダメな理由言えよ

319 名前:デフォルトの名無しさん [2015/03/25(水) 09:17:47.71 ID:Cs/cNnzy.net]
void型ポインタがなぜ悪いかなんていまさら語る意味なんぞないし
パーサー用途と言ってんだからキャストして使わないなんて前提も無意味だな

320 名前:デフォルトの名無しさん mailto:sage [2015/03/25(水) 09:23:28.73 ID:qHyR6V3I.net]
ここのところずーっと
手抜き厨と反手抜き厨のバトルばかり



321 名前:デフォルトの名無しさん mailto:sage [2015/03/25(水) 09:27:55.13 ID:GA9WsxhK.net]
はあ…語れないなら黙っとけよ

よく知らない奴がアホに流されないようにshared_ptr<void>の有効な使い方の例が書かれたブログ記事置いとくよ

ttp://d.hatena.ne.jp/Cryolite/touch/20080122/p7

322 名前:デフォルトの名無しさん mailto:sage [2015/03/25(水) 09:37:38.66 ID:xvQRm8Zy.net]
>>320
うーん、>>281の質問に対して誰かが答えれば論点がクリアになると思うんだけどね。
自分としてはどっちの意見も100%いい悪いと断言できないと思う。

323 名前:デフォルトの名無しさん mailto:sage [2015/03/25(水) 09:47:15.66 ID:xvQRm8Zy.net]
>>321
ああデストラクタ呼び出しですか。
目的は違うけどstd::functionがやってる技法使うやつ?

324 名前:デフォルトの名無しさん [2015/03/25(水) 19:36:09.60 ID:IhUE1Xul.net]
//1
template<typename F>
void g( F f){
f();
}
//2
template<typename F>
void g(){
F f;
f();

}
1も2もあるのに
なぜ1がつかわれるのですか?

325 名前:デフォルトの名無しさん mailto:sage [2015/03/25(水) 19:38:59.43 ID:YRj0jYVL.net]
1は関数オブジェクトも渡せるからな

326 名前:デフォルトの名無しさん mailto:sage [2015/03/25(水) 20:09:20.15 ID:sC+pepL9.net]
それを言うなら関数ポインタだろて

327 名前:デフォルトの名無しさん mailto:sage [2015/03/25(水) 20:28:35.18 ID:IATtsD4X.net]
2だとfへ引数渡せないじゃん

328 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/03/25(水) 20:41:12.54 ID:0It7vtDM.net]
関数オブジェクトは状態を持つことができるからな。

329 名前:デフォルトの名無しさん mailto:sage [2015/03/25(水) 20:49:46.76 ID:CQ7NAuEE.net]
>>324
コストラクタに自由がないと困るよ

330 名前:デフォルトの名無しさん mailto:sage [2015/03/25(水) 20:50:54.98 ID:Dwma7Few.net]
JKにつきまとい事例



331 名前:デフォルトの名無しさん [2015/03/26(木) 14:16:39.05 ID:9iu5R64g.net]
74LS107

332 名前:デフォルトの名無しさん mailto:sage [2015/03/26(木) 17:08:05.75 ID:BDjvcE7V.net]
n桁のm進数の桁を入れ替えるプログラムを作りたいのですが、どうしたら効率的でしょうか。
桁数分(n個)ループを回すような愚直な方法しか思い付きません。

任意の並び替えを実現したいのですが、「○桁目を右に△個ずらす」ようなアルゴリズムでも構いません。
それを何回かやれば任意のケースに対応できると思うので。

nは16まで、mは64までに限っても良いです。

333 名前:デフォルトの名無しさん [2015/03/26(木) 17:40:04.67 ID:4eocBIkU.net]
char C[16];

swap(C[x], C[y]);

334 名前:デフォルトの名無しさん mailto:sage [2015/03/26(木) 18:10:22.30 ID:DVfty8jF.net]
二進数を考える。
左シフトはN*2^M 右シフトはN/2^Mだよな。
これを一般化して、N*Radix^Mで左シフト N/Radix^Mで右シフト
出来そうじゃね?

335 名前:デフォルトの名無しさん mailto:sage [2015/03/26(木) 18:15:03.52 ID:DVfty8jF.net]
結局POW使うんであればループは避けられん。か?

336 名前:デフォルトの名無しさん mailto:sage [2015/03/26(木) 18:19:03.95 ID:nSqXA52d.net]
設計に制限がなければ
n桁m進数表現クラスを作ってその桁を入れ替える、って素直にやるけど

337 名前:デフォルトの名無しさん mailto:sage [2015/03/26(木) 18:25:41.64 ID:BDjvcE7V.net]
自分で言うのもなんですが>>332に書いた愚直な方法だとコストはO(m^n)で最悪ですね。

338 名前:デフォルトの名無しさん [2015/03/26(木) 18:26:10.15 ID:4eocBIkU.net]
なるべく一変数(多倍長一変数も)でやりたいなら
m < 2 ^ k となる最小のkを見つけて2進k桁の移動をする。

339 名前:デフォルトの名無しさん [2015/03/26(木) 18:29:36.94 ID:4eocBIkU.net]
>>338だと全体の数値がいい加減だった。
各桁を一変数にいれたほうがいいな。
結局、数値を取り出そうとすると同程度のコストだ。

340 名前:デフォルトの名無しさん mailto:sage [2015/03/26(木) 18:32:38.24 ID:nSqXA52d.net]
n桁m進数をx (>0)とする
i桁の数字x_i = (x - (x / m^(i+1) ) * m^(i+1)) / m^i
^は指数演算 /は整数同士の割り算であまり切り捨て
i桁とj桁の入れ替えは
x = x + (x_i-x_j) * (m^j - m^i)
これで行けるかな?



341 名前:デフォルトの名無しさん mailto:sage [2015/03/26(木) 18:46:41.53 ID:DVfty8jF.net]
ttp://ideone.com/vghSif
手抜きで書くんだったらこんな感じだけど、数学的にやったらもっと別の解があるのかなー??
俺、数学ダメだから識者に任せる。

342 名前:デフォルトの名無しさん mailto:sage [2015/03/26(木) 20:10:26.73 ID:BDjvcE7V.net]
もし、任意の入れ替えを諦めてサイクリックな置換にだけ対応しようとしたらコスト減らせたりするでしょうか。

例えば8桁の
abcdefgh

ghabcdef
に入れ替えるようなケースです。

343 名前:デフォルトの名無しさん mailto:sage [2015/03/26(木) 20:19:07.25 ID:BDjvcE7V.net]
配列要素全部を入れ替えようとしなければ>>340で一発ですかね?
ちょっと考えてみます。

344 名前:デフォルトの名無しさん [2015/03/28(土) 18:45:50.47 ID:EQ3zAKR0.net]
ポインターって識別子として使ってもいいのか?
時間によって値が変わるとかないよな?

345 名前:デフォルトの名無しさん mailto:sage [2015/03/28(土) 20:37:48.75 ID:/OKG1/Xj.net]
問題ないよ、ポインタが有効な間は。

346 名前:デフォルトの名無しさん [2015/03/28(土) 20:38:30.01 ID:EQ3zAKR0.net]
非有効でもハッシュテーブルのキーとして使ってもいいですよね。

347 名前:デフォルトの名無しさん mailto:sage [2015/03/28(土) 21:42:14.53 ID:HPuG9XXV.net]
いいよ、ポインタなんてただの数字だよ。

348 名前:デフォルトの名無しさん mailto:sage [2015/03/28(土) 21:50:37.06 ID:LYzvh/ES.net]
数字 w

349 名前:デフォルトの名無しさん [2015/03/28(土) 22:02:14.95 ID:wVsC1fdL.net]
そりゃあ、数字だよな。10進数が16進数や2進数になってるだけだし。





でも、「数字」じゃなくて「数値」と言って欲しかった

350 名前:デフォルトの名無しさん mailto:sage [2015/03/29(日) 02:18:34.60 ID:abbduuww.net]
>>342
そりゃ、簡単にできる。
Rubyでは例えば、配列の先頭要素を削除する、shiftでも、
一々、別の配列にコピーしないで、同じ配列を使う

配列の要素のstart位置を、0から1へ変えて、
配列の要素数、lengthを1減らし、
要素[0]には、nilを代入する


同様に、start, end位置を管理すれば、
コピーすることなしに、その配列をそのまま使える



351 名前:デフォルトの名無しさん mailto:sage [2015/03/29(日) 03:38:15.93 ID:gsIKbDqn.net]
>>346
寿命が尽きたオブジェクトへのポインタを使った場合の動作は保証されないよ。

352 名前:デフォルトの名無しさん mailto:sage [2015/03/29(日) 04:28:35.51 ID:xroka6Go.net]
>>350
CやC++でも?






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<79KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef