[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 08/07 16:31 / Filesize : 257 KB / Number-of Response : 1034
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

C++相談室 part150



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

前スレ
C++相談室 part149
https://mevius.5ch.net/test/read.cgi/tech/1581974381/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
mevius.5ch.net/test/read.cgi/tech/1556142878/


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

[C++ FAQ]
https://isocpp.org/wiki/faq/
www.bohyoh.com/CandCPP/FAQ/ (日本語)

テンプレここまで

2 名前:デフォルトの名無しさん mailto:sage [2020/03/24(火) 02:17:13.57 ID:9OEj9KSc.net]
「ちんちんプラプラソーセージ」という言い伝えがあるがの、
それは、「C + + 双生児」、つまり、C++と双璧をなす言語の出現を予言したものだったのだよ。

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

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

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

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

#include <stdafx.h>
後死ね。

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

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

4 名前:デフォルトの名無しさん mailto:sage [2020/03/24(火) 14:30:36 ID:dZNjE6fy.net]
すげーSTLで外出しされると思ってる馬鹿がいるぞ

5 名前:◆QZaw55cn4c mailto:sage [2020/03/24(火) 23:27:02 ID:KtfI6cNR.net]
https://mevius.5ch.net/test/read.cgi/tech/1581974381/937

https://ideone.com/Jso95a
江添さんが間違って「末尾再帰である」と断定した記述方法 f() を、
正しく末尾再帰で記述すると g() になります。
これを最適化して h() とするのには、関数 g() を特別に解析することなく機械的に変換するだけでいいのです
最適化に機械的に変換するだけでいい、というのが末尾再帰の本質です

したがって >>934 の制限は妥当でしょうね

6 名前:デフォルトの名無しさん mailto:sage [2020/03/25(水) 07:20:29 ID:2w2fR+tZ.net]
941 自分:デフォルトの名無しさん[sage] 投稿日:2020/03/21(土) 19:59:14.68 ID:uResqVEz [3/3]
「末尾再帰」という情報処理用語を定義しているJIS規格票もしくは
"tail recursion" という情報処理用語を定義しているISO規格票の
条項を出せるやついるの?

これだけ上から目線でマウント取っといて
あげくオレ用語だったら恥ずかしいぞ

7 名前:はちみつ餃子 mailto:sage [2020/03/25(水) 17:42:48.23 ID:lGt7vmdl.net]
JIS X 0007 に「再帰」に関連するいくつかの用語があるけど、
その周辺に「末尾再帰」は書かれていないので情報処理用語の規格として
定義されたものはたぶんないんだろうと思う。

用語として定義されてはいないけど、
DSSSL の規格 (JISX4153) に「実装は、正しく末尾再帰を扱えなければならない」という文言として
現れているのは見つけた。
DSSSL がベースにしているのが R4RS (← Scheme の規格の第4版の通称) であることも書いてあるから
ここでいう末尾再帰は R4RS が言う末尾再帰だと考えていいと思う。
だけど R4RS だとどういう場合が末尾再帰なのかようわからんのよなぁ。
(形式的意味論で書いてあるところを読み解ける人にはわかるのかもしれない。)

R5RS 以降だとだいぶん分かりやすく書いてあるんだけど。

8 名前:デフォルトの名無しさん mailto:sage [2020/03/25(水) 18:35:34.29 ID:iLx6+8HG.net]
8コアマシンでninja -j4 -l4すると固まるんだけどninja何してんの

9 名前:デフォルトの名無しさん mailto:sage [2020/03/25(水) 19:58:22.06 ID:qvXjJ9lz.net]
汚いことに決まってんだろ

10 名前:デフォルトの名無しさん mailto:sage [2020/03/25(水) 21:43:33 ID:JWtS3Wj0.net]
アイエエエエエ



11 名前:デフォルトの名無しさん mailto:sage [2020/03/25(水) 21:45:30 ID:uGR4bFBq.net]
ninjaずるい

12 名前:デフォルトの名無しさん mailto:sage [2020/03/25(水) 21:50:47 ID:lUBLXJbP.net]
ninjaだいすき

13 名前:デフォルトの名無しさん mailto:sage [2020/03/26(木) 00:08:16.23 ID:fd5gxTEt.net]
忍者だが、電車に乗っていたら下痢したのでそおっと席を立ち駅に向かったらしい

14 名前:デフォルトの名無しさん mailto:sage [2020/03/26(木) 03:05:23.06 ID:7mWqVwqc.net]
汚いなさすが忍者きたない

15 名前:デフォルトの名無しさん [2020/03/27(金) 12:47:40 ID:yDbWAejo.net]
禿げや江添さん

16 名前:見て分かる通り。
禿げてる。
[]
[ここ壊れてます]

17 名前:デフォルトの名無しさん mailto:sage [2020/03/27(金) 21:04:21.22 ID:MA/4mtFY.net]
禿が作った言語は長生きするんだっけ?

18 名前:デフォルトの名無しさん mailto:sage [2020/03/27(金) 22:52:04.36 ID:eQxgR1y2.net]
ウルセー ハゲハダマッテロ
    ∧___∧    / / / /
  ⊂( ・∀・)  、,Jし //  パン
   (几と ノ   )  て.彡⌒ ミ 
  //'|ヽソ 彡  Y⌒Y( ´;ω;`)   
/ノ / | \ 彡      l r  Y i|
ヽ/、/ヽ/ ヽ/        U>>3|:_|j

19 名前:デフォルトの名無しさん mailto:sage [2020/03/28(土) 02:01:55 ID:8uQkqVES.net]
髭だろ
ハゲが作った言語なんてc++しか思い浮かばない

20 名前:デフォルトの名無しさん [2020/03/28(土) 09:50:32 ID:laMmnOq7.net]
ハゲが作った移動通信会社なんて知らない



21 名前:デフォルトの名無しさん [2020/03/28(土) 16:10:38 ID:jYzb+dLM.net]
Visual Studio C++ 2019 にて、パフォーマンスプロファイラーを使うと、
__CheckForDebuggerJustMyCode
という関数が呼び出されていて結構な負荷になっています。

デバッグ時にこれをOFFにしたいのですが、どうやって消せばよろしいのでしょうか?

22 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/03/28(土) 16:39:28 ID:FOAUxWzd.net]
>>20
私は Visual Studio を導入していないので試してないけど公式な情報があるやが。
https://docs.microsoft.com/ja-jp/cpp/build/reference/jmc?view=vs-2019

23 名前:デフォルトの名無しさん [2020/03/28(土) 17:20:15.83 ID:jYzb+dLM.net]
>>21
見逃してたけろ(´・ω・`)

ありがとう

24 名前:◆QZaw55cn4c mailto:sage [2020/03/28(土) 20:30:35 ID:WJROMx30.net]
江添氏 C++ 入門にまた誤りを見つけました
https://ezoeryou.github.io/cpp-intro/#nannot-a-number
> int main() {
> double NaN = std::numeric_limits<double>::quiet_NaN() ;
> // true
> bool b = NaN != 0.0 ;
> // false
> bool a = NaN == 0.0 ;
> bool c = NaN == NaN ;
> bool d = NaN != NaN ;
> bool e = NaN < 0.0 ;
>}
こちらで試してみると、bool c = NaN != NaN の値は true でした。
https://ideone.com/dzmyeq

>整数であれば、'a == b'がfalseであるならば、'a != b'なのだと仮定してもよいが、こと浮動小数点数の場合、NaNの存在があるために必ずしもそうとは限らない。
残念ながら、a, b, のいずれかまたは両方が Nan であっても、a == b が false ならば a != b true であることを確かめました

江添さん、だいじょうぶですかね?

25 名前:◆QZaw55cn4c mailto:sage [2020/03/28(土) 20:33:39 ID:WJROMx30.net]
失礼
×bool c = NaN != NaN の値は true でした。
○bool d = NaN != NaN の値は true でした。
訂正箇所は他にはなく、「a == b が false ならば a != b true であることは、double a, b が NaN であってもいえる」

26 名前:デフォルトの名無しさん mailto:sage [2020/03/28(土) 23:03:59.81 ID:TAn8n6A3.net]
3/14は円周率の日
とくに2015年はアメリカ式日付表記で3/14/15なので100年に1回だったという、

■ Googleの円周率31兆4000億桁までの計算について、きちんと解説
https://www.blog

27 名前:.umentu.work/google-circle-3-14/

■ 多倍長計算の技法(3章)
http://www.kurims.kyoto-u.ac.jp/~ooura/pi04.pdf
[]
[ここ壊れてます]

28 名前:デフォルトの名無しさん mailto:sage [2020/03/28(土) 23:04:23.60 ID:TAn8n6A3.net]
誤爆すたorz

29 名前:デフォルトの名無しさん mailto:sage [2020/03/29(日) 00:16:32.66 ID:t2YV962W.net]
江添のことはほっといてやれよ。。

30 名前:デフォルトの名無しさん mailto:sage [2020/03/29(日) 01:26:13 ID:sawiSEmu.net]
>>23-24 少しでも被害者を減らすために issue 立てといてもらえませんかね?



31 名前:デフォルトの名無しさん mailto:sage [2020/03/29(日) 01:55:28.30 ID:tSgWoZoj.net]
村上原野が死亡。
Sprout はど〜なっちゃうの〜

32 名前:デフォルトの名無しさん [2020/03/29(日) 01:57:11.38 ID:KAJzXRPk.net]
デザインパターンのブリッジパターンやストラテジパターンのようなケースで
インターフェースクラスを継承して実装クラスを作る場合、
class If() /* interface */
{
public:
If() {}
virtual ~If*( {}
virtual void func() {}
};

class Impl() : public If
{
public:
Impl() {}
~Impl() {}
void func() {}
};

のようにすると思いますが、Implクラスをさらに基底クラス(ImplBase)と2種類の派生クラス(ImplA, ImplB)に分けたい場合、
多重継承以外でやるには、どうするのが良いでしょうか?
まず If を ImplBase に継承させて、次に ImplBase を ImplA と ImplB に継承させる事になるでしょうか?
その場合、純粋仮想関数func()はどのように書くべきでしょうか? ImplBase も virtual void func()としておいて
ImplA で実装するのでしょうか?

33 名前:デフォルトの名無しさん mailto:sage [2020/03/29(日) 02:19:11.85 ID:p3fh4h77.net]
constexprの中二女子亡くなってたのか・・・

34 名前:デフォルトの名無しさん mailto:sage [2020/03/29(日) 02:26:21.63 ID:p3fh4h77.net]
>>30
ImplBaseにどんな役割を持たせたいかによるんじゃない?
ImplAとImplBがそれぞれIfを継承するのでは何が不満なのかをハッキリしないと何を解決すればいいのかわからない

35 名前:デフォルトの名無しさん mailto:sage [2020/03/29(日) 08:26:45 ID:zFUy7lJg.net]
>>29
え、持病でもあったの?

36 名前:デフォルトの名無しさん mailto:sage [2020/03/29(日) 09:05:51.82 ID:GFdzppn9.net]
中二で死ぬって早すぎないか

37 名前:デフォルトの名無しさん mailto:sage [2020/03/29(日) 10:02:27 ID:+/sFre8I.net]
>>23
NaNが「不定」を意味するなら、理論的には
> // false
> bool c = NaN == NaN ;
> bool d = NaN != NaN ;
が正しいんだろう
仕様は上のようになってて、実装依存ということはないか?

38 名前:デフォルトの名無しさん mailto:sage [2020/03/29(日) 10:26:02 ID:zyhHBMyS.net]
NaNとの!=以外の比較演算は常にfalse、!=は常にtrue
ってするのが普通みたいだけど

39 名前:デフォルトの名無しさん mailto:sage [2020/03/29(日) 10:36:40 ID:oQB7eLYm.net]
そもそも非数に「等しい」なんて場合があるのか?
数学的におかしくね?

40 名前:デフォルトの名無しさん mailto:sage [2020/03/29(日) 10:49:11 ID:+/sFre8I.net]
本来は「非数」なら「等しくない」も議論できない気がするのでなんとも
0/0->NaNなら「不定」と解釈してもおかしくないし、その場合、
NaN!=NaNは「ほとんどの場合に正しい」としか言えない



41 名前:デフォルトの名無しさん mailto:sage [2020/03/29(日) 11:12:19 ID:CNNBvMSR.net]
!=は==の否定だから、NaN == NaNはfalseなので
NaN != NaN -> !(NaN == NaN) はtrue
ほかの等値比較の意味論に合わせてるんだと

42 名前:デフォルトの名無しさん mailto:sage [2020/03/29(日) 11:22:58 ID:sawiSEmu.net]
>>35
std::numeric_limits<T>::is_iec559 (IEEE 754) の場合は NaN!=NaN に定まる模様。
https://stackoverflow.com/questions/38798791/nan-comparison-rule-in-c-c
> I read the IEEE-754 rules on NaN, which states:
>> The comparisons EQ, GT, GE, LT, and LE, when either or both operands is NaN returns FALSE.
>> The comparison NE, when either or both operands is NaN returns TRUE.

C++の規定はこう。
www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/n4849.pdf [expr.eq]
(C++14でも同じ https://timsong-cpp.github.io/cppwp/n4140/expr.eq#5 )
> If two operands compare equal, the result is true for the == operator
> and false for the != operator. If two operands compare unequal,
> the result is false for the == operator and true for the != operator.
> Otherwise, the result of each of the operators is unspecified.
これだけなら「equalでもunequalでもない」として結果を不定とする実装もあり得る。

ただしCの規定には以下のものがある。
www.open-std.org/jtc1/sc22/wg14/www/docs/n2454.pdf Equality operators
> The == (equal to) and != (not equal to) operators are ...
> For any pair of operands, exactly one of the relations is true.
これによれば NaN==NaN, NaN!=NaN を両方 false とするCの実装は許されない。
わざわざこれに反するようなC++の実装が作られる理由は無さそうだし、受け入れられることも無さそう。

43 名前:デフォルトの名無しさん mailto:sage [2020/03/29(日) 13:05:33.90 ID:0VKwdtls.net]
ieee754の書き方が難しすぎて何処をどう読めばNaN!=NaNになるのか分からん…

44 名前:デフォルトの名無しさん mailto:sage [2020/03/29(日) 13:28:15.35 ID:oQB7eLYm.net]
現実は>>39なんだろうけど
原理主義的にはNaNの比較は例外を投げるべき

45 名前:デフォルトの名無しさん [2020/03/29(日) 13:57:09.44 ID:vg0TAzW0.net]
NaNを無限と言い換えて数学的な議論をするしかない

46 名前:デフォルトの名無しさん mailto:sage [2020/03/29(日) 15:32:11 ID:nDbo81n4.net]
みんな大好き超準解析、

47 名前:デフォルトの名無しさん mailto:sage [2020/03/29(日) 15:32:36 ID:CNNBvMSR.net]
実際こんなのもある
https://cpprefjp.github.io/reference/compare/strong_order.html

48 名前:デフォルトの名無しさん mailto:sage [2020/03/29(日) 16:10:11.53 ID:p3fh4h77.net]
江添が悪い
たぶんx==xが常に真になるとは限らない(xがNaNの場合)って話を間違えて覚えてたんだろ

49 名前: mailto:sage [2020/03/29(日) 16:13:08.71 ID:GnieE+99.net]
>>28
私は江添氏の本を買って読んでおり、個人的に非常に参考になる、どちらかといえば良書の部類だと考えておりますので
「被害者を減らす」という発想はありえないのです

50 名前:はちみつ餃子 mailto:sage [2020/03/29(日) 16:39:47.96 ID:tSgWoZoj.net]
>>47
総合的な判断がどうあれそこが間違ってるなら間違ってるだろ。



51 名前:デフォルトの名無しさん mailto:sage [2020/03/29(日) 17:54:48 ID:oQB7eLYm.net]
江添氏はブログを立てて不特定多数の一般人からの指摘を待っている
誤りの指摘はそこでやれ、それが「被害者を減らす」ことにつながる

江添が見ている保証のないこんなところで正義面しても
そういう筋が何もわかっちゃいないやつというだけだ

52 名前: mailto:sage [2020/03/29(日) 18:15:14.00 ID:GnieE+99.net]
>>49
私個人では誤りを指摘するのには非力でしょう、したがってここで相談してから正式な申し入れをする手順を踏みたいと思います、それが読者のため、江添氏のためでもあります
査読を継続します

53 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/03/29(日) 18:27:59 ID:tSgWoZoj.net]
本当に間違っているという確信がなくて事前に相談するってのならまあそれもいいんじゃないの。

54 名前:デフォルトの名無しさん [2020/03/29(日) 18:41:01 ID:xWXht+2h.net]
江添さんに聞くのが一番速い。

55 名前:デフォルトの名無しさん mailto:sage [2020/03/29(日) 22:23:18 ID:6MT5MhMu.net]
ここ見てそうだしな

56 名前:デフォルトの名無しさん mailto:sage [2020/03/30(月) 00:19:48 ID:DkauJosI.net]
あの人もうスノボに夢中でC++に興味なさそう

57 名前:デフォルトの名無しさん mailto:sage [2020/03/30(月) 01:01:09 ID:PZnOEjGK.net]
C++なんかやってるのにスノボもやってるのか異端だな

58 名前:デフォルトの名無しさん mailto:sage [2020/03/30(月) 09:52:17 ID:6jBFblvz.net]
githubのissue放置してるじゃん

59 名前:デフォルトの名無しさん mailto:sage [2020/03/30(月) 13:41:16.50 ID:hh56tBZl.net]
ベクトルが二つあって重複部分を差分取得になるように結合したいです
in
1,2,3,4
3,4,5,6
out
1,2,3,4,5,6
重複がなければそのまま結合でいいです

60 名前:デフォルトの名無しさん [2020/03/30(月) 19:24:54.69 ID:ubfGsS+F.net]
std::sort
std::unique
std::set_union



61 名前:デフォルトの名無しさん mailto:sage [2020/03/30(月) 19:28:43 ID:Oymj8mf6.net]
>>57
その程度なら、ネットで検索して見つからないようなら、手で書いたほうが早いね。
2つの列を共にソートしたあと、マージソートの様に左端から順に比較して同じなら
1つ分だけ dest にコピーするようにすれば良いだけ。

62 名前:デフォルトの名無しさん mailto:sage [2020/03/30(月) 19:44:49 ID:UMPMfaDu.net]
標準委員から無視されていじけてるんだろう。ショーもねー奴だよ。

63 名前:デフォルトの名無しさん mailto:sage [2020/03/31(火) 00:16:01 ID:FylkZaNQ.net]
new, deleteとか手動でやるのはもう古すぎて使わない?スマートポインタ使うのが普通?

64 名前:デフォルトの名無しさん mailto:sage [2020/03/31(火) 01:00:25.49 ID:oKg2nb+1.net]
必要な時は使えばいいと思うけど自分は全く使わなくなった

65 名前:デフォルトの名無しさん mailto:sage [2020/03/31(火) 01:34:17.99 ID:s0jfH2wf.net]
初めてクラスを使ったのですが、forループの中で関数のように使う場合には
1. 毎回デフォルトコンストラクタに引数を食わせて初期化してからgetterで計算する
2. 初期化はループの外でして置いてループ内ではsetterなどで引数を読み込ませてからgetterで計算する

どちらの方が良いんですかね?

あと、あるメンバ変数に連動したメンバ変数みたいなものって作れますか?
int _a
int _b = _a / 2みたいなものです

66 名前:デフォルトの名無しさん mailto:sage [2020/03/31(火) 01:43:07.29 ID:oKg2nb+1.net]
後半の方はint getHalfA()みたいなメンバ関数を設ければいい
前半は関数オブジェクトのこと?何言ってんのかわからん

67 名前:デフォルトの名無しさん mailto:sage [2020/03/31(火) 03:22:08 ID:Yt3qMdaP.net]
>>63
1,2は、速度面以外ではどちらでもいいが、速度を重視するなら2。
なお、getter, setter は元々、巨大なプログラムでバグを減らすために発明されたようなものだから、小さいプログラムでは特に使う必要は無い。

68 名前:デフォルトの名無しさん mailto:sage [2020/03/31(火) 03:28:43 ID:Yt3qMdaP.net]
>>65
C#では、getter, setter を凄く高頻度で使ってもいいような設計思想なのかもしれないが、かなり意見が分かれるところ。
クラスを保護する目的では使っても良いが、普通の代入とは動作を変えてしまいすぎる
ようなものは想定した動作との勘違いによる逆にバグの元になる可能性があるのでお勧めしない。
使い道があるのは、代入箇所や読み取り箇所の動作の変更を手作業や grep 置換に頼らずに確実に行いたいような場合だと思うが、小規模なプログラムでは単純に手作業や grep 置換で直した方がよい。
新しい機能は大宣伝されるので初心者が飛び付きがちだが、実は余り普段は使わないほうが良い機能であることもかなり多いので注意。

69 名前:デフォルトの名無しさん [2020/03/31(火) 08:10:50 ID:Zjo4xAEk.net]
>>63
教条主義なら1番
毎ループの中でオブジェクトはそれぞれ異なる
今回の関数Aと前回の関数Aは別物である、という思想になる
逐一newするとそれっぽくなる

70 名前:デフォルトの名無しさん mailto:sage [2020/03/31(火) 10:02:16 ID:OTxurRkT.net]
>>63
そういう問題を自分が求めるパフォーマンスレベルに最適化できる(やらなきゃならん)のがc++だぞ。



71 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/03/31(火) 10:16:06 ID:Ow5tuxOJ.net]
>>63
デフォルトコンストラクタは引数をとらないコンストラクタのことなのでなんか勘違いしてるぞ。

実行コストか抽象化の都合でどうしても事前にしなければならないことがあるなら 2 の選択肢しかないし、
そうでないときはクラスにする意味がないので普通の関数で書けばよくねって思う。
そのふたつの選択肢の間で迷わなければならない場面というのが既になんかおかしい状態に入り込んでる気がする。

72 名前:デフォルトの名無しさん mailto:sage [2020/03/31(火) 10:34:43.57 ID:6MgwCPiX.net]
c++使いなら速度を追求しろ
速度こそ正義だ

73 名前:デフォルトの名無しさん mailto:sage [2020/03/31(火) 12:31:40 ID:b6kPBFRe.net]
>>66
C#は実行時最適化に期待できるのと、ABI互換するのが作法なんで
C++で真似する意味はあんまりないよね。

74 名前:デフォルトの名無しさん [2020/03/31(火) 12:39:27 ID:tVRDD1dz.net]
おい、パフュームはコーディング捗るぞ。

75 名前:デフォルトの名無しさん mailto:sage [2020/03/31(火) 14:18:42 ID:PMv8PBMm.net]
なんか前提条件抜きで「こう書くのが良い」みたいな答えを求める初心者が最近多いっぽいな
セオリーに従順といえば聞こえはいいが、自分のおかれてる状況でどうすべきかの決断をとことんサボろうとしてるとも言える

76 名前:デフォルトの名無しさん mailto:sage [2020/03/31(火) 14:28:08.91 ID:daGoeiYK.net]
>>71
「C#はABI互換するのが作法」
という意味が分からないので詳しく。

個人的には、C#でgetter,setterが作り易くなっているのは、HTMLの「property」
を操作するJSの流儀にルーツを持つのではないかと思っている。

そう思う理由の一つは、WinFormsでも、イベントハンドラ(関数)を登録するのに、インスタンス変数に関数の名前を代入するような形式を使っているのが、JSのイベントハンドらの作法にそっくりだし、
Formのフラグ類の設定方法が、HTMLのpropertyやCSSのstyleの設定方法とそっくりだから。

普通、C++だとメンバ関数を通じてオブジェクトに「命令を出す」事でオブジェクトの状態を変える
作法が取られることが多いが、JSだと同じ事をpropertyを設定することで行う。
後者の場合、propertyを設定したら、イベント終了後にDOM要素が自動的にその変化が反映される。
JSのその作法はコードを短く書くのには適してはいるが、インタプリタ的な動作でも有り、
変数の代入のように見える書き方に「副作用」が伴うのがC/C++言語の文化だとちょっと違和感を感じる
人も居ると思う。

77 名前:デフォルトの名無しさん mailto:sage [2020/03/31(火) 14:39:26.00 ID:daGoeiYK.net]
>>74
なお個人的には、
C#のような自動化された setter, getter を使うより、
void SetXxx(TYPE x); や TYPE GetXxx();
を明示的に使ったほうが、set, get している場所をgrep検索し易いと思う。
xxx = yyy で settter を呼び出す作法の場合、grep検索するなら、
正規表現で xxx*s\= などと書く必要があるし、コンストラクタで
使われている場合や関数の引数に「代入」されている場合にはこれでは検索しきれない。
自動化されることで使用箇所が見えにくくなり、トラブルの元になる可能性がある。

getterの方は使用箇所の検索は不可能になる。

78 名前:デフォルトの名無しさん mailto:sage [2020/03/31(火) 14:42:36.42 ID:DEnjdkJH.net]
C#はC++と違ってシンボルの完璧な静的解決が可能だからgrep性なんかどうでもいいんだよ
VSでポチポチしたら一瞬で完全な呼び出しツリーが出来上

79 名前:がる []
[ここ壊れてます]

80 名前:デフォルトの名無しさん mailto:sage [2020/03/31(火) 15:09:58.10 ID:OTxurRkT.net]
>>73
プログラマは怠惰であるべきってのを間違ったとらえ方してるバカは世の中には多い。



81 名前:デフォルトの名無しさん mailto:sage [2020/03/31(火) 15:12:48.63 ID:YcGHsuX6.net]
>>75
メモ帳でコード書いてるのか?w

82 名前:デフォルトの名無しさん [2020/03/31(火) 17:49:17.43 ID:tVRDD1dz.net]
viでは。

83 名前:デフォルトの名無しさん mailto:sage [2020/03/31(火) 20:44:47 ID:HDRrREDo.net]
【速報】東京都が #新型コロナウイルス 感染症死亡者数を過少評価か、

「例年より少ない」とされていたインフルエンザ関連死が急増=国立感染症研究所
https://www.niid.go.jp/niid/ja/flu-m/2112-idsc/jinsoku/1852-flu-jinsoku-7.html …


コロナで死んだのインフルに振り替えてるんじゃまいか
こういうニュースが出てくる時点で隠蔽はもう無理
おそらくパンデミックは避けられないと思うね

84 名前:デフォルトの名無しさん mailto:sage [2020/03/31(火) 22:00:06 ID:ox5sQqez.net]
言語仕様はメモ帳で書く場合を想定すべき
メモ帳で楽に書ければ開発環境でも楽に書けるが、逆はない
開発環境がなければ書けないような構文は構文自体おかしいと認識するべきだ

85 名前:デフォルトの名無しさん mailto:sage [2020/03/31(火) 22:01:35 ID:L/5UA51D.net]
なぜメモ帳?
そこはedlinだろ?

86 名前:デフォルトの名無しさん [2020/03/31(火) 22:05:49 ID:tVRDD1dz.net]
Excelよく使ってる。

87 名前:デフォルトの名無しさん [2020/03/31(火) 22:07:47 ID:tVRDD1dz.net]
ExcelはExtended cellという意味とExcellentという意味がある。
と思う。

88 名前:デフォルトの名無しさん [2020/03/31(火) 22:14:04.53 ID:tVRDD1dz.net]
電卓にはプログラマ・モードがあるのに。
Excelにはない。
不思議な話だ。

89 名前:デフォルトの名無しさん [2020/03/31(火) 22:14:37.75 ID:tVRDD1dz.net]
そういえば電卓も良く使う。

90 名前:デフォルトの名無しさん mailto:sage [2020/03/31(火) 22:19:10.66 ID:L/5UA51D.net]
そりゃmac用ソフトだもの



91 名前:デフォルトの名無しさん mailto:sage [2020/03/31(火) 22:52:39.00 ID:s0jfH2wf.net]
皆さんありがとうございます
正直個人で利用するだけなら関数でいいし今までも関数で済ましてたんですが、他人に教えるときに変数定義などが散らばってると教えるのが面倒くさいという理由でクラス化したんですよね

92 名前:デフォルトの名無しさん mailto:sage [2020/03/31(火) 23:13:13.12 ID:W8+rJJar.net]
関数で済むならその方が良い
プログラムが複雑な動作ができるのは「状態(=変数)」を持つから
単純にできるならその方が良い
変数は悪だよ、必要悪

93 名前:デフォルトの名無しさん mailto:sage [2020/04/01(水) 08:43:31 ID:BVkSt5Rw.net]
class変数ってのはstatic変数とlocal変数の中間的なイメージをもってる。
static変数よりかマシだけど状態を持つことには変わりはない。
まあlocal変数だけでプログラムするのもつらいって場面も多いけど。

94 名前:デフォルトの名無しさん mailto:sage [2020/04/01(水) 13:47:46.62 ID:PC8mhvaW.net]
気になったので教えて

c++的に関数のbool型戻り値に関数の成功失敗返すとして、真が成功で偽が失敗が一般的?

c言語だと戻り値がintで0が成功、それ以外が失敗ってのか良くあるけど、c++もこの形が一般的?(偽が成功、真が失敗)


個人的には前者を良く使うんだけど

95 名前:デフォルトの名無しさん mailto:sage [2020/04/01(水) 13:55:09.05 ID:BVkSt5Rw.net]
boolとintで区別するってのが一般的で
boolの場合言ってる通りでintの場合cの流儀に沿うのが普通じゃね。

96 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/04/01(水) 14:38:59 ID:S74lm4t5.net]
>>91
エラーであることと同時にエラーの内容 (エラーコード) も返したいという要求がある。
なので 0 を成功として、失敗ならエラー内容に対応する数値 (真値) を返すというやり方が生まれた。
でも C の標準ライブラリには失敗として 0 を返した上でエラーの内容は errno に設定するものもあるし、
グダグダなんやわ。
真偽のどちらを成功とするか失敗とするかは、どちらかが一般的と言えるほど統一されてはいない

97 名前:ニ思う。

C++ だと失敗は例外で投げてしまえるから返却値はあくまでも正常系のみの結果を返すべきという意見もあるし、
例外は何かと問題があるので避けた方がいいという人もいる。

std::optional は「有効な値があるとき」と「有効な値がないとき」を区別できるけど、
成功・失敗に対応づけるにはちょっとイマイチな感じもあるしなぁ……。
結局のところ場合による。
[]
[ここ壊れてます]

98 名前:デフォルトの名無しさん mailto:sage [2020/04/01(水) 17:14:10.11 ID:15FH3/nz.net]
おれも >>92 の認識
結果boolとintでfalse/0の意味が入れ替わるわけだが
intはエラーコードを返す余地があるが
boolの場合失敗をfalseでだけで返しても実用上役に立たないと思う
falseが返ってきたら呼び出し側は何をすればいいかまで考えるべき
内部エラー的などうしようもないもののときは関数内で勝手にabortした方がまし

99 名前:デフォルトの名無しさん [2020/04/01(水) 18:14:31 ID:MoTGnEfh.net]
>>94
実は、エラー番号を返されても、出来ることは限られていて、
ハードウェアエラーの様なものなら、使用者にそのメッセージを
表示することは出来るが、単に関数の呼び出し方の間違いの場合も
多くてその場合は開発時にエラー番号を調べて対処するしかない。
エラー番号によってプログラムの動作を変えて対処できるケースは全体のごく一部。

100 名前:デフォルトの名無しさん mailto:sage [2020/04/01(水) 19:18:06.29 ID:15FH3/nz.net]
>>95
それで十分役にたっとるがなw
実行時にあらゆるエラーをリカバリーしろという話ではないさ








[ 続きを読む ] / [ 携帯版 ]

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

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