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


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

C++相談室 part134



1 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 09:05:42.21 ID:mJKRg6iz0.net]
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512

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

前スレ
C++相談室 part133
mevius.5ch.net/test/read.cgi/tech/1511509970/

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

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

[C++ FAQ]
https://isocpp.org/wiki/faq/
www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured

2 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 09:07:45.45 ID:mJKRg6iz0.net]
STLつかうと一気に実行ファイルサイズが10倍に?!

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

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

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

#include <stdafx.h>
後死ね。

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

いつまでこの糞テンプレ張り続けるんだおい

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

3 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 09:24:34.73 ID:i+Y70H5F0.net]
前スレのvectorのsize_tの質問した者だけど

実際gprofでvectorの[]が重い原因になってることを確認してる
次に重い原因がイテレータの比較なんだけど

4 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 09:35:10.31 ID:CFAgCrzx0.net]
>>3
> 実際gprofでvectorの[]が重い原因になってることを確認してる
どんな確認したのか知らんけど、確認しててあんな質問してるなら単なるバカとしか思えないが...

5 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 09:50:30.10 ID:AVDgMNZq0.net]
またトンデモな使い方をしているのだろうな

6 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 11:02:33.41 ID:Bd+LbacS0.net]
メモリ帯域が律速になる処理はわりとあるので
大容量のデータを処理してるならおかしくはない

キャッシュ効かないメモリアクセスするコストに比べたら整数の拡張など微々たるもんだ

7 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 11:46:34.01 ID:slOCvU7H0.net]
>>1
↓前スレの続き
std::vector<double> vec((size_t)1000);
...
size_t sz = vec.size();
for (int i = 0; i < (int)sz; ++i) {
 cout << i << " " << vec[i] << "\n";
}
の方がiをsize_tにするよりループ命令の部分が軽量化されることにより早いかも試練(x64では気のせい?
およびループ内で他に32 bit演算をやる場合、x64だと全てレジスタ上で賄える可能性が高まるから
速くなるかも試練、

結論: アセンブリコードを確認せよ

8 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 12:06:11.44 ID:slOCvU7H0.net]
いやスマン
例が不適切やったわ;
ループ内でstd::coutみたいな重量のある関数呼び出しをしたら
「全てレジスタ上で賄える」とか
「キャッシュが有効活用で劇速化」とかも糞も無いな

9 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 12:31:55.30 ID:w1mvJepJ0.net]
noexceptってどういうときにつけたらいいですか。

10 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 13:45:44.65 ID:gdCBjjapd.net]
>>3
[ ] が問題なら生ポ使えと書いてるんだけど無視?



11 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 13:51:38.35 ID:gdCBjjapd.net]
>>8
重量の有り無しの前に
数値の文字列変換がsize_tとintじゃ違うだろ

それがなければどっちでも変わらんよ
64bit環境ならレジスタも64bitなんで

12 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 14:00:41.11 ID:gdCBjjapd.net]
>>3
ん?
プロファイラの確認?
だとしたら[ ] が遅いんじゃなくてメモリの読み込みが実際に遅い可能性があるのでは?

そもそも、
[ ] が問題になるような小さなループで
[ ] の時間を正しく測れるのか?

いずれにしろ、生ポと比較してみるのが一番

13 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 14:02:23.47 ID:gdCBjjapd.net]
メモリ帯域の問題なら
もっと大きな視野で最適化をしないとな

複数ループをくっつけてメモリアクセスを減らすとか
細切れに処理をしてキャッシュを効かすとか

14 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 14:04:10.50 ID:C2bNNCkKM.net]
[]が問題になるわけ無いだろ。ソースコード見たのかよ。
ナマポで書き直すなんて無意味。抜本的にアルゴリズム見直せ

15 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 14:05:12.48 ID:gdCBjjapd.net]
あ、可能性だけで言えば
signedよりunsignedの方が速い
32bit から 64bit の符号拡張はコストが微妙にかかることもあるが、
ゼロ拡張はなにもしなくて良いから
レジスタの上位32bitは勝手にゼロになる

16 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 14:07:10.18 ID:gdCBjjapd.net]
>>14
問題になることもある
君こそソースを見たかな?

17 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 14:50:38.90 ID:CFAgCrzx0.net]
>>15
今時のプロセッサでそんな奴見たことないけど?
妄想じゃないなら具体例よろしく

18 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 14:56:00.07 ID:gdCBjjapd.net]
>>17
そんなやつって何だ?

符号拡張にコストがかかってゼロ拡張にコストがかからない例ならx86-64がそうだが

19 名前:デフォルトの名無しさん mailto:sage釣 [2018/01/20(土) 19:43:21.88 ID:J+aY78FJ0.net]
MOVSXもMOVZXも0クロックでは処理できないと思うんだが
ZXが0クロックで出来るってエビデンスはあるのかな?

https://stat.ameba.jp/user_images/20180105/17/genten-nippon/2b/2b/j/t02200142_0640041414105871600.jpg

20 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 20:07:30.62 ID:aYLVMpQqM.net]
32bitデータをレジスタに書き込んだら上位32bitが0クリアされることを言ってるんでしょ
コスト0って言うのはどうかと思うけど



21 名前:デフォルトの名無しさん [2018/01/20(土) 20:30:37.09 ID:w1mvJepJ0.net]
質問させてください。
以下のコードで push_back 時にコピーコンストラクタが呼ばれます。
ttps://ideone.com/Zodd94

こちらとしては、下のページにあるように、ムーブコンストラクタが呼ばれることを期待しています。
ttps://qiita.com/_meki/items/90f9815a1e899593daa3

なぜムーブではなくてコピーになるのか、教えて頂けないでしょうか。

22 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 20:43:12.42 ID:kYo2uzfm0.net]
>>21
ムーブコンストラクタが定義されていないから

A(A &&) = default;
とでもしておけ。

23 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 20:49:44.91 ID:w1mvJepJ0.net]
>>22
ありがとうございます。解決しました。

24 名前:デフォルトの名無しさん [2018/01/20(土) 21:07:26.00 ID:w1mvJepJ0.net]
追加で質問させてください。

コンパイラが自動生成する関数で、noexceptがついているのは
・デストラクタ
・ムーブコンストラクタ
・ムーブアサインメントオペレーター
の3つでよろしいでしょうか。

よろしくお願いします。

25 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 21:11:18.68 ID:Z4eZ5+gd0.net]
残り3つもデータメンバと基底クラスの同じものが全部noexceptなら付くよ

26 名前:デフォルトの名無しさん [2018/01/20(土) 21:18:07.18 ID:w1mvJepJ0.net]
回答ありがとうございます。

データメンバと基底クラスのそれぞれのデフォルトコンストラクタが全て noexcept なら、
noexcept なデフォルトコンストラクタが自動生成される。
コピーコンストラクタ、コピーアサインメントオペレーターも同上
という理解でよろしいでしょうか。

また、その条件が成立しないときは、>>24で挙げた3つということになるのですしょうか。

よろしくお願いいたします。

27 名前:デフォルトの名無しさん [2018/01/20(土) 21:36:13.58 ID:w1mvJepJ0.net]
>>26について自己解決しましたので、質問を取り下げます。
ありがとうございました。

28 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 11:30:18.34 ID:LU9Vj3hRM.net]
>>16
noexceptなしに = defaultで宣言した場合はどうなるの?

29 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 11:32:32.53 ]
[ここ壊れてます]

30 名前: ID:LU9Vj3hRM.net mailto: >>28
>> 25の間違いです
[]
[ここ壊れてます]



31 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 13:25:22.34 ID:XRSBBZxr0.net]
もちろん宣言通りになる

32 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 13:32:54.03 ID:LU9Vj3hRM.net]
>>30
thx

33 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 19:49:20.49 ID:FwsOgvVZ0.net]
記述上 int* であるが、上書きされた場合に自動的に中身を delete してくれるポインタの入れ物を、
operator= のオーバーロードなしで定義できますか?

ちょっと変な質問なのだけど、native C++なら多分以下コードで出来る。

struct PatHead {
int* ptr;
int* operator=(int* value){
if (ptr) delete [] ptr;
ptr = value;
return value;
}
operator int*(){ return ptr;}
};

void test(){
PatHead ph[10]; // int* ph[10] と同じ記述で通るのがミソ

ph[1] = (int*)1;
int* tgt1 = ph[1];
}

問題はこちらが使っているのはVC++/CLIで、
なぜか value struct では operator= のオーバーロードが出来ず、(C3194)
マネージ配列に直接入るのは value型だけなのでちょっと詰んでいる。
なお ref struct なら出来るのだが、こちらは逆に初期化部分で記述が増えるので、
それなら諦めようかな、って感じ。

というわけで回避策を思いつく人がいればお願いします。
何で値型で禁止されているか分かる人も居ればよろしく。

34 名前:デフォルトの名無しさん [2018/01/26(金) 13:51:50.30 ID:duEsoqcC0.net]
イテレータでendの一つ前を表すのはありますか。
endからの引き算必須ですか。

35 名前:デフォルトの名無しさん mailto:sage [2018/01/26(金) 13:58:16.53 ID:SmrT25am0.net]
&back()

36 名前:デフォルトの名無しさん mailto:sage [2018/01/26(金) 14:00:31.27 ID:27cZOHeHM.net]
>>33
用途に合うかどうか分からないけど
rbegin, crbegin

37 名前:33 mailto:sage [2018/01/26(金) 14:14:09.94 ID:duEsoqcC0.net]
サンクスです。できました。

38 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 07:12:46.54 ID:ZP0gkUPd0.net]
rbeginはちょっとトリッキーな実装になってることがあるから注意

39 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 11:46:50.10 ID:RraDQJG10.net]
実装に依存しないような仕様に沿った使い方をすればいいんでないの?
仕様に合致していない実装ならどうしようもないが。

40 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 19:12:13.06 ID:Boft2e8Ea.net]
SHA256のハッシュをkeyにしたmapを高速で扱いたいんだが、
keyのoperator <,>それぞれでmemcmpしてて、多分このせいで性能悪くなってる

なんか良い解決策ってないですかね?
Linuxのrbtreeと比較すると100万件あたり150msec程度差がついてました



41 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 19:13:43.71 ID:IajdzWB80.net]
simd

42 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 19:44:42.49 ID:MtS5alc90.net]
unordered_mapにsha256の関数渡せばええやん

43 名前:デフォルトの名無しさん mailto:sage釣 [2018/01/27(土) 20:08:58.78 ID:6QrTsC7zM.net]
fpga

44 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 22:07:02.09 ID:bqR9C45e0.net]
mapじゃなくてハッシュを実装しろとしか

45 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 22:15:03.18 ID:Im+FAy1Qa.net]
>>40
便利そうだと思ったけど、データ構造的にアライメント揃えられないから使えなさそう

>>41
ソート済みデータを扱いたいパターンもあるので使えないです

コード的にさっくり改善する方法がなさそうなので
map諦めてそこだけ完全自作することにしました
レスしてくれた方々サンクスです

46 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 22:53:57.64 ID:ZP0gkUPd0.net]
Compareの自作で何がいけなかったのかわからないけど解決おめ

47 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 23:05:46.83 ID:r2gR5oNyd.net]
赤黒木ってスマートポインタを使って実装できますか?
親を弱参照で書いたらわけわかめに

48 名前:デフォルトの名無しさん mailto:sage [2018/01/28(日) 01:55:54.91 ID:B1112Jntd.net]
ハッシュをソートかあ

49 名前:デフォルトの名無しさん mailto:sage [2018/01/28(日) 03:22:06.75 ID:vIDP+sWr0.net]
コピーしたくないオブジェクトへのポインタ(ていうか全体をシリアライズするの可能性も考えたらindexがマジお勧め)の配列おソートすれば良い
そういった実装の詳細はクラスの中に隠すことができる 何のためにC++を使っているのやヽ(`Д´)ノ!!!11!1

50 名前:デフォルトの名無しさん mailto:sage [2018/01/28(日) 08:17:39.92 ID:abHZXNlp0.net]
>>47
なんかモヤモヤするなそれw



51 名前:デフォルトの名無しさん mailto:sage [2018/01/28(日) 11:41:38.50 ID:/ypN0hd6M.net]
>>39
hashは値に対してユニークじゃないけどいいの?

52 名前:デフォルトの名無しさん [2018/01/28(日) 14:41:11.23 .net]
そりゃハッシュ衝突用のフィールドくらい作ってるだろうよ
質問にないことは心配しなくていいよ

53 名前:デフォルトの名無しさん mailto:sage [2018/01/28(日) 15:09:59.60 ID:RaXbFAH70.net]
心配してるんじゃなくてバカにしてるんだよw

54 名前:デフォルトの名無しさん mailto:sage [2018/01/28(日) 15:44:58.16 ID:C2Jb//yt0.net]
バカにしようとして失敗してるとしか見えないけど w

55 名前:デフォルトの名無しさん mailto:sage [2018/01/28(日) 20:33:36.08 ID:NzqukFwp0.net]
Impliment.h

class Impliment
{
public: base;
};


Interface.h

class Interface
{

56 名前:デフォルトの名無しさん mailto:sage [2018/01/28(日) 20:42:03.84 ID:NzqukFwp0.net]
すいません。途中で書き込んでしまいました。

以下のようなクラスを作ったのですが、
derivedがImp::baseを継承しているため、
インクルードの順番が固定されてしまいます。(Impliment.hが先でないといけない)

こういったクラスは使う人から見て嫌がられるでしょうか。
ご意見をいただけるとありがたいです。

Impliment.h

class Impliment
{
public:
class base {}
};


Interface.h

template<class Imp>
class Interface
{
private:
class derived : public Imp::base {}
}

57 名前:はちみつ餃子 mailto:sage [2018/01/28(日) 20:56:07.47 ID:Xl/BPHGJ0.net]
>>55
「XXの実装とインターフェイスが分かれている」ということをユーザが意識しないといけないのは抽象化の不足だと思う。
分離した形のデザインで開発するのはかまわないけど、ユーザに対してはなるべく隠すのが望ましい。

#include<Implement.h>
#include<Interface.h>

と書いたヘッダファイルを用意しておく程度のことでもだいぶんマシになる。
(インクルードガードはしておくこと)

58 名前:デフォルトの名無しさん mailto:sage [2018/01/29(月) 02:50:08.46 ID:gQcv+kbG0.net]
>>55
普通は interface.h の冒頭で implement.h をインクルードしておく

59 名前:デフォルトの名無しさん mailto:sage [2018/01/29(月) 05:39:18.37 ID:+mqzfkB+0.net]
>>55
このコードだけならインクルード順が逆でも問題ない。

60 名前:デフォルトの名無しさん mailto:sage [2018/01/30(火) 20:17:26.27 ID:fsahOVUj0.net]
レスありがとうございます。

>>56
Implimentは複数あって、ユーザーが選ぶことができる
というのを想像して作っていました。

>>57
template化する前はそこでインクルードしていました。

>>58
たしかに、このコードだけでは大丈夫ですね。
正確にはこのコードだけではないので、他に原因があるのかもしれません。
ご指摘ありがとうございます。



61 名前:デフォルトの名無しさん mailto:sage [2018/01/30(火) 21:08:08.01 ID:VkcoBYQV0.net]
Implement入れ替えさせたいならユーザーに適当な所で
template Interface<MyImplement>;
って書かせりゃいいだけじゃないの?

62 名前:デフォルトの名無しさん mailto:sage [2018/01/30(火) 21:19:19.29 ID:Lbh+cCVN0.net]
typename imp::base

63 名前:デフォルトの名無しさん mailto:sage [2018/02/04(日) 11:20:04.76 ID:r6E1M8790.net]
質問ですが
「このクラスはバイト列としてコピーできる」ということを明らかにするために
明示的にコピーコンストラクタを書くとして、
どう書けば処理系に依存することなくデフォルトのコピーコンストラクタ以上の性能になることを保証できますか
(もしくは、「このクラスはバイト列としてコピーできる」ということを明示する構文はありますか)

64 名前:片山博文MZ mailto:sage [2018/02/04(日) 11:26:54.06 ID:i7yJvuTcd.net]
>>62
MyClass(const MyClass&) = default;

65 名前:はちみつ餃子 mailto:sage [2018/02/04(日) 11:36:31.71 ID:H9FebDBN0.net]
デフォルトのコピーコンストラクタはメンバのコピーコンストラクタを起動するので、
そのクラス (に属するオブジェクト) 全体がバイト列としてコピーするわけではない。

trivially copyable class の要件を満たすように書けばバイト列としてコピー可能と保証される。
コンストラクタの書き方だけでは保証できない。

66 名前:デフォルトの名無しさん mailto:sage [2018/02/04(日) 13:04:56.23 ID:WecC8o2P0.net]
memcpyするコピコンをユーザー定義すればええやん

67 名前:デフォルトの名無しさん mailto:sage [2018/02/04(日) 13:46:35.82 ID:r6E1M8790.net]
>>63
なるほど「= default;」のありがたみがわかりた

>>64
なるほどそれだと安全性の点でイマイチ…
バイト列としてそのままリモートPCに送ったりするクラスに誰かが
バイト列としてのコピーが可能でないコードを追加したとしても
コンパイラで検出する術が無いっぽいように読める

68 名前:デフォルトの名無しさん mailto:sage [2018/02/04(日) 13:47:37.01 ID:r6E1M8790.net]
訂正
誤:バイト列としてのコピーが可能でないコード
正:バイト列としてのコピーを不可能にするコード

69 名前:デフォルトの名無しさん mailto:sage [2018/02/04(日) 13:47:46.54 ID:HBpG+TPK0.net]
>>62
std::is_trivially_copyable<T>がtrueになるように書いて
https://cpprefjp.github.io/reference/type_traits/is_trivially_copyable.html
トリビアル型とは何かは検索して

70 名前:デフォルトの名無しさん mailto:sage [2018/02/04(日) 13:52:58.38 ID:HBpG+TPK0.net]
>>66
なおさらtype_traitsで条件に合わなければコンパイルを失敗させればよい



71 名前:デフォルトの名無しさん mailto:sage [2018/02/04(日) 14:08:05.83 ID:r6E1M8790.net]
>>69
おk

72 名前:はちみつ餃子 mailto:sage [2018/02/04(日) 16:47:05.72 ID:H9FebDBN0.net]
>>65
まあ書こうと思えば書けないことはないが、
やった結果に整合性がとれるかどうかは別問題なのでな……。

73 名前:はちみつ餃子 mailto:sage [2018/02/04(日) 17:24:06.38 ID:H9FebDBN0.net]
流れをぶった切って質問するんだけど、
配列の一部をとる参照とかって作れない?
実際にはコンパイルが通らないけど、やりたいことはこんな感じ。

int a[3];
int (&b)[2] = static_cast<int (&)[2]>(a);

74 名前:デフォルトの名無しさん mailto:sage [2018/02/04(日) 18:06:17.19 ID:B+seqFts0.net]
reinterpret_castすれば?

75 名前:デフォルトの名無しさん mailto:sage [2018/02/04(日) 18:22:52.47 ID:HJ1AdVlZ0.net]
ポインタにして剥がせばいい

76 名前:デフォルトの名無しさん mailto:sage [2018/02/04(日) 18:28:31.26 ID:HBpG+TPK0.net]
配列型はポインタではないので途中からとかない

77 名前:デフォルトの名無しさん mailto:sage [2018/02/04(日) 18:55:06.41 ID:i/oNqC3f0.net]
一応うまく行ったけど規格で保証された挙動かどうかはよくわからない
https://ideone.com/wVzc6b

78 名前:デフォルトの名無しさん mailto:sage [2018/02/04(日) 19:14:07.38 ID:NcR26d4z0.net]
でもポインタにしてしまうと困るシチュエーションなんてありうるの?
マクロの中でsizeofしてるとか?

79 名前:デフォルトの名無しさん mailto:sage [2018/02/04(日) 20:30:26.18 ID:WecC8o2P0.net]
>>71
意味わかんねえ
どーゆーこと?

80 名前:デフォルトの名無しさん mailto:sage [2018/02/05(月) 23:20:37.74 ID:y5vbQcAP0.net]
メンバのコピーコンストラクタを起動すべきところをmemcpy()しかしない手製コピーコンストラクタで済ませようとしたら破滅が訪れる

MyClass(const MyClass&) = default; なら勝手にやってくれるのでその心配が無いので安心



81 名前:デフォルトの名無しさん mailto:sage [2018/02/05(月) 23:28:20.73 ID:QTKEhMlZ0.net]
しかしまあ >>68 なんていう便利なモノがあるとは
フラフラこういうスレ読んでるのもためになるなあ

82 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 07:54:17.35 ID:CtmFRYuD0.net]
>>79
>>62

83 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 08:05:48.85 ID:cp/uvOeq0.net]
>>62
処理系に依存することなく「

84 名前:保証」なんて出来ない
以上
[]
[ここ壊れてます]

85 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 08:27:38.08 ID:rGp9SuaC0.net]
>>63で解決している
もしくは以下への回答も>>69で出ている

86 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 09:14:20.61 ID:CtmFRYuD0.net]
バイト列コピーが = default; なわけねーだろアホ

87 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 11:45:28.85 ID:rGp9SuaC0.net]
よく読め
バイト列コピーでokの保証は>>69
遅くならないコンストラクタの書き方が>>63

88 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 11:48:04.39 ID:rGp9SuaC0.net]
そもそも「どうコンストラクタを書けば」ってのを質問してるんで
バイト列コピーでコンストラクタを書けってのは単に>>65の珍解答に過ぎない

89 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 11:51:41.68 ID:CtmFRYuD0.net]
すまんが日本語でたのむ

90 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 11:54:37.03 ID:rGp9SuaC0.net]
元の質問>>62
・処理系に依存せずデフォルトより遅くならないことが保証されているコンストラクタの書き方
もしくは
・バイト列コピーでokと明示する構文

だろ。
前者は>>63
後者は>>68-69



91 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 12:36:57.61 ID:CtmFRYuD0.net]
元質問: デフォルトのコピーコンストラクタ以上の性能
おまえ: デフォルトより遅くならないこと

よく読めをそのまま返す

92 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 12:57:03.34 ID:bHMYZ9Vj0.net]
以上っていうのは等しいかまたはそれを越えるという意味だぞ

93 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 14:01:35.47 ID:rGp9SuaC0.net]
そもそも memcpy は前者の性能保証も後者の仕様の保証もどちらも満たしてない
仕様が保証されてるなら多分性能的に大丈夫だろうという程度

間違いを認めると死ぬ病気なんだろうからもうこれ以上は言わない。

94 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 14:38:54.29 ID:CtmFRYuD0.net]
バイトコピーでmemcpyより高性能な手段を1つでも例示したらどうなんだ

> 間違いを認めると死ぬ病気なんだろうから

ああ、おまえがか

95 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 18:18:02.35 ID:cp/uvOeq0.net]
https://stackoverflow.com/questions/28623895/why-is-memmove-faster-than-memcpy

96 名前:62 mailto:sage [2018/02/06(火) 22:02:19.27 ID:MckGyr3K0.net]
memcpy()より速いコピー手段Xが仮にあったとして
論理的にmemcpy()で済むケースについてコンパイラが提供する
デフォルトのコピーコンストラクタがコピー手段Xにならない理由がわからん…

個人的には「=default;」と書いたら最高性能なんなら毎回手でmemcpy()とか書きたくないカンジ

97 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 22:06:49.77 ID:CtmFRYuD0.net]
>>94
class A {
public:
A() {}
A(A const&) { std::cout << "aho"; }
};

class B {
public:
A a;
B() = default;
};

int main()
{
B b, c = b; //this will call you.
}

98 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 22:09:42.68 ID:MckGyr3K0.net]
>>95は「論理的にmemcpy()で済むケース」では無いからちげう

99 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 22:29:22.47 ID:CtmFRYuD0.net]
だから日本語でたのむって言っただろ

100 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 22:29:24.08 ID:MckGyr3K0.net]
どうした?
訂正はよ



101 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 23:07:57.82 ID:hdfY5rL3M.net]
間違いを認めて・・・死んだのか?

102 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 23:21:41.18 ID:MckGyr3K0.net]
仕方ないので漏れが訂正するわ;
ttps://ideone.com/TZnGv4

↑のコードの
(*1)は「=default;」でデフォルトのコピコンの使用を明示
(*2)は手でmemcpy()でコピーするように書いたコピコン

次の条件で試したら(*1)も(*2)も同じコードになったわ
x86-64 gcc 7.2
-O2 -fno-strict-aliasing -std=c++14 -pedantic -Wall -Wextra

こことかで試せるが保存と公開方法がわからんかったのでideoneを使わせてもろうた
ttps://gcc.godbolt.org/

漏れの国語力ではようわからんが、さすがに多分>>84は間違いなんジャマイカ、

103 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 23:34:18.80 ID:Ur4dB7lv0.net]
Cから来た連中ってどうしてmemcpyやmemset使いたがるんだろうな

104 名前:はちみつ餃子 mailto:sage [2018/02/07(水) 04:09:18.59 ID:OAPGz/K+0.net]
>>76
reinterpret_cast でなければ通らないときはだいたい駄目なときやわ。

105 名前:はちみつ餃子 mailto:sage [2018/02/07(水) 04: ]
[ここ壊れてます]

106 名前:22:37.75 ID:OAPGz/K+0.net mailto: >>100
「default がバイト列コピーとは『限らない』」という意味で >>84 は真。
[]
[ここ壊れてます]

107 名前:デフォルトの名無しさん mailto:sage釣 [2018/02/07(水) 05:00:09.29 ID:1UF8v8gcM.net]
開始アドレス、終了アドレス、サイズが64bit等で割り切れれば
バイトコピーより早いコピーはあるだろうね

108 名前:デフォルトの名無しさん [2018/02/07(水) 07:27:28.65 .net]
頭のいいコンパイラなら勝手にベクトル処理とかしてくれるんじゃないの?

知らんけど

109 名前:デフォルトの名無しさん [2018/02/07(水) 22:28:51.20 ID:MTpdY7NJ0.net]
"!"!"!MOHYO!"!"!"2"

1.[[[HUn≒MUL=POSI≠MAHO+Set*HUGE=SAGE=LOGE=NOISIA=0≒1]]]

2-[[[[[[[E=RAT%2^10%SPELAn!%]&!TOWA&!PEG#!NOLNOL8!#!HYAGO!2#]1*2=1]U]S]0]O]!#PAL!

3--->PAGODOL7&!@17,2222734.15&[[[%%RENRAK6,9,99"^10"]#$11.2%}]KAIJ]{

41.2SSS = RALQI2.β{{{RA4,0,238^97,1,$.S.L.E.I.L."Q5352.15Q"JOL"5*3>>>41.3q}}}>1.2<0
.3φTALHOSI"0">>>105.10<1.235<1.2>51≠52===55.632>V="E=0.835"of"1.32","632",0.683,1.end

{

110 名前:片山博文MZ mailto:sage [2018/02/10(土) 19:52:35.19 ID:x9I4Wn6Pd.net]
C++では、
int i;
for (i = 0; i < 9; ++i) { ... }
が、
for (int i = 0; i < 9; ++i) { ... }
って書けるのは知っているだろう。( )の中で、変数を宣言できる。

だが、ifやwhileの( )の中で、変数を宣言できることを知らない人は多い。



111 名前:デフォルトの名無しさん mailto:sage [2018/02/11(日) 04:31:12.99 ID:9irhhPDg0.net]
C++17では
if ( auto v = n; conditions ) {
...
}
が可能になるし、これからは広がってくれるかのう

112 名前:デフォルトの名無しさん mailto:sage [2018/02/11(日) 06:11:03.22 ID:l3GMmVaq0.net]
>>108
これホント待ち遠しい

113 名前:デフォルトの名無しさん [2018/02/11(日) 17:00:15.07 ID:RGzNlubj0.net]
それほど待ち遠しいか?

114 名前:デフォルトの名無しさん [2018/02/11(日) 17:27:44.93 ID:QA9xO9uU0.net]
待ち遠しくない

115 名前:デフォルトの名無しさん mailto:sage [2018/02/11(日) 17:34:07.64 ID:A61Ds/EIM.net]
for( ) の制御変数はそのループでしか使わないことが多いから意味あったけど、if( ) でそんなケースはまれだしなぁ
あれば使うけど待ち遠しいって言うほどじゃない気がする

116 名前: mailto:sage [2018/02/11(日) 17:36:34.68 ID:bT0HWvJB0.net]
理想主義的な文法ですが、実効性はあるのか疑問ですね

117 名前:デフォルトの名無しさん mailto:sage [2018/02/11(日) 17:40:12.67 ID:KWDwqk940.net]
一瞬意図が分からなかったが
()の中が;で区切れるという話?

118 名前:デフォルトの名無しさん mailto:sage [2018/02/11(日) 17:41:52.24 ID:rD0gl3AiM.net]
dynamic_castとの組み合わせで使うとかどうよ

119 名前:デフォルトの名無しさん mailto:sage [2018/02/11(日) 19:11:10.58 ID:av7bQMHG0.net]
結構あると思うけどね
if(DWORD err = GetLastError(); err != NO_ERROR)
この場合NO_ERRORが0だって分かってるから
if(DWORD err = GetLastError())
で済むから無意味だけど

120 名前:デフォルトの名無しさん mailto:sage [2018/02/11(日) 19:17:28.82 ID:yo2OB3cP0.net]
>>116
前者の方が意図が明確だし意味はあると思う



121 名前:デフォルトの名無しさん [2018/02/11(日) 20:06:43.52 .net]
>>116
>if(DWORD err = GetLastError(); err != NO_ERROR)

普通こうやろ
if((DWORD err = GetLastError()) != NO_ERROR)

変数宣言は少しは意味あるかもしれんが(Perlと同じことができるってこと)
複文書けるのは特にメリット感じないわ

122 名前:デフォルトの名無しさん mailto:sage [2018/02/11(日) 20:41:29.80 ID:Ag9E1Urq0.net]
それ通らんよ
こうだろ

DWORD err;

123 名前:
if((err = GetLastError()) != NO_ERROR)

if内でしか使わないerrが外部に漏れてるのがよろしくないってこと
[]
[ここ壊れてます]

124 名前:デフォルトの名無しさん [2018/02/11(日) 20:56:03.30 .net]
>>119
それが通るという変更だと思ってたわ

こう書けるPerlのほうがまだ優位性あるね

if((my $err = GetLastError()) != NO_ERROR)

125 名前:デフォルトの名無しさん mailto:sage [2018/02/11(日) 22:10:23.49 ID:p+z832PL0.net]
if(init ; expr)だと初期化と式が関連していなくてもいいので>>120とは違う構文になる
だからこんなのでもよい
if(int err = GetLastError(); hoge.aho())

lock_guardもしておける
if(std::lock_guard<std::mutex> lock(m); flag)

構造化束縛も使える
if(auto [a, b, c] = f(); b > c){ std::cout << "b > c" << std::endl; }

126 名前:デフォルトの名無しさん [2018/02/12(月) 12:22:30.52 ID:sATukCOa0.net]
Cでは名前空間っていうのをすごい扱っていた気がするんだけどC++は名前空間扱うことってないの?
一つのアプリケーションも完成させたことがないど素人の質問ですまんが

127 名前:デフォルトの名無しさん mailto:sage [2018/02/12(月) 12:43:48.54 ID:qekpeHDJ0.net]
>>122
まずは"C"の入門書を読んで、何を見間違えたのかはっきりさせてからにしようか。

128 名前:デフォルトの名無しさん mailto:sage [2018/02/12(月) 14:08:57.84 ID:sGdsmrZD0.net]
初心者スレに池

129 名前:デフォルトの名無しさん [2018/02/12(月) 20:44:41.93 ID:gfcybQxo0.net]
>>122
気のせい。

130 名前:デフォルトの名無しさん mailto:sage [2018/02/13(火) 00:10:36.10 ID:YGwN9DGw0.net]
>>122
Cにnamespaceは無いだろ



131 名前:はちみつ餃子 mailto:sage [2018/02/13(火) 17:30:20.31 ID:tUR5ZBgZ0.net]
構造体タグと型名の名前空間が分かれているといったような意味での名前空間は C に有るが
C++ では構造体タグはそのまま型名としても使えるし、そういう意味での名前空間の話かな?

132 名前:デフォルトの名無しさん mailto:sage [2018/02/13(火) 17:45:08.06 ID:a1RYP/Gm0.net]
こんな名前空間もあるね
int x;
int main(void)
{
x = 1;
int x;
x = 2;
{
int x;
x = 3;
}
return 0;
}

133 名前:デフォルトの名無しさん mailto:sage [2018/02/13(火) 17:55:17.58 ID:Xr6xvVy+M.net]
それはスコープでは

134 名前:デフォルトの名無しさん mailto:sage [2018/02/13(火) 18:15:03.36 ID:a1RYP/Gm0.net]
変数だよ
代入でもあるね

135 名前:デフォルトの名無しさん mailto:sage [2018/02/13(火) 20:09:02.02 ID:NNOtJgpO0.net]
謎すぎワロタがそこから上のスコープのxを参照してくれ

136 名前:デフォルトの名無しさん mailto:sage [2018/02/13(火) 20:19:22.41 ID:Za/EZbH7M.net]
ブロックって言ってる

137 名前:デフォルトの名無しさん mailto:sage [2018/02/13(火) 21:49:01.90 ID:a1RYP/Gm0.net]
アホばっかり
がっかり

138 名前:デフォルトの名無しさん mailto:sage [2018/02/15(木) 12:08:37.28 ID:Sgd3BwBT0.net]
std::mapのように文字列や構造体をキーにした高速アクセスができて、
要素の数が一定数を超えたらLRU形式で勝手に削除してくれる、
キャッシュのような機能を実装したいのだけど、
C++でそのような仕組みを作れるクラスはないですか?

139 名前:デフォルトの名無しさん mailto:sage [2018/02/15(木) 17:00:44.45 ID:GbCJk+7h0.net]
自分で実装するならどうにでもなるだろ
そのための道具は全て標準で揃っている

140 名前:デフォルトの名無しさん mailto:sage [2018/02/15(木) 18:15:51.96 ID:6url8MQd0.net]
バックグラウンドならスレッド使うしかないんじゃないかな



141 名前:デフォルトの名無しさん [2018/02/15(木) 19:13:27.39 ID:CSnzpiZpM.net]
C++のプログラマーって性格ねじ曲がってるなあ
初めてGo応援したくなったわ

142 名前:デフォルトの名無しさん mailto:sage [2018/02/15(木) 19:34:35.63 ID:95vLe5Bi0.net]
>>137
どんな点が、性格悪い、と思わせるのですか?

143 名前:デフォルトの名無しさん mailto:sage [2018/02/15(木) 20:03:21.73 ID:qihnyYvs0.net]
それだよそれ

144 名前:デフォルトの名無しさん mailto:sage [2018/02/15(木) 21:14:35.68 ID:MoAPifjS0.net]
C++は多分チューリング完全だと思う

145 名前:デフォルトの名無しさん mailto:sage [2018/02/15(木) 21:20:32.50 ID:6nYos/bmM.net]
>>136
要素数が閾値を超えるのは要素が追加される時だからその時に古い奴を削除すりゃいいだけじゃね?

146 名前:デフォルトの名無しさん mailto:sage [2018/02/15(木) 23:50:52.95 ID:fG1U9Z3qM.net]
>>135
簡単で良いのでサンプルコード書いてもらえませんか?

147 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 00:43:14.82 ID:uaG+5sVQ0.net]
>>135じゃないけどシンプルにいくなら
{
map<key,value> data; // 本来のデータ
map<key,list<key>::iterator> lruindex; //
list<key> lrulist; // LRUリスト
... // mapと同じインターフェイス
}
みたいなクラスで要素の追加・削除・参照とかの時にLRUリスト見て処理すればいい

148 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 03:16:29.76 ID:DpsRPWWQ0.net]
辞書・線形リスト・2分木を、組み合わせる。Ruby で書くと、

class LRU_hash
def initialize (max_size = 3)
# ary は、hash に追加・アクセスした順
@hash = {}; @ary = []
@max_size = max_size
end

def push (key)
if @hash.has_key? key
# 一旦、要素を削除してから、最後尾に追加しなおす
@ary.delete key
else
if @max_size == @hash.size
# 先頭要素を削除してから、最後尾に追加する
@hash.delete(@ary.shift)
end
@hash[key] = true
end
@ary.push key
end

def print_buf
puts @ary.join ', '
end
end

ary = ["あ", "a", "あ", "い", "b", "あ", "c"]
hash = LRU_hash.new 4
ary.map { |key| hash.push key }
hash.print_buf #=> い, b, あ, c

149 名前:デフォルトの名無しさん [2018/02/16(金) 04:31:51.17 .net]
>>144
> # ary は、hash に追加・アクセスした順

参照のたびに最後尾に追加しなおすの?

150 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 06:27:04.53 ID:HICjIKnm0.net]
プログラムを作っていて困っています。
プログラム動作環境、windows 7 x86_x64

プロセスをExplorerを親として、
起動したプロセスにファイルの存在するディレクトリを作業ディレクトリとして
割り当てたい。

ただし、プロセスへのアタッチによる変更は禁止とする。

ようするにファイルをダブルクリックして起動するのと同じ状況を再現したいのです。



C:\hoge\fuga.exe

[現状]
Explorer C:\hoge\fuga.exe

explorer.exe
カレントディレクトリ
C:\Windows\System32\

[理想]
Explorer C:\hoge\fuga.exe

explorer.exe
カレントディレクトリ
C:\hoge\



151 名前:144 mailto:sage [2018/02/16(金) 07:56:00.35 ID:DpsRPWWQ0.net]
>>145

>>134
で、LRU と書いてあるから、Hash に追加しようとした度に、
すでに存在する場合でも、配列の最後尾に追加しなおした

どういう意味か、正確にはわからないけど

152 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 08:03:01.53 ID:TOIQut300.net]
>>146
explorer.exeへのショートカットを作ってプロパティで作業ディレクトリを指定するか、
COMでIShellLink::SetWorkingDirectoryを使って同じことをするあたりか?

153 名前:134 mailto:sage [2018/02/16(金) 09:56:21.20 ID:+b2iJMK40.net]
みなさんありがとうございます。
std::mapにLRUや最大要素数の仕組みを持たせた派生クラスでも
無いかと思ったのですが、標準ではやっぱり無いですか。

>>143のように、std::mapをメンバの一つに持たせた独自クラスを
一から作っていくことになるんですかね。

154 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 10:11:55.71 ID:JoalkiMd0.net]
amazonランキングの謎を解く とか言う本でmove-to-frontを見た

本の紹介「Amazonランキングの謎を解く」
www.kenkyuu.net/whatsnew/2011/08/book2011-08-01.html
>「move-to-front規則」(最後に売れた順に並べる、つまり、注文のたびに1位にジャンプする)

Move To Front - Wikipedia
https://ja.wikipedia.org/wiki/Move_To_Front

155 名前: []
[ここ壊れてます]

156 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 10:54:10.09 ID:TOIQut300.net]
ageだね

157 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 14:25:37.67 ID:UjPhOEUu0.net]
>>149
「c++ lru map」でググったか?
いくつかサンプルになりそうなコードが見つかるんだけど

158 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 18:05:58.99 ID:GGXfeEqkM.net]
江添さんのC++17本予約しようかな

159 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 18:26:06.12 ID:waI0am5S0.net]
予約しなくても売れ残るからいつでも買える

160 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 20:04:35.13 ID:1Lr9lxEpa.net]
C++を勉強しようと思ってる者ですが書籍を探しております。Cはある程度書けるのでそれを前提とした書籍が欲しいです



161 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 20:33:50.33 ID:Rc+MuzY40.net]
C++ クイック入門&リファレンス
プログラミング言語C++ 第4版

162 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 20:36:34.10 ID:9b60nRDg0.net]
>>155
C++11 以前だが accelerated c++, ここでフォローするよ

163 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 20:37:11.23 ID:TOIQut300.net]
禿4は俺も推奨する
C++11の良本だ

164 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 21:09:12.34 ID:+EaaPhKWa.net]
めっちゃ高いけどその価値あるのね

165 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 21:46:03.21 ID:5AmFsIq1M.net]
こっちはフッサフサやでhttps://images-na.ssl-images-amazon.com/images/I/51fYzbYoXFL._UX250_.jpg

166 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 22:03:34.89 ID:qDhjnryl0.net]
誰がハゲやねん

167 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 09:43:48.64 ID:Lqib7/b9F.net]
以下のようにconst char*型の文字列でchar*型の変数を初期化したいときに
strcpyやstrlenを書かずにstd::stringを利用して短くかけないかと思うのですが
msvcだとエラーにならず、clang, gccだとdeleteでセグメンテーション違反になります。
どうすればより良い感じになるでしょうか?const_castはできれば使いたくないです。

#include <string.h>
#include <string>
#include <iostream>
int main()
{
const char* asdf = "asdf";
// char* psz2 = new char[strlen(asdf)+1];
// strcpy(psz2, asdf);
std::string *psz = new std::string(asdf);
char* psz2 = &(*psz)[0];

std::cout << psz2 << std::endl;
delete psz2;
return 0;
}

168 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 09:51:35.08 ID:mykV+fTk0.net]
delete psz2なんてしちゃだめconst関係ない

169 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 10:21:38.22 ID:4SqFrjwY0.net]
何故stringそのものじゃなくて内部データをdeleteしようと思ったのか
newで確保した配列じゃないからdeleteはできない
stringの内部データは静的な配列と動的な配列を組み合わせて表現されている
mscvの場合先頭16文字はchar[16]でそれ以降は動的な配列に入るようになっている
psz[0]のアドレスはchar[16]の先頭アドレスなので当然deleteできない
msvcはdeleteに失敗しても落ちないのかな

170 名前:デフォルトの名無しさん [2018/02/17(土) 10:47:53.57 ID:IU1gsQgu0.net]
>>155-159
本格的な本なら、ロベール、ハーバート・シルトの独習

軽めの本なら、柴田 望洋、林 晴比古、猫



171 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 11:22:13.08 ID:++v6vSjK0.net]
ハンガリー人まだ絶滅してないのか。
stringはnull terminatedでないからpszはおかしい。
psz2もnull terminatedの保証がないからc_strを使うべき。
うまくいったらstrdupも調べとこうな。

172 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 11:25:45.81 ID:szUqPRvW0.net]
>>162
char* psz2 = &(*psz)[0]; って
char* psz2 = psz->c_str(); と同じなのかな?

いずれにせよ delete psz; は出来る(するべき?)だけど、
delete psz2; は出来ないんじゃないかな。

173 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 11:30:29.43 ID:mykV+fTk0.net]
必要ないところでnew/delete使う人は根本からして

174 名前:何も分かってない []
[ここ壊れてます]

175 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 15:18:23.73 ID:YAgvIyFy0.net]
>>162
お前はstringがただの配列だと思っているのか?
このトンチキ野郎!

176 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 16:50:38.35 ID:Q4Uv6cZz0.net]
>>162
弁護士の唐沢です
しっかり「char* const」と「const char*」の違いを認識しなさい
const char*は参照先の定数を変更しない事を保証する宣言であり、char*は参照先の定数を変更できる為、const char*で保持するアドレスをchar*にコピーする事は言語仕様により禁止されています。それは分かるよね?
最初に宣言したポインタを間違えて別アドレスで上書きしないようにconstで固定したいのなら、char* constを使うようにしましょう。とりあえずとりいそぎ

177 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 17:22:58.60 ID:0j+aLKWi0.net]
>>162
strdupという手があるが何がしたいのか今一つ分からない

const char* asdf = "asdf";
char *p = strdup(asdf);
std::cout << p << std::endl;
delete p;

178 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 17:31:15.32 ID:CLg9GPlRM.net]
>>170
それ誰に指摘してんの?とりいそぎ。

179 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 17:34:22.09 ID:4SqFrjwY0.net]
>>167
データは連続しているので同じになる
16文字まではスタックを使い、それ以上の長さになるとヒープにコピーされる
実装ではメンバの配列には何かしらのエスケープ文字が入る
ちなみにmsvcでは実装の都合上free(&str[0])で強引に解放できる

180 名前:173 mailto:sage [2018/02/17(土) 17:49:08.26 ID:4SqFrjwY0.net]
補足
スタックとヒープを使い分けるかどうかは実装依存
gcc、clang、msvcでは行われている
したがって短い文字列でnewを避けるためにstringを使わないというのは意味が無い



181 名前:デフォルトの名無しさん [2018/02/17(土) 18:06:03.81 .net]
>>171
strdupで確保した領域をfreeでなくdeleteするのは正しいの?

182 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 18:09:26.31 ID:Lp1rq1Kt0.net]
良いみたいだ
中でmallocで確保している

183 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 18:10:04.88 ID:Lp1rq1Kt0.net]
違う、freeで開放する

184 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 18:14:21.37 ID:Q4Uv6cZz0.net]
>>175
弁護士の唐沢です
mallocとdeleteは併用厳禁です。freeを使用してください

185 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 18:18:24.62 ID:DOQJ47ER0.net]
昔から気になってるんだが「解放」だよね...

186 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 18:25:00.27 ID:Lp1rq1Kt0.net]
そうでした、ごめんね

187 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 18:25:45.10 ID:JVoP/9zU0.net]
>>176
良くねえだろ ぼけ

>>179
開放はpublic的なニュアンスだよな

188 名前:はちみつ餃子 mailto:sage [2018/02/17(土) 18:45:39.74 ID:uBckbaXI0.net]
>>162
ぶっちゃけた話、 strcpy が一番短いと思う。

189 名前:デフォルトの名無しさん [2018/02/17(土) 18:59:50.35 .net]
>>182
strdup という答えが出てるのに何言ってるの?

190 名前:はちみつ餃子 mailto:sage [2018/02/17(土) 19:05:58.96 ID:uBckbaXI0.net]
>>183
strdup は C++ の仕様の範囲内ではないので……。
POSIX と MSVCRT に有るからほとんどの場合に十分といえば十分なのかもしんないけど。



191 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 19:07:20.59 ID:u7LZaTzx0.net]
>>166
接頭辞を見ればデータ内容の属性がワカルというメリットは他に代え難い
ttp://local.joelonsoftware.com/wiki/間違ったコードは間違って見えるようにする

あといちいちthis->xと書くよりも、すすんでm_xと書きましょう

192 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 19:21:01.63 ID:u7LZaTzx0.net]
strdup()だと明示的に開放コードをどっかに書かなくてはならなくて必ず忘れるので
せっかくC++なのでスマポ的にwrapすると良いと思う

193 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 19:37:41.81 ID:JVoP/9zU0.net]
ホワイトボックスなCでは許せるが
ブラックボックスなC++の流儀には全く合わない
それがstrdup

194 名前:167 mailto:sage [2018/02/17(土) 19:53:11.68 ID:szUqPRvW0.net]
>>173-174

195 名前:えてくれてありがとう。
返されるアドレスは等しい値なのか、という単純な質問だったんだけど、
読み直してみたら分かりにくい質問文だと思っていた次第。

それにしても &(*psz)[0] って結構ややこしいのね。
オーバーロードされた[]演算子が返すcharへの参照、
に対してアドレス演算子&を作用させた結果、て感じかな。
[]
[ここ壊れてます]

196 名前:162 mailto:sage [2018/02/17(土) 20:37:30.76 ID:uaRb1j8RM.net]
すみません、たくさんレスありがとうございます。
_strdupにしてみたら期待の動作ができました。
ありがとうございました。

197 名前:162 mailto:sage [2018/02/17(土) 21:27:34.68 ID:uaRb1j8RM.net]
また質問してすみません。
msvc(vs2017)だとコンパイラをC++17にしても以下のプログラムで
C2664 'void (T *&)': 引数 1 を 'hoge *' から 'hoge *&' へ変換できません。
となってしまうのですが、コードにバグが有るでしょうか?msvcのバグでしょうか?
GCCやClangではコンパイルできます。

#include <memory>
struct hoge {};
template <class T>
inline void safe_delete(T*& p) {
if (p) {
delete p;
p = nullptr;
}
}
int main() {
std::unique_ptr<hoge, decltype(&safe_delete<hoge>)> sp{new hoge(), safe_delete<hoge>};
return 0;
}

198 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 22:11:53.16 ID:IU1gsQgu0.net]
(T *&)

そもそも、ポインタ・参照を、同時に使えるのか?

199 名前:片山博文MZ mailto:sage [2018/02/17(土) 22:23:52.63 ID:EwTJGG8Pd.net]
new hoge()は変数じゃないから、代入できない。

200 名前: mailto:sage [2018/02/17(土) 22:35:58.53 ID:I0BNlfaX0.net]
>>165
独習C++ はいいですね、特に演習問題「std::stringを再実装する」を絶賛します
これが書けるようになったらC++初級者をかたってもいいかもしれない、もしかすると解答は載ってなかったかもしれないけれども



201 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 22:35:58.70 ID:++v6vSjK0.net]
>>185
どこから引用したのか知らんけど、そのページ読んでないだろ…
システムハンガリアンはまるで役に立たないって書いてあるぞ。

202 名前: mailto:sage [2018/02/17(土) 22:43:42.94 ID:I0BNlfaX0.net]
>>194
(システム)ハンガリアンってそんなに悪いものなんですかねえ
いや、win32api がバンバンハンガリアンしているので、そんなもんか、と思っていましたが

203 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 22:51:12.84 ID:++v6vSjK0.net]
>>195
OOPともTMPとも型推論とも相性が悪いからね。
MS自身ももう使うなって言ってる。

204 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 22:52:19.16 ID:YAgvIyFy0.net]
頭悪いヤツが多様するハンガリアン

205 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 22:54:25.25 ID:YAgvIyFy0.net]
嫌いだからハンガリアン意地でも使わなかった
dwやらszやらせっかくのフリーフォーマッとが台なしだよ

206 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 22:59:56.16 ID:Q4Uv6cZz0.net]
フリーフォーマットはクソコードの温床ナリよ

207 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 23:03:12.11 ID:4SqFrjwY0.net]
型を変えるたびに変数名も変えるのか
ごくろうやな

208 名前: mailto:sage [2018/02/17(土) 23:08:35.57 ID:I0BNlfaX0.net]
>>191
それは「ポインタ変数の参照」で、たしか便利に使えた気がしますが…
明日にでもちょっと書いてみます、今日は疲れました…

209 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 23:22:18.45 ID:2kmwzB0g0.net]
>>195
システムハンガリアンは弊害ばかりだろうけど、アプリケーションハンガリアンは適切に使えば有益だよ。

210 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 23:25:09.87 ID:4SqFrjwY0.net]
mとかいらなくねってなって削ったら_から始まるようになった



211 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 23:38:55.74 ID:u7LZaTzx0.net]
データの属性としてサイズとか型そのものを明示したいときはシステムハンガリアンするしかないし、
よってWIN32APIがシステムハンガリアンを使って定義されるのは全く正しい

問題なのはアプリケーションハンガリアンすべきときと
システムハンガリアンすべきときが区別できない香具師が適当に使うと
被害甚大だということやがな…

212 名前:デフォルトの名無しさん [2018/02/17(土) 23:41:05.97 ID:YmD9lIL ]
[ここ壊れてます]

213 名前:j0.net mailto: 今時システムハンガリアンは無いだろ
20年前で時間が止まってるのかよ
[]
[ここ壊れてます]

214 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 23:42:44.53 ID:u7LZaTzx0.net]
>>205
なぜシステムハンガリアンが有り得ないのかkwsk
DWORDを渡すABIがある日突然気まぐれにUSHORTに変わったりしたら困りはしまいか

215 名前:デフォルトの名無しさん [2018/02/17(土) 23:49:32.45 ID:YmD9lILj0.net]
ググればいいだろ

積極的批判

システムハンガリアンを使っているソースコードを修正してデータ型を変更した際、同時に変数名も変更するコストがかかる。変更を怠ると、たちまち不整合となり、保守の障害となるだけで一利もない。
C++やC#のような言語では型付けが存在するためにシステムハンガリアンを使用することによる利点はない[3]。
移植性を阻害する。
総称型、メタプログラミングとの相性が悪い。

消極的批判

いわゆる良書と呼ばれるようなC++本で、現在[いつ?]システムハンガリアンを採用している例が皆無。
かつてWindows API/MFCにおいてハンガリアンを全面的に採用していたMicrosoft自身が、.NET Frameworkではハンガリアンを禁止[1]している。

216 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 23:52:28.19 ID:YEFSbrC50.net]
申し訳ないがコピペディアからのウィキペはNG

217 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 23:54:40.85 ID:4SqFrjwY0.net]
型なんてマウスオーバーなりすれば表示されるだろ
変数名に書いておかなきゃわからないとかメモ帳で書いてるのかよ

218 名前:はちみつ餃子 mailto:sage [2018/02/18(日) 00:10:56.39 ID:OOIPfNvY0.net]
>>190
デリータはポインタが指す先のリソースを後始末するのが仕事であって、
ポインタが無効になるという処理は unique_ptr の側でやってくれるので、
ヌルを代入する必要はない。
むしろ unique_ptr 内で管理しているものをデリータが勝手に弄るのは好ましくないので、
参照で受けるのはやめてさしあげろ。

私なりに仕様を読んでこの場合をエラーにする根拠は発見できなかったが、
エラーになってくれる方がありがたい場面だと思う。

219 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 00:16:38.53 ID:Ct2k6iqr0.net]
デリータに渡されるのは左辺値と限らないからだろう。

220 名前:はちみつ餃子 mailto:sage [2018/02/18(日) 00:25:54.07 ID:OOIPfNvY0.net]
N3337 だと 516 ページの説明がデリータの要件だと思うんだけど、
デリータ d の型が D で ptr の型が unique_ptr<T, D>::pointer のとき式 d(ptr) が valid であることと書いてあって、
ptr が rvalue か lvalue かってのは特に指定がない。 (どこかに書いてあったりする?)
この説明で言ってる ptr が変数名なのだとしたら暗に lvalue とほのめかしてるようにも思えなくもないし、よくわからん。
わからんことは避けて通りたい。



221 名前:はちみつ餃子 mailto:sage [2018/02/18(日) 00:30:57.46 ID:OOIPfNvY0.net]
私なりの見解としては未定義だと思ってる。
未定義ならばやったらエラーになる方向にしてくれる方がありがたいという思い。

222 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 00:35:36.09 ID:ju8BsRCFM.net]
>>206
ABIにシステムハンガリアン関係ないだろ…
APIを指してるとして、呼び出し側はリファレンスマニュアルなりIDE機能なりを利用して引数の型情報も
システムハンガリアンが付いている仮引数名と同時に参照しているはずだよね?情報重複してるけど本当に必要?
仮引数名のシステムハンガリアンの有無に関わらず、APIのシグネチャは用意に変更してはならないものだけど、
そもそも仮引数名はシグネチャじゃないからシステムハンガリアンがついていたって何の保証にもならないよ?

223 名前:はちみつ餃子 mailto:sage [2018/02/18(日) 00:51:32.90 ID:OOIPfNvY0.net]
重複する情報をコンパイラの支援なく一致させ続けることが出来るだろうか。 いや、できない。
って話よね。
まあ世の中にはそういうのを検査するツールとかもあるんだろうけどさぁ、
そういうツールを導入できる環境ならまともな IDE だって使えるだろう。

224 名前:162 mailto:sage [2018/02/18(日) 08:06:35.40 ID:F3zIry6ZF.net]
>>210
>>211
レスありがとうございます。
shared_ptrだと行けるのでなんかすればコンパイル通るのではないかと
思ったのですがだめなんですね〜。
普通に使う用とカスタムデリータに使う用と二種類用意してやり過ごしてみたいと思います。
template <class T>
inline void safe_release(T*& p) {
if (p) {
p->Release();
p = nullptr;
}
}
template <class T>
inline void custom_deleter(T* p) {
p->Release();
// p = nullptr; no meaning
}

225 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 12:41:44.81 ID:OWXn9djh0.net]
>>207
藻前はレスをきちんと読んでいないのではないか
>システムハンガリアンを使っているソースコードを修正してデータ型を変更した際、同時に変数名も変更するコストがかかる。(>>207
に直接対応する元レス>>206は、
>データの属性としてサイズとか型そのものを明示したいとき(>>204
について述べているのでデータ型変更時のコストを言い立てても批判にならない

消極的批判については、アプリケーションハンガリアンすべきときと システムハンガリアンすべきときが
区別できない香具師の的外れな批判がクソウゼーからそうなったのかもしれん、
(ちな両者を区別できない香具師への警戒も>>204で言及済み

226 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 12:42:38.82 ID:OWXn9djh0.net]
>>214
十分賢いIDEが人間のミスを完璧に排除してくれるんならそうかもしれんが
システムハンガリアンをしてはいけないという積極的理由にはやはりならないのであった
それとも「間違ったコードは間違って見えるようにする 」(>>185)の効能を全否定する?

APIの定義は変わらなくとも、それを利用するソースコードがころころ変わり得るわけで、
byStrLength
にある日だれかがDWORD型の値を突っ込んだとしたら…

こういうケースを考えたら、「接頭辞を見ればデータ内容の属性がワカルというメリット(>>185)」は
ありえないぐらい賢いIDEでも使わないと他に代え難いと思うがどうか、

>>198
>嫌いだからハンガリアン意地でも使わなかった
おk ようやく建設的な議論に着手できる、

227 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 13:01:54.53 ID:Tc3/Tap60.net]
あり得ないくらいバカなプログラマのことなんか考慮してない

228 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 13:02:14.72 ID:hSV7DJYb0.net]
マウスオーバーで変数の型を確認できたり、縮小変換に警告を出してくれたりする程度のありふれた機能が、ありえないぐらい賢いとな
お前さんはメモ帳でコーディングしてるのか

229 名前: mailto:sage [2018/02/18(日) 13:06:54.12 ID:AAhzNgFK0.net]
>>220
emacs にもそんな機能がほしいと思うことがあります

230 名前:デフォルトの名無しさん [2018/02/18(日) 13:20:53.92 ID:y51LwXumd.net]
システムハンガリアンでミスを減らせるなんて事はない
むしろ害悪



231 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 13:27:53.30 ID:Tc3/Tap60.net]
>>221
俺のemacsには搭載されてるんだが
環境構築もプログラマの腕のうちだからな

232 名前:はちみつ餃子 mailto:sage [2018/02/18(日) 13:30:05.77 ID:OOIPfNvY0.net]
>>221
有るよ。
irony-eldoc や company-mode を入れろよ。
Emacs こそ最強の IDE だろうが。

233 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 13:38:55.48 ID:R2RwPqEs0.net]
今時システムハンガリアンを使うやつはあり得ないくらいのバカだということが決定しました

234 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 13:41:43.01 ID:IMbK2zhKM.net]
>>218
間違ったコードは間違ったように見えるようにする、について、
あなたが指し示した引用元が言及してるのはアプリケーションハンガリアンについてなんだけど…
システムハンガリアンについては否定的意見。
ちゃんと読んだの?

235 名前: mailto:sage [2018/02/18(日) 14:10:40.14 ID:AAhzNgFK0.net]
>>223 >>224
thanks a lot!!

236 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 14:15:44.65 ID:IMbK2zhKM.net]
>>218
APIの仮引数にシステムハンガリアンをつけたことで、間違ったAPI呼び出しが間違ったように見えるのはいつ?
APIのリファレンスなり宣言文なりを自分のコードと見比べたときでしょ?その時必ず型情報も見てるよね?情報重複してるよ?
あとIDEが自動でミスを排除してくれるなんて書いてないよ?ちゃんと読んで

237 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 15:46:49.02 ID:Tc3/Tap60.net]
入れる変数の型と引数の型を確認しない奴とかいるのか
暗黙の型変換は警告を出せばいいし
どうしても見落とすのならコンパイルエラーにしてしまえばいい
あとメンバ変数もテキストの色を変えればいいからm_もいらない

238 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 16:01:36.00 ID:dLlRK2Wa0.net]
m_はホント見苦しい

239 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 20:07:07.34 ID:8oVyjimH0.net]
m_だけならまだ我慢できるけど
this->を必ず付けるルールと併用するのは本当にやめろどっちかにしろ

240 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 20:15:52.43 ID:eae4wPFh0.net]
> this->を必ず付けるルール

破門だろ
C++使うなそんなボケどもは



241 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 21:14:42.68 ID:SQcbDAgv0.net]
ちげえんだよなぁ
thisというキーワードが存在してるから、その存在そのものが、それを書かねばならないような強制力を産み出してる
「存在するが、書かなくてもいい」っていうどっちつかずが、一番論争になる

その反対が「存在しないから書けない」だ
これだと単純明快だ
なんせ、書けない

「書くべきか書かざるべきか」のどーーーでもいい二択に迫られると、とたんに宗教になる

242 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 21:16:52.71 ID:eae4wPFh0.net]
キーワードが存在するのと実体が存在することの違いがそんなに大事なのか?
じゃあvtableのキーワードが存在しないことを、おまえはどう考えている?

243 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 21:33:09.71 ID:Pbt6vSqU0.net]
>>231
オケツに_をつけてますわ

244 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 21:33:14.46 ID:dLlRK2Wa0.net]
おれがそのソースを引き継いだらまず初めにやることは一つ
「this->」から「」への全ソース一括置換

245 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 21:56:25.56 ID:Ct2k6iqr0.net]
「m_」はダメで「_」ならいいってのはなんというか、合理的な理由よりも感覚・感情的なものかね。

246 名前: mailto:sage [2018/02/18(日) 21:57:31.39 ID:AAhzNgFK0.net]
this-> つけるほうが分かりやすくていいと思うのですが、変てこな接尾辞・接頭辞よりも

247 名前:デフォルトの名無しさん [2018/02/18(日) 22:00:36.01 ID:tWqaO5mz0.net]
m_xxx も xxx_ もなんの保証にもならんからな
this->は必ずメンバになるけど

248 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 22:37:59.28 ID:UEE7OeWn0.net]
_はグーグルスタイルの圧力

249 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 22:42:10.00 ID:WjKwYRHz0.net]
余計な命名規約を作るくらいなら言語機能を使った方が良いわな
this->派だわ

250 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 23:21:23.43 ID:AjuHfv4B0.net]
thisで明示した方が所在がハッキリして良いナリ
当職は名前空間もusingせずに明示しろ派ナリ
安易な省略はタイプ数を減らすという軽微なメリットと引き換えに可読性を落としケアレスミスを誘発するという恐ろしいデメリットを孕むナリ



251 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 00:00:39.93 ID:hDVR9PRD0.net]
>>237
「m_」はいらないな

ローカル変数とかと名前が被ってめんどくさい

キャメルケースにはしたくない

「_」だけ残る

252 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 00:14:25.92 ID:o8qstbSZ0.net]
_付けるなら変数の後ろだろ

253 名前:デフォルトの名無しさん [2018/02/19(月) 00:18:14.94 .net]
C/C++なら必然的に末尾に付けるしかない
先頭に_付けるような情弱は死ねばいい
Perl/Pythonだと先頭に付けるけどな

254 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 00:42:17.66 ID:SSx66hQd0.net]
やらんけど、前一つなら規約には引っかからないんじゃなかったけ

255 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 00:57:15.60 ID:hDVR9PRD0.net]
未定義なのは
_始まりでグローバルスコープにあるもの
_始まりでアルファベットの大文字が続くもの全て
__で始まるもの全て

1番目の_始まりなだけならローカル変数、引数、メンバで

256 名前:ヘ予約されていないので使ってもよい []
[ここ壊れてます]

257 名前:はちみつ餃子 mailto:sage [2018/02/19(月) 01:15:36.25 ID:gMMBYzvP0.net]
>>238
名前に変なルールを導入するか this を付けるかの二択であれば this の方がマシというのはわかる。
わかるが、必ずつけるルールにしちゃうとかなりウザいわって話。

258 名前:はちみつ餃子 mailto:sage [2018/02/19(月) 01:20:40.79 ID:gMMBYzvP0.net]
>>242
わかるんだが、そういうルールってすぐに教条主義に陥るからうんざりする。
技巧として使う using にまでグダグダ言うやつが絶対に出てくる。

259 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 02:05:55.66 ID:hDVR9PRD0.net]
コーディング規約はうろ覚えだけど自由度の高いBoostスタイルを薦める

publicな識別子はstdに合わせて小文字スネークケース
マクロはBOOST_から始める
インデントはスペース、一行の文字数は80文字を推奨
意味のある名前を付けることを推奨
ファイル構成に関するもの
その他細々としたもの
ライブラリごとのローカルルールがある場合もある

あとは自由
thisを付けろだとか改行の仕方だとかは一切書かれてない

260 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 02:37:36.58 ID:SEa8F8NC0.net]
>>248-249
お互いにマナーを守る世界は過ごしやすいがマナーの厳守を要求し出すと途端に息苦しくなるナリ
自分にも他人にも読み易いコードを書こうという気遣いが見て取れるなら細かく突っ込んだりはしないナリ



261 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 05:40:18.76 ID:wBFQMwB50.net]
this->で必ずメンバというやつら
じゃあ必ずブロック内変数という表記もしたらどうだ

262 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 12:45:29.69 ID:yTAVcy/Ya.net]
使うライブラリや開発環境の内部のスタイルに合わせるけどな。
派生クラスとかAPIのラッパークラスとか作り始めると、
どうしても内部の書き方に合わせておいた方が読みやすいし。

今でもWin32とかMFCでやることもあるけど、
そのときはm_とかpとかhとかdwとかバンバンつける。

263 名前:はちみつ餃子 mailto:sage [2018/02/19(月) 13:19:17.15 ID:gMMBYzvP0.net]
使う側の都合に合わせろよ。 ラップしてるのに中身のスタイルが漏れてるんじゃラップの甲斐がなくね?
中身を知ってる人がちょっとした便利のためだけに薄いラッパを作る場合ならそういう選択もあるだろうけど。

264 名前:デフォルトの名無しさん [2018/02/19(月) 14:36:30.11 ID:00nJVfHA0.net]
コンバータにあわせろよ。C#で作ってコンバータかけた方が綺麗スッキリするんだから。

265 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 19:36:41.65 ID:2cNNs3G6M.net]
>>253
そりゃAPIに渡す構造体でdwSizeとか使われてたらそこだけは合わせざるを得ないけど自分のコードスタイルを合わせる必要はないだろ

266 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 20:29:38.46 ID:czaD+lHv0.net]
>>230
m_のmは目立つのm、

>>228
ここ構造体メンバとか、

267 名前: mailto:sage [2018/02/21(水) 00:43:21.00 ID:jU0tYaxw0.net]
Windows メインで作業されている方で、
valgrind を併用している方はおられませんか?
もしよろしければ使用感をお聞かせいただけませんか

operator new()/operator delete() 乗っ取りデバッグに限界を感じてしまっている状況です
(cl や bcc32/bcc32c/bcc64 では new/delete 乗っ取りができません)
いや、さっさと入れればいいのですが、仮想環境とかよくわからないし…Vine Linux 以来触ってないし…

268 名前:デフォルトの名無しさん mailto:sage [2018/02/21(水) 01:13:14.52 ID:wPLJFyuu0.net]
windowsならapplication verifier使えば?

269 名前:デフォルトの名無しさん mailto:sage [2018/02/21(水) 09:49:28.54 ID:8k15W99L0.net]
以下のURL

270 名前:のプログラムでSFINAEを試してみていて
https://wandbox.org/permlink/LqKmn50PaPbtohs5

BOOST_TTI_HAS_MEMBER_FUNCTIONを使えば
has_funcというメタ関数を使わずに済んで、短くできないかと試行錯誤中なのですが
うまく行きません。

どうやったらビルドが通るようになるでしょうか?
[]
[ここ壊れてます]



271 名前:デフォルトの名無しさん mailto:sage [2018/02/21(水) 18:31:01.90 ID:8+abUSIR0.net]
まずはそのうまく行かないコードを示したら?

272 名前:片山博文MZ mailto:sage [2018/02/21(水) 19:26:19.92 ID:UifE8nP3d.net]
>>260
https://stackoverflow.com/questions/87372/check-if-a-class-has-a-member-function-of-a-given-signature

273 名前:260 mailto:sage [2018/02/21(水) 19:34:37.06 ID:EmINyJBAF.net]
すみません、BOOST_TTI_HAS_MEMBER_FUNCTIONを使って短くする以前に元々が間違っていました。
以下の3つでオーバーロードしたかったのでした。
・funcというメンバ関数を持つダブルポインタ
・funcというメンバ関数を持たないダブルポインタ
・それ以外

それで思ったのですが多分、Boost.TTIライブラリで
〇〇というメンバ関数を持つクラス、を識別するメタ関数は作れても
〇〇というメンバ関数を持つクラスのダブルポインタ、は無理な気がしてきました。
一旦諦めようと思います。

274 名前:260 mailto:sage [2018/02/21(水) 23:10:49.37 ID:EmINyJBAF.net]
msvcでもGCCでもビルドできるのが
どうにかできました。お騒がせしてすみませんでした。
https://wandbox.org/permlink/HDwsuoVReqJEXWsO

275 名前:デフォルトの名無しさん mailto:sage [2018/02/22(木) 10:26:41.79 ID:qwLRFwLN0.net]
>>263
あと2年待てばconceptできるかもよ

276 名前:デフォルトの名無しさん mailto:sage [2018/02/22(木) 21:31:34.66 ID:SOkZDC9P0.net]
(VBみたいな名前付き引数が実現されたら
 システムハンガリアン否定論者をぎゃふんと言わせられるのに…

277 名前:デフォルトの名無しさん mailto:sage [2018/02/22(木) 21:55:24.65 ID:qwLRFwLN0.net]
システムハンガリアン発祥の会社が何か作ったら否定論者がぎゃふんと言うのか?
おまえの頭の中は論点先取だか循環論法だかがグルグル回っているようだな

278 名前:デフォルトの名無しさん mailto:sage [2018/02/23(金) 22:10:42.23 ID:XlnyEs6k0.net]

想像してごらん全ての人々が
 dwRet = ::WaitForSingleObject( hHandle = m_hThread, dwMillisecond = m_hTCTmo )
と書く世界を、

279 名前:デフォルトの名無しさん mailto:sage [2018/02/23(金) 22:11:40.62 ID:XlnyEs6k0.net]
ごめ
誤: m_hTCTmo
正: m_dwTCTmo

見れば間違いがワカルのがハンガリアンの極めて良いところ

280 名前:デフォルトの名無しさん mailto:sage [2018/02/23(金) 22:21:40.17 ID:R3lraTlNM.net]
>>269
>>196



281 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 10:44:07.22 ID:mn7A8TMg0.net]
一分間で間違いに気づいてはいるものの
そもそもの書く瞬間にはどうやら人智を用いても気付けないらしいから
IDEにエラー出してもらった方が早いんじゃあねえの

実は人間の集中力を超えたところにある方法論で、実践するとストレスが溜まるっぽいから、機械任せにした方がいい
それに、書いてる最中は変数の型まで考えたくない

見て分かることは、機械任せにすれば見なくても分かるから、
今のご時世、人間の有限の集中力を目視チェックなんかに使いたくない
脳みそのリソースはもっと別のところに使うべきだ

つまりは、書いてる最中は脳みそが「それが正しい」と思い込んでるから、
間違いは自分自身では絶対に分からない
これがバグを作り込む
h

282 名前:だったかdwだったかを脳が自動的に混同してるから、その分だけ余計に脳のリソースを使っている

「なんで書いている最中に自分自身で気付かないのか」、これ、とても重要だよ
[]
[ここ壊れてます]

283 名前:デフォルトの名無しさん [2018/02/24(土) 11:11:20.01 ID:51zBno3Kd.net]
変数名と型が一致してるという保証がゼロだからシステムハンガリアンなんて無駄以外の何物でもない
無駄というか悪

284 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 12:15:45.87 ID:mm9B9rZ50.net]
>>272
俺のレスもプログラムも表現と意図が一致してるという保証がゼロ、
まで読んだ

285 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 12:23:50.23 ID:b3ZDZ7IS0.net]
その場合、やめられる方だけやめればいいな
つまりハンガリアンを。

286 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 12:27:42.98 ID:pqM6ijVV0.net]
まともな開発環境使っていれば必要ないのでは

287 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 12:34:43.53 ID:B9f7/evx0.net]
ハンガリアンはもうだめだ。
ポーランドを使おう。

288 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 12:51:07.68 ID:d7+fd25J0.net]
>>272
そういう事言い出すと「関数名と機能が一致してる保証がゼロ」や「クラスメンバの隠蔽が完璧である保証がゼロ」などといくらでも難癖を付けれるナリ
ヒューマンエラーを理由に不要と結論付けるのならあらゆるコーディング規約が不要という結論になってしまう、これはいけない
命名規則は可読性の向上に結びつくものでなければならない、規約を違反する事で起きるトラブルはプログラマ側の責任、それは分かるよね?

289 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 13:26:14.86 ID:b3ZDZ7IS0.net]
ヒューマンエラーが起きる部分は極力排除して機械任せにできる部分は機械任せにすればいい
ハンガリアンを導入する理由はもはや無いな。可読性悪いし。

290 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 14:24:10.94 ID:yWQ45jBy0.net]
>>278
いや、ハンガリアンは可読性はよくなる方だよ
整合性維持に難があるだけで



291 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 14:29:08.35 ID:mm9B9rZ50.net]
可読性ぐらいテンプレートによる高度なメタプログラミングに慣れた諸兄なら
ハンガリアンごとき目を慣らして解決できるはずなんじゃ…

292 名前:はちみつ餃子 mailto:sage [2018/02/24(土) 15:03:19.72 ID:ohURjCBl0.net]
https://www.google.co.jp/search?q=%E5%8D%8A%E5%88%88%E3%82%8A&tbm=isch

293 名前:はちみつ餃子 mailto:sage [2018/02/24(土) 15:06:09.97 ID:ohURjCBl0.net]
>>276
Lisper「せやな!」

294 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 17:03:03.20 ID:agv5rOmv0.net]
>>276 >>282
両者は共存不可能な対立概念ではないけどね。

細かいことを言わせてもらえば、
「ハンガリアンとポリッシュ」か「ハンガリーとポーランド」と
並べてくれた方が座りがいい気もするけど…。
「ハンガリアン記法とポーランド記法」だとあまり気にならない不思議。

295 名前:デフォルトの名無しさん mailto:sage釣 [2018/02/24(土) 17:08:35.75 ID:4JIC+wG/M.net]
なぁにその内、ロシアが併呑してくれるさ

296 名前:デフォルトの名無しさん mailto:sage [2018/02/25(日) 14:16:53.97 ID:8l5JrV0a0.net]
>>266
名前付き引数イディオムとenable_if<is_same<...>::value>が最強と言うことだな

※プログラマが、使用者が型を間違えないようにと気を使うのが正しいなら、間違えたらコンパイルエラーになるこれが最強だろ?

297 名前:デフォルトの名無しさん mailto:sage [2018/02/25(日) 14:35:24.31 ID:zhzj1IkW0.net]
>>277
ちげえんだよんぁ
可読性じゃねえんだよ

>>268を見てみろよ、
読む時じゃなくて書く時のヒューマンエラーだ
なんで入り込んだのか全く分からんようなミステイクだ
プログラミングが工業的生産の一種なら、その手のヒューマンエラーは無い方がいい

で、改めて>>268を見てみると、「可読性」があってプレフィクスの間違いに気付いてはいるものの、
そもそも書く段でなんで間違えたのか、それが全く分からない
他人はおろか本人すらも自覚できない謎の理由でプレフィクスを間違えてる(これがヒューマンエラーなんだけどな)



298 名前:んで、後だしジャンケンだと、「プレフィクスが最初から無ければ、間違いも発生しえなかった」、とも言える

もしかすると、書く時に間違える/読む時に間違える の比率を考えると、ハンガリアン記法は書く時に間違えやすいが読むときに間違いにくい……のトレードオフなだけかもしれん
要するに、可読性と生産性のトレードオフだけなんじゃあねえのか?
それに、読む時のヒューマンエラーと書く時のヒューマンエラーをわざと混同してるのはいただけない
[]
[ここ壊れてます]

299 名前:デフォルトの名無しさん mailto:sage [2018/02/25(日) 16:15:03.29 ID:s5td7qK+0.net]
void func(int a)
{

300 名前:デフォルトの名無しさん mailto:sage [2018/02/25(日) 16:15:31.06 ID:s5td7qK+0.net]
void func(int a)
{
//aが何型かわからない
//アホかおまえは
}



301 名前:デフォルトの名無しさん mailto:sage [2018/02/25(日) 16:46:37.12 ID:s5td7qK+0.net]
template <typename T>
void func(T lpszA)
{
//lpszって書いてあるからTはLPSTR型だな
//アホかおまえは
}

302 名前:デフォルトの名無しさん mailto:sage [2018/02/25(日) 19:14:43.19 ID:4jIr3vvu0.net]
>>288
func()が常に1画面に収まって1万行の関数とかでありえないという根拠は

>>289
テンプレート定義時の引数に対して引数内容固有の命名が難しいのは
ハンガリアンに限ったことではないからハンガリアンに対する批判になんね

テンプレート批判論者には考える力がないのかね…

303 名前:デフォルトの名無しさん mailto:sage [2018/02/25(日) 19:15:39.42 ID:4jIr3vvu0.net]
ごめ
×:テンプレート批判論者
○:ハンガリアン批判論者

304 名前:デフォルトの名無しさん [2018/02/25(日) 19:29:08.16 ID:s+qaK1zS0.net]
テンプレートに対してはハンガリアンは全くの無力だよなあ
一貫性の観点からやっぱりハンガリアンは無い方がいいわ

305 名前:デフォルトの名無しさん mailto:sage [2018/02/25(日) 19:48:52.19 ID:4jIr3vvu0.net]
.>>290のレスを見てテンプレートの実体化時までハンガリアンが無力なことにされてはかないませんなあ…

306 名前:デフォルトの名無しさん mailto:sage [2018/02/25(日) 20:11:05.52 ID:fbPK05Px0.net]
そもそも関数が長い場合は型情報を持たすのもありだよな
システムハンガリアンをやめさせようとして先に関数を短くしなきゃだめだなと追う結論に至って放置した

307 名前:デフォルトの名無しさん mailto:sage [2018/02/25(日) 20:37:38.24 ID:s5td7qK+0.net]
//1万行の最長不倒関数を書く
//アホかおまえは

308 名前:デフォルトの名無しさん mailto:sage [2018/02/25(日) 21:00:14.67 ID:s5td7qK+0.net]
void func(int lpszA)
{
//lpszって書いてあるからLPSTR型だな
//アホかおまえは
}

309 名前:デフォルトの名無しさん mailto:sage [2018/02/25(日) 21:58:30.83 ID:qLuvVokt0.net]
システムハンガリ理解してない人の例上げてね?

310 名前:デフォルトの名無しさん mailto:sage [2018/02/25(日) 22:45:03.97 ID:4jIr3vvu0.net]
>>295
「1画面に収まらない」を都合よく無視しないように



311 名前:デフォルトの名無しさん mailto:sage [2018/02/25(日) 23:43:59.89 ID:yscCG2q60.net]
システムハンガリアンはDWORDをintに型名変更するだけでその変数名全部終わるからなしかも一瞬で

312 名前:デフォルトの名無しさん [2018/02/25(日) 23:57:37.89 .net]
>>299
dwをiに置換するだけだからリファクタリングが楽っていう意味?

313 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 00:59:51.78 ID:VDQLjiDS0.net]
まったく逆だ
dwからiに全部置換していかないと変数名の意味を為さなくなるからシステムハンガリアンは愚かさ甚だしいと云うておる

314 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 01:02:48.27 ID:VDQLjiDS0.net]
アンパンマン調で例えるなら型名変えるだけでメンテ百倍みたいな

315 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 01:10:40.33 ID:jQ6YvoyL0.net]
組み込み型はいいけどクラスはどうすんのさ
意味の分からないサフィックスを付けられても困るぞ

316 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 01:11:26.04 ID:VDQLjiDS0.net]
ハンガリアン!新しい型だよ!
有難う!デザパタ娘ちゃん!
メンテ百倍!ハンガリアン!

317 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 01:55:04.49 ID:4PPe6ndQ0.net]
そもそもDWORDをintに変えることが滅多にない

318 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 02:10:59.71 ID:jQ6YvoyL0.net]
dwとか書かれてもDWORDの定義を知らないと意味不明だし
やるなら符号の有無とサイズが分かるように書かないと意味ないでしょ

319 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 04:56:46.87 ID:lxlU26hn0.net]
>>298
おまえは間違いなく1万行と書いた
その史実を誤魔化すことはできない

「ありえないという根拠は」という問いを反論として用いるのは
俺が「ありえない」と言った(事実と違うが)ことが
おまえが「ありうる」と思っているのと違ったからだろう

いずれにせよ「アホかおまえは」にふさわしいハチャメチャだな

320 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 08:02:35.99 ID:SPD4iDfM0.net]
ポインタのpとか参照のrとかは今でも使ってる



321 名前:デフォルトの名無しさん [2018/02/26(月) 08:09:57.39 .net]
>>307
史実とか言っちゃうのって。。。

322 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 08:16:32.18 ID:TvC1o7QC0.net]
>>307
もうちょっとまとめて喋れ
読みづらい

323 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 09:55:53.14 ID:lxlU26hn0.net]
>>308
俺も使う
ただし名前そのものをポインタっぽくするだけで
ハンガリアンのプリフィックスとしてではない

324 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 09:56:14.50 ID:lxlU26hn0.net]
>>310
ニホンゴワカリマスカ?

325 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 10:44:04.77 ID:U+kFnN5D0.net]
ハード直叩きのドライバ屋はデータバスやレジスタの幅を間違えると大変だから
物理層の実装ではハンガリアン使うこともあるよ

326 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 10:55:31.04 ID:n/n1Eejna.net]
>>313
むしろそれはアプリケーションハンガリアンじゃね?

327 名前:デフォルトの名無しさん [2018/02/26(月) 11:21:30.74 ID:mt/mMzV6d.net]
間違えると大変だからハンガリアンを使ってはならないんだよ
偽の情報に頼るんではなくて元を逐一確かめないと

328 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 11:33:14.68 ID:yfGCkThX0.net]
今勉強してるんだけどC++ではポインタを使わずに参照で書くのがデフォルトなの?

329 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 11:36:50.47 ID:TvC1o7QC0.net]
>>315
不一致が存在しない事が保証されてれば問題無いんやな
そういう事ならつまり変数宣言とプレフィックスが全て一致してるかチェックするスクリプトとかがあれば満足って事でええんか?

330 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 11:38:09.46 ID:n/n1Eejna.net]
>>316
ポインタも必要に応じて使うけど、メモリ管理の煩雑さとミスの危険性を避けるために参照やスマートポインタやコンテナ、イテレータなど他に適切な物がある時はなるべくそちらを使うのが流儀かな。



331 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 11:51:17.55 ID:lxlU26hn0.net]
>>316
デフォ・・・まあ、そう言えなくもないか
参照でもポインタでもどっちでもいい用途には参照
ポインタでしかできないことはNULLに++や絶対番地指定
参照でしかできないことは一時オブジェクトやコピコン類

332 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 12:15:47.61 ID:z/vehsiL0.net]
書き込むときは参照ではなくポインタにしろと言ってた人がいた。
理由を聞いたら「なんか書き込んでる感がない」だった。

333 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 12:17:18.65 ID:lxlU26hn0.net]
std::cin >> &a;
やだよ、こんなの

334 名前:デフォルトの名無しさん [2018/02/26(月) 12:21:09.58 ID:W3q5coR10.net]
グーグル規約だと書き込む引数は参照ではなくポインタにしろってなってる
でも標準ライブラリが普通に参照で書き込んでるので意味ないかなと思う

335 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 13:05:03.30 ID:LqmnPPXld.net]
やC++糞

336 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 13:30:49.55 ID:jQ6YvoyL0.net]
好きな方使えとしか言いようがない
ただ参照はnullポインタが無いという特性はある

337 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 13:42:09.37 ID:z/vehsiL0.net]
>>322
自分もその人の気持ちは理解できた。
func(a, &b);
と書かれていると、bに結果を書き込んでいる感があるし。

338 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 13:44:00.32 ID:yfGCkThX0.net]
レスサンクス
cからだからポインタで書いちゃいそうだわ

339 名前:デフォルトの名無しさん [2018/02/26(月) 18:25:47.85 ID:aHz4HBvIM.net]
ローカルで宣言したunique_ptrを他のメソッドに渡してデータをつめたいばあいってどういう引数で渡せば良いの?
unique_ptr<Hoge> ptr(new Hoge);
hogehoge(ptr);

Hogehoge::hoge(const unique_ptr<Hoge>& ptr){
ptr->aaa = 123;
}

これでいける?
なんかウェブサイトみてると&&二つとかあったりするの見かけて混乱してきた

340 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 18:46:48.22 ID:6OgFttId0.net]
&&は所有権ごとぶん投げる時に使う
渡した後も呼び出し元で使うんだったらそれて合ってるぞ



341 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 19:00:19.12 ID:r2m2Cr000.net]
>>327
それだったらunique_ptrじゃなくて参照渡せば良いだけじゃ

342 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 19:31:15.52 ID:NcBRNf650.net]
知らない間に、&& みたいな参照渡しもできた

Rust の所有権ムーブの事

343 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 19:58:16.47 ID:jQ6YvoyL0.net]
何年も前からある

344 名前:デフォルトの名無しさん [2018/02/26(月) 21:01:42.73 ID:k0ghrbBh0.net]
所有権を渡すのってstd:move()だと思ってたんだけどconst &&でもいけるの??

345 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 21:42:25.99 ID:adcc2IaV0.net]
C++17でstd::iteratorが非推奨ってなっているみたいだけど代わりに何使うの?

346 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 23:56:58.87 ID:4PPe6ndQ0.net]
[]

347 名前:デフォルトの名無しさん mailto:sage [2018/02/27(火) 00:00:22.09 ID:o+FKgYKC0.net]
>>333
自分で実装する

348 名前:はちみつ餃子 mailto:sage [2018/02/27(火) 02:00:32.40 ID:+XEdVvf40.net]
>>332
std::move は rvalue にキャストするだけで、それ自体にはムーブする機能はない。
実際にムーブの処理をするのはムーブコンストラクタやムーブ代入演算子の方やで。

349 名前:はちみつ餃子 mailto:sage [2018/02/27(火) 02:10:59.44 ID:+XEdVvf40.net]
&& は単純に右辺参照って意味しかないから、 rvalue を受け取れるってだけ。
だけど lvalue でもムーブしてぇってときは std::move で rvalue にキャストすんの。

350 名前:デフォルトの名無しさん mailto:sage [2018/02/27(火) 02:19:45.35 ID:o+FKgYKC0.net]
そこら辺はめんどくさいからテンプレート使え



351 名前:デフォルトの名無しさん [2018/02/28(水) 18:07:41.72 ID:IZRayiSM0.net]
右辺値参照とか難しいなー
最近ようやくC++11使えるようになったから全然いってることがわからん

352 名前:片山博文MZ mailto:sage [2018/02/28(水) 18:34:51.95 ID:jmOf6Upnd.net]
右辺値参照が使えなかった頃は、std::swapでスピード最適化していた。ポインタとメモリー確保を含む構造体は、
単純にスワップしたり、単純にバイト単位コピーしたりするのはまずいことがある。
そういうときに、std::swapを使う。右辺値参照は、それよりちょっと速くて賢いが、テンプレート型を理解してないと多分理解できないと思われる。

353 名前:片山博文MZ mailto:sage [2018/02/28(水) 18:43:18.32 ID:jmOf6Upnd.net]
右辺値参照の型はテンプレートを使った特殊な型だと考えるのが自然。

T&& === rvalue_ref<T>.

std::move(T&)はrvalue_ref<T>という型。

354 名前:片山博文MZ mailto:sage [2018/02/28(水) 18:44:28.64 ID:jmOf6Upnd.net]
訂正。
std::move(T&)の戻り値はrvalue_ref<T>という型。

355 名前:片山博文MZ mailto:sage [2018/02/28(水) 19:01:47.21 ID:jmOf6Upnd.net]
すみません、テキトーなことを書いたので、銃殺されます。

356 名前:はちみつ餃子 mailto:sage [2018/02/28(水) 19:18:07.29 ID:7ezW7mFb0.net]
実際のところヘッダファイルから std::move の定義を抜き出すとこんな感じ。

template<typename _Tp>
constexpr typename std::remove_reference<_Tp>::type&&
move(_Tp&& __t) noexcept {
return static_cast<typename std::remove_reference<_Tp>::type&&>(__t);
}

テンプレートの都合で面倒くさくなってるけど、実態としては static_cast してるだけ。

357 名前:片山博文MZ mailto:sage [2018/02/28(水) 19:24:03.59 ID:jmOf6Upnd.net]
そのstd::remove_reference<T>::typeはTから左辺値参照や右辺値参照をはずした型になるね。それに&&を付けるんだから、左辺値参照が右辺値参照になる。

358 名前:片山博文MZ mailto:sage [2018/02/28(水) 19:25:31.22 ID:AZJp7LrB0.net]
やはり、constexprやnoexceptを付けた方が性能がいいんだな。

359 名前:はちみつ餃子 mailto:sage [2018/02/28(水) 19:35:33.38 ID:7ezW7mFb0.net]
C++17 では noexcept は型の一部という扱いに変更された。
例外を投げないなら投げないと書いておかないと他のライブラリとの組合せで型エラーになったりすることもあるかもしれんぞ。

360 名前:片山博文MZ mailto:sage [2018/02/28(水) 19:43:54.33 ID:jmOf6Upnd.net]
やっぱ江添亮様ってスゲーや。



361 名前:デフォルトの名無しさん mailto:sage [2018/02/28(水) 21:22:30.07 ID:BlsGZA5I0.net]
江添本にこの辺りのチートシートと問題集いれたら100部くらい売り上げ増えるのでは

362 名前:デフォルトの名無しさん mailto:sage [2018/02/28(水) 21:27:43.47 ID:LDTKKB+20.net]
江添ってあれか

363 名前:。ニートの時にやることないからたまたま目についたC++の仕様書を読み込んでたら
いつの間にかすごく強くなったという、ホリランみたいな。
[]
[ここ壊れてます]

364 名前:デフォルトの名無しさん mailto:sage [2018/02/28(水) 21:32:34.60 ID:eOQjYTv40.net]
おまえそれをバカにできるのか?
仕事ってそういうもんだぜ
目の前の案件のために必死こいても付け焼き刃にできることは知れてるんだよ
「ヒマ」なときに遠くを見て投機的にコツコツ努力したことが
あとで花咲くことがあるし咲かないこともある
賭に勝った者を、降りたやつがバカにできるのか? え、おい

365 名前:デフォルトの名無しさん mailto:sage [2018/02/28(水) 22:02:12.40 ID:debsNNov0.net]
>>320
>>322
書き込むときポインタ渡しにするのは
C++には参照渡しがin/out/refのどの意味なのか表すシンタックスが現状無いから
というのが主要な動機だと思うが
inならconst T& aというのは比較的読み筋だが
T* pと書いただけだとoutなのかrefなのかやっぱりわからん…

366 名前:デフォルトの名無しさん mailto:sage [2018/02/28(水) 22:22:45.57 ID:n9jVMobsM.net]
>>352
outは**だろ

367 名前:デフォルトの名無しさん mailto:sage [2018/02/28(水) 22:38:47.40 ID:ugxprRf80.net]
&& は、Rust のmove の事。
所有権移転。移転元が空になる

基本的に数年は、ドワンゴ江添と共に、山ごもり!
江添が空海なら、漏れは最澄w

悟りを開くまで、空海・最澄の一問一答が、延々と続くw

368 名前:はちみつ餃子 mailto:sage [2018/02/28(水) 23:03:26.56 ID:7ezW7mFb0.net]
rvalue reference 自体はムーブしねぇつってるだろ。

369 名前:デフォルトの名無しさん mailto:sage [2018/03/01(木) 02:40:44.97 ID:Cta7ST2f0.net]
&&は所有権付き参照オブジェクトのようなものだな

370 名前:デフォルトの名無しさん mailto:sage [2018/03/01(木) 07:05:17.46 ID:/bb7E7Gp0.net]
&&参照は「このオブジェクトもういらないからぶっ壊してもいいよ」というサイン
言うなれば肉屋へ行く馬車
野生のオブジェクトは誰に断る必要もないので勝手に連れてかれて解体される
家畜を渡す時は解体に同意するサイン(std::move())が必要



371 名前:デフォルトの名無しさん [2018/03/01(木) 07:13:49.75 ID:YKLxBKOvM.net]
Fooクラスのunique_ptrがつまったvectorを作って、他クラスのメンバ変数にセットするときはどう渡すべき?
作った元ではもう使わないから所有権放棄していいとする

const参照渡しにして、渡された側でvectorの中身を全部std:move()して新しいvectorにつめるのが一番最初に思い浮かんだ
そんなことしなくても最近ここででてる、&&つけて渡してそのままセットすれば解決するのかな?

372 名前:デフォルトの名無しさん mailto:sage [2018/03/01(木) 07:20:14.18 ID:/bb7E7Gp0.net]
vectorを丸ごとmove付けてコンストラクタに渡せばいいよ
出来上がった後で渡したいならswapすればいい

373 名前:デフォルトの名無しさん [2018/03/01(木) 08:22:01.82 ID:YKLxBKOvM.net]
なるほどー
コードにするとこんな感じかな?

std::vector<std::unique_ptr>vec_hoge;

...

Hoge hoge;
hoge.setHoge(std:move(vec_hoge))


Hoge::setHoge(vector<unique_ptr>&& vec_hoge) {
this-> vec_hoge = vec_hoge;
}

374 名前:デフォルトの名無しさん mailto:sage [2018/03/01(木) 08:51:22.88 ID:Z75vpagFM.net]
>>360
最後にmove必要

375 名前:はちみつ餃子 mailto:sage [2018/03/01(木) 08:54:17.19 ID:1485DW7Q0.net]
せやな。
rvalue reference は lvalue だぞ。

376 名前:デフォルトの名無しさん [2018/03/01(木) 10:38:08.68 ID:YKLxBKOvM.net]
ありがとう!勉強になりました

377 名前:デフォルトの名無しさん mailto:sage [2018/03/01(木) 22:06:37.33 ID:fp7iC0tG0.net]
>>353
ちげう

378 名前:デフォルトの名無しさん mailto:sage [2018/03/02(金) 07:10:33.20 ID:GbvR6g/La.net]
noexceptにtrue,falseがある理由については

#include <type_traits>

template<typename T>
void test(T t)noexcept(is_unsigned<T>){
//Tの型がunsignedの時だけは例外は投げない
}

こういう事が出来ると書いてあ

379 名前:チたけど、c++17以降も問題なく使えるだろうか? []
[ここ壊れてます]

380 名前:デフォルトの名無しさん mailto:sage [2018/03/02(金) 07:15:24.27 ID:bNTu0vGw0.net]
is_unsigned_vだろ

なぜC++17以後で廃止になると思ったんだ?



381 名前:デフォルトの名無しさん mailto:sage [2018/03/02(金) 07:38:40.59 ID:GbvR6g/La.net]
stdも抜けてた。。。

廃止になるじゃなく面倒な事になりそうだと。

382 名前:デフォルトの名無しさん mailto:sage [2018/03/02(金) 08:07:40.62 ID:mIGjbFX+0.net]
unsigned は組み込み用だろ

0 〜 255 のカウンターなどで、無限にループする。
255の次に、0が来る

overflow にされると困る

383 名前:デフォルトの名無しさん mailto:sage [2018/03/02(金) 08:51:13.35 ID:Du7whmdSM.net]
>>368
組み込みでなくても極々普通に使うし、標準ライブラリ使ってれば知らぬ間に使ってる。

384 名前:デフォルトの名無しさん mailto:sage [2018/03/02(金) 09:14:23.17 ID:vziGgrtU0.net]
size_t

385 名前:デフォルトの名無しさん mailto:sage [2018/03/02(金) 09:29:49.65 ID:bNTu0vGw0.net]
それを言うなら
uintptr_t

386 名前:デフォルトの名無しさん mailto:sage [2018/03/02(金) 12:01:58.77 ID:D+SIA0G1d.net]
普段は uint_xxt と size_t しか使わんわ
int と ptr あんまり相互に変換しないし

387 名前:デフォルトの名無しさん mailto:sage [2018/03/02(金) 22:27:40.22 ID:3pZ6Fb9JF.net]
visualstudio2017 でスタックトレースがしたいのですができません。
最初はBoost.StackTraceで試みたのですがMSVCでは行数やファイル名の出力が非対応で
アドレスまでしか取れませんでした。

次にWinAPIを使って解決させようとしたのですがこれもうまく行きません。
SymGetSymFromAddrを使うとどうやってもエラー126が帰ってきてしまいます。

以下のプログラムがVisualstudio2017で動作している人はいないでしょうか?
ttps://github.com/shive/blogpost/blob/master/20130918-stacktrace/main.cpp

388 名前:デフォルトの名無しさん [2018/03/02(金) 23:27:18.83 ID:KYEHMUiK0.net]
スタートレックと空目した

389 名前:デフォルトの名無しさん mailto:sage [2018/03/02(金) 23:40:43.96 ID:vziGgrtU0.net]
>>373
こうなった

---- BEGIN BACKTRACE ----
1 : 0x00e76873 : Project1 : mycode::foo : c:\users\\source\repos\project1\project1\main.cpp(116) :
backtrace();
2 : 0x00e76513 : Project1 : mycode::bar : c:\users\\source\repos\project1\project1\main.cpp(120) :
foo();
3 : 0x00e76563 : Project1 : mycode::baz : c:\users\\source\repos\project1\project1\main.cpp(124) :
bar();
4 : 0x00e76b33 : Project1 : mycode::hoge : c:\users\\source\repos\project1\project1\main.cpp(128) :
baz();
5 : 0x00e76f0d : Project1 : main : c:\users\\source\repos\project1\project1\main.cpp(134) : try {
6 : 0x00e7870e : Project1 : invoke_main : f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl(78) : ?
7 : 0x00e785b0 : Project1 : __scrt_common_main_seh : f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl(283) : ?
---- END BACKTRACE ----

390 名前:片山博文MZ mailto:sage [2018/03/02(金) 23:47:44.16 ID:7K8TE86Qd.net]
https://stackoverflow.com/questions/22481126/why-isnt-symgetsymfromaddr64-working-it-returns-error-code-126

未確認



391 名前:373 mailto:sage [2018/03/03(土) 01:05:16.48 ID:7bxI8Ps/M.net]
>>375
プロジェクトの設定はdbghelp.libを追加しただけでしょうか?
あとWindows10ですか?7ですか?

>>376
自分もそれを読んでx86とx64両方試したのですがダメでした、、、

392 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 01:52:28.21 ID:e0EB+SLu0.net]
>>377
Windows10で実行
ライブラリは追加したのと
このFileNameがchar*でmsvcでは通らないから適当に文字列のバッファを作って渡した
>94 line.FileName = "?";

393 名前:373 mailto:sage [2018/03/03(土) 07:43:32.07 ID:MjEj/kk+F.net]
>>378
自分はWindows7&VisualStudio2017なのですが
dbghelp.lib、dgbhelp.hを探すと以下の場所にあるのでWin10でしか対応していないのかなと…

C:\Program Files (

394 名前:x86)\Windows Kits\10\Lib\10.0.16299.0\um\x86
C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\um

C:\Program Files (x86)\Windows Kitsの下には8.1と10
という名前のフォルダがあるのでOSの番号ぽいです。

dbghelp.dllならそこらじゅうにあるのでLoadModule関数で呼べばいけるのかも
[]
[ここ壊れてます]

395 名前:373 mailto:sage [2018/03/03(土) 08:51:25.52 ID:MjEj/kk+F.net]
VisualStudio Installerで構成の変更をしようとすると
'Windows XP Support for C++'というのがあって
これがWindows7用のSDKらしいです。(どんな名前の付け方だ…)

これをインストールするとめでたくdbghelp.libとdbghelp.hが追加されるので
それでコンパイルしようとすると
#include <dbghelp.h>
とかくだけでコンパイルエラーになってしまいました。

エラー C2760 構文エラー: トークン '識別子' は予期されておらず、'型指定子' が予期されています scratch c:\program files (x86)\microsoft sdks\windows\v7.1a\include\objbase.h 239

Windows10を買うかVisualStudio2015をインストールするかしかないのかもしれません;;

396 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 09:17:35.93 ID:iGrPHQq30.net]
>>380
Visual Studio 2017 スレの919あたりから話題になっているけど、
VS2017 の Windows 旧バージョンサポートはおかしいみたい。
2015と同じツールセット、SDKを用いても動作が違う。

2015をインストールするのがいい気がする。

参考
Visual Studio 2017 Part4 ・
mevius.5ch.net/test/read.cgi/tech/1509244956/

https://www.visualstudio.com/ja/vs/older-downloads/

397 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 10:29:47.52 ID:eUUf6Fhxd.net]
コンパイラを作っているんですが、char 10bit short 18bitの時はsizeofはいくつを返せばいいんですか?

398 名前:デフォルトの名無しさん mailto:sage釣 [2018/03/03(土) 10:36:52.34 ID:/0Rk5gcF0.net]
>>382
アドレス単位を返す。ワードアドレッシングなら通常全て1になる

399 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 10:42:04.53 ID:iGrPHQq30.net]
メモリ上のレイアウト次第
その18ビットを隙間だらけでchar8個分のメモリに置いてるなら8だし、
詰めて2個分で置いてるなら2

400 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 10:51:46.74 ID:sKvL+uoJ0.net]
sizeof(char)は必ず1じゃなかったっけ?



401 名前:デフォルトの名無しさん [2018/03/03(土) 12:49:02.99 .net]
sizeofが小数を返しちゃいけないって誰が決めたの?🙄

402 名前:はちみつ餃子 mailto:sage [2018/03/03(土) 13:15:05.21 ID:uc6Z/AdW0.net]
>>386
仕様。
C99 だと 7.17 に size_t は sizeof 演算子の結果の符号無し整数型って書いてある。
C++11 だと 5.3.3 に sizeof 演算子の返却値の型は size_t って書いてあって、
18.2 に size_t は符号無し整数型って書いてある。

403 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 13:20:00.43 ID:Yc5zIgYv0.net]
sizeof(bool) == 0.125 であって欲しいのかw

404 名前:はちみつ餃子 mailto:sage [2018/03/03(土) 13:43:14.93 ID:uc6Z/AdW0.net]
どうせ汎整数昇格で int になることばかりなので、
アドレス単位以下の小さなオブジェクトにする意味なんてないよ。
大きな配列で扱いたいときは std::bitset が有るし。

405 名前:デフォルトの名無しさん [2018/03/03(土) 14:56:24.32 .net]
>>387
ありがとう🤣

406 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 15:45:51.52 ID:+GZAkR500.net]
>>389
もしsizeofが小数を返したら汎整数昇格は適用されないんじゃない?

407 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 16:09:32.75 ID:e0EB+SLu0.net]
使用者が混乱するような仕様はちょっと

408 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 18:28:41.77 ID:OIzMcqKj0.net]
この板に書いてあることがほとんどわかっていないようなクソ素人ですみませんがちょっとお聞きしたいことがあります。
Windows 7でOpenCVをTDM-GCCにて動かしたいと思っているのですが、どなたかこの設定で動かされている方など居られ

409 名前:ワすでしょうか?
もしくは素直にVisualStudioなど使ったほうが良いのでしょうか?
昨日からあれこれ試しているのですがまったく動かないです。
[]
[ここ壊れてます]

410 名前:片山博文MZ mailto:sage [2018/03/03(土) 19:01:36.20 ID:ZgUZF4A1d.net]
>>393
俺ならパッケージマネージャがあるMSYS2+MinGW使うよ。
パッケージマネージャがないTDM-GCCなら、まず、OpenCVをビルドして、リンクできるようにしないといけない。
まあ、めんどうくさい訳で。



411 名前:片山博文MZ mailto:sage [2018/03/03(土) 19:37:06.06 ID:ZgUZF4A1d.net]
初心者はVSやるとよろし。NuGetというパッケージマネージャがあるよ。

412 名前:デフォルトの名無しさん [2018/03/03(土) 20:12:29.49 ID:OIzMcqKj0.net]
片山様
レスありがとうございます。
そうですね、VSは重いという理由で避けていましたがやはりまずはちゃんと王道からやっていこうと思います。
慣れたらソースからビルドもしてみたいですが、まずはOpenCVであれこれしたいのでやりやすい環境で頑張りたいと思います。
ありがとうございました。

413 名前:はちみつ餃子 mailto:sage [2018/03/03(土) 20:37:52.59 ID:uc6Z/AdW0.net]
VS の統合開発環境を外したツールセットだけの SDK もあったはず。
でもまあ初心者は統合開発環境があった方がいいってのは同意だな。

414 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 21:19:46.86 ID:oo1zjTPVa.net]
C++の文字列、u16やu32stringとか乱立してるけど今時TCHARとか使わないでしょうか?

string,wstring,u16string,u32string...どれか決め打ち?

415 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 21:37:46.21 ID:iGrPHQq30.net]
主に使ってるライブラリ/フレームワークに合わせれば?

何でもいいなら multibyte で utf-8 一択だろう
ucs2 (16bit) にしても ucs4 (32bit) にしてもどうせ
合字とかで1コードポイント1文字にならないから意味ないし
コンテナは string でも何でも好きなものを

416 名前:はちみつ餃子 mailto:sage [2018/03/03(土) 21:52:22.75 ID:uc6Z/AdW0.net]
どうやろな?
Windows だと API が UTF-16 前提だからそれで揃えるってのは悪くない選択だと思うし。

417 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 21:55:03.34 ID:e0EB+SLu0.net]
>>398
TCHARはcharとwchar_tをvisual studioのプロジェクトの設定で切り替えてtypedefしてる型だ
マイクロソフトのライブラリの一部

u16stringとu32stringはstd::basic_string<char16_t>とstd::basic_string<char32_t>のエイリアス
UTF-16とUTF-32の文字列を扱うクラスで標準ライブラリの一部

そもそもどっちかというものではない
std::basic_string<TCHAR>とか使ってもいい

418 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 22:02:34.74 ID:i5AAIiVZ0.net]
OpenCVのビルドぐらいCMakeでGUIでできる

419 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 22:07:02.05 ID:i5AAIiVZ0.net]
>std::basic_string<TCHAR>とか使ってもいい
ほんとそれ

ていうかWin32APIでサポートされるうちはやっぱマルチバイトが無難

420 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 22:12:10.73 ID:q1dNIabI0.net]
ShiftJisなんて廃止して、UTF8に統一してしまえば良かったよね



421 名前:デフォルトの名無しさん mailto:sage釣 [2018/03/03(土) 22:19:12.96 ID:/0Rk5gcF0.net]
UTFはソートのコストが高いから痛し痒しだけどね
SJISはその点は優秀かと

422 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 22:38:49.13 ID:pbvBV+5A0.net]
Windows10はutf8モードにできたような

423 名前:はちみつ餃子 mailto:sage [2018/03/03(土) 22:56:38.78 ID:uc6Z/AdW0.net]
文字コードを統一したところでロケールの切替えはどうせ必要なわけだし、
内部的な処理が UNICODE に統一されたので良しとするしかなかろ。

424 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 23:43:29.67 ID:q1dNIabI0.net]
utf8に統一したら、ロケールの切替って表示する文字列の言語を決める位の意味しか無いのではないかな
異なる言語の文字列でもそのまま字化けせずに表示出来た方が都合が良いように思うけど

425 名前:はちみつ餃子 mailto:sage [2018/03/04(日) 00:38:00.37 ID:R9gQD4Ga0.net]
Windows はもう 20 年以上前から Unicode 化はやってるんだってば。
UNICODE 版の API を正しく使う限り文字化けしない。
フォントの設定とかで化けることはあるかもしれんけど、
それも今はフォントリンクとかでおおよそ上手いこと処理してまうしな。

UNICODE 化できていない今までに作られたカスなアプリが消し去れないし、
カスなアプリのために ANSI 版の API (の挙動を制御するためのコードページの切替えの仕組み)
は残しておかなきゃならないけど、
Unicode への統一そのものは出来てるから満足するしかない。
っていう話ね。

426 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 00:59:55.95 ID:LharAyAs0.net]
だったらVisualStudioで作ったソースファイルのデフォルトがShiftJIS固定なのをそろそろなんとかしてくれよ

427 名前:はちみつ餃子 mailto:sage [2018/03/04(日) 01:01:33.87 ID:R9gQD4Ga0.net]
せやな。

428 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 01:07:55.85 ID:BtVPmkEs0.net]
LinuxとかのシステムコールもUnicode化されたら考えるわアデューノシ

429 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 01:14:01.78 ID:fY1aJvVU0.net]
>>410
2017で治ったんじゃなかったか

430 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 01:15:23.20 ID:BtVPmkEs0.net]
だいたいwchar_tとかcharの倍容量を食うじゃん?
2が3になるとかならまだしも1が2になるというのは精神的にインパクトがデカイ
L"Hello World!"のバイナリをダンプしてみたらトラウマを抱え込むレヴェル
というのもあるし他環境とのソースコード共通化も視野に入れる場合やっぱマルチバイトしか…



431 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 01:35:20.32 ID:pARrwnK20.net]
WindowsのUNICODE版APIはUTF-8と相性が悪いからクソ

432 名前:はちみつ餃子 mailto:sage [2018/03/04(日) 01:39:19.42 ID:R9gQD4Ga0.net]
せやろか?
内部表現として使う文には UTF-16 って良いと思うけどな。
UTF-8 との間なら変換コストも大したことないし。

433 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 02:20:02.75 ID:8pLLmBBd0.net]
>>416
iOS / macOS / Windows / Java と多くのプラットフォームの
API で文字列としてUTF-16 が使われてるから割と使うけど、

近年多用される絵文字とかが全然1文字1符号にならんので
ロジックを基準する上ではUTF-8より便利ってわけでもない。
文字列の処理を描くときは合字以外は1文字1符号になるUCS4 の方が良い。

434 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 02:23:18.11 ID:FSOQNU6I0.net]
なぜ世界中の頭脳を集結させても完璧な文字コードは作れないのか

435 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 02:28:31.88 ID:BtVPmkEs0.net]
x86アーキテクチャーがRISC-Vに置き換わったら考えるわノシ

436 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 02:42:05.74 ID:BtVPmkEs0.net]
ていうかコルモゴロフ複雑性が計算可能関数だったら考えるわノシ

437 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 02:53:03.62 ID:QKjmCs/V0.net]
韓国がUNICODEにすごい文字数予約済みにしてあるとか聞いたことある

438 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 03:02:28.08 ID:ymM0nha90.net]
あの言語動的に文字生成でもしないと無駄多杉だろ

439 名前:はちみつ餃子 mailto:sage [2018/03/04(日) 03:02:39.39 ID:R9gQD4Ga0.net]
>>417
どうせイテレータでアクセスするから、合字はどうしようもないにしても
先頭からコードポイント単位で読む分にはどの符号化を使っててもあんまり変わらん気がするが。

440 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 03:56:38.94 ID:8pLLmBBd0.net]
>>423
UTF-16 だとサロゲートペアが出てくるからマルチバイトがマルチワードになるだけ
ucs4 だとそれが要らなくて符合とコードポイントが1:1対応になるんだよ。

何年か前まではサロゲートペア?なにそれおいしいの?でも済んでたけど
今の時代それは無理だし



441 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 04:09:09.92 ID:8pLLmBBd0.net]
要は
utf-8、utf-16 → 1符合 ≠ 1コードポイント ≠ 1文字
ucs4 → 1符合 = 1コードポイント ≠ 1文字
だから完全自作の文字列処理ではucs4が楽だよという意見でした
テキストなんてたいしてメモリ食わないしね
おしまい

442 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 04:09:59.70 ID:FSOQNU6I0.net]
charset_cast<utf_8>()みたいなの欲しい

443 名前:はちみつ餃子 mailto:sage [2018/03/04(日) 08:42:48.43 ID:R9gQD4Ga0.net]
おっと、 u16string のイテレータはサロゲートペアは解決してくれないのか。
まあそれも小さなラッパを作ればどうとでもなる。

444 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 09:34:29.91 ID:LharAyAs0.net]
UTF16でサロゲートでガチャガチャやるくらいならUTF8でちゃんとやった方が実り多いし
そんなんやりたくないならUTF32使えばいいし
中途半端だよねUTF16

445 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 09:38:06.05 ID:ZPPAxORI0.net]
ワイドのようで実はマルチ

446 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 10:55:23.96 ID:kJ02m0gha.net]
どこかでみたけど歴史的にはutf32やutf16よりutf8が新しいんだろ?

447 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 12:59:59.04 ID:hIgSiiXH0.net]
オリジナルのXEROXのコードへの先祖返りではないかな?

448 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 14:09:11.62 ID:GeBypOU0F.net]
visualstudio2017でBoost.Testを試したいのですがうまく行きません。

Nugetでboost-vc141をインストールしてテストプロジェクトをWindowsコンソールアプリケーションとして
追加し、Helloworld的なテストプログラムを書きました。
ビルドは通るのですが、テストエクスプローラーにテストが認識されません。

#include "stdafx.h"
#define BOOST_TEST_MODULE MyTest
#include <boost/test/included/unit_test.hpp>
BOOST_AUTO_TEST_CASE(my_boost_test) {
const int x = 1;
BOOST_CHECK(x == 1);
BOOST_CHECK(x != 1);
}

VisualStudio2017のバージョンは15.5.7で
「Boost.Testのテスト アダプター」はデフォルトでインストールされるようになっていたので
インストールされています。

449 名前:デフォルトの名無しさん [2018/03/06(火) 00:41:37.37 ID:MSLc23us0.net]
標準ライブラリを前方宣言にすることに意味ってありますか?

450 名前:デフォルトの名無しさん [2018/03/06(火) 00:45:13.63 ID:jqoml9jL0.net]
メイヤーズは普通にインクルードしろって言ってた



451 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 01:45:01.96 ID:RorZBCxf0.net]
>>434
それどこに書いてあるの?

452 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 06:16:57.53 ID:HL6NWtm0a.net]
newした配列がいつの間にか解放されてて、
プログラムの最後でdeleteすると必ずアクセスエラーで落ちるんですが、
newは勝手に解放されることあるんですか?

453 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 07:19:59.92 ID:18YefqDd0.net]
>>436 どっかで未定義動作に堕ちてるならそんな結果になることもあるだろね。

454 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 07:39:27.47 ID:YXZKPZh60.net]
・どっかでメモリの取り扱い間違えてnewの管理情報を踏んづけて壊してる
・unique_ptrやshared_ptr、その他スマートポインタ的なものに理解せずに渡してる
多分このどっちか

455 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 07:56:08.66 ID:4Jw7uGdF0.net]
ポインタがnewで帰ってきたアドレスと違う可能性

456 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 11:04:41.26 ID:PuW1uuBL0.net]
>>436
「解放されてて」というのは、どうやって確認した?
たとえば要素のデストラクタが実行されているとか、
別件で確保するメモリに再使用されているとか、
そういうことが起きているのか?

457 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 13:48:19.62 ID:xvhpcg6j0.net]
>>436
constructor
destructor
copy constructor
operator=()
のいずれかに誤りがあるのでは?
概念コードを書いてみなさい

458 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 13:50:16.42 ID:xvhpcg6j0.net]
>>436
operator new()
operator delete()
を捕捉するのもいいかもね、根本的に見直す時期だと思う

459 名前:デフォルトの名無しさん [2018/03/06(火) 15:12:07.82 ID:p6GeX8860.net]
ファイル分割をしてみたく、プログラムをヘッダファイルとcppファイルに分割しようと挑戦したのですがよくわからないエラーが出まくります・・
プログラム超初心者なので凄い初歩的な部分を間違えているかもしれません・・・

エラーですが、ヘッダファイルの方で
'vector':'std'のメンバーではありません
'vector':定義されていない識別子です
'

460 名前:string':定義されていない識別子です
'cv': 識別子がクラス名でも名前空間名でもありません。
'Mat':定義されていない識別子です
'ofstream':'std'のメンバーではありません
'ofstream':定義されていない識別子です

みたいなエラーが出ます。
ヘッダファイルは、二重インクルードガードと関数のプロトタイプ宣言しかしていないのですが
上のようにそ、のプロトタイプ宣言の型とかに対してのエラーが出まくります


何かヘッダファイルに付けたほうがいいのでしょうか?
分かる方がいたら、教えていただけますでしょうか。

ちなみに、visual studio で作業していて、プロジェクトはコンソールアプリケーションで作っています。
もしかして、自分でmakefileとかを作る必要があるのでしょうか?
[]
[ここ壊れてます]



461 名前:片山博文MZ mailto:sage [2018/03/06(火) 15:14:49.26 ID:W0MQjqG0d.net]
ヘッダーの方で
#include <vector>
などが足りないのでは。
ヘッダーは、自己完結にした方がいいらしい。

462 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 15:40:05.75 ID:p6GeX8860.net]
よく見たら、自分の参考にしていたページでヘッダファイルのincludeは最小限に抑えると書いていました…
てっきり、ヘッダファイルではincludeはしないものなのかと…

最小限というのは、エラーが回避できるstdio.hとかの最小限のファイルだけヘッダでincludeして、他のmath.hなどはcppファイルでincludeすればいい感じですか?

463 名前:片山博文MZ mailto:sage [2018/03/06(火) 15:50:38.20 ID:W0MQjqG0d.net]
最小限というのは、コンパイル時間、ビルド時間を短縮するためだから、小さなプログラムでは気にする必要はない。
cppとhppで#includeを分けるというのはよくあることだ。

464 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 16:05:55.81 ID:p6GeX8860.net]
ありがとうございます!

465 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 16:16:08.19 ID:r6wtBatS0.net]
>>443 の書きぶりからして
自作のヘッダファイルに std::vector を使った関数のプロトタイプがある、
しかしヘッダファイルの先頭では <vector> を#includeしてない、て感じね。
これは >>444 と同じ話。

あと >>445 で <stdio.h> と書いてるところを見ると
参考にしてるページは少々古い情報かも。
「あえて<cstdio>でなく<stdio.h>をインクルードする」ことについて
何か理由があるのかも知れないけど。

466 名前:デフォルトの名無しさん [2018/03/06(火) 17:54:41.92 .net]
Cソースのincludeの位置にヘッダファイルの中身を貼り付けたときにコンパイルできなきゃだめ
たぶんCソースの中で他のincludeよりも前に新しいヘッダファイルのincludeを書いてるんだろう

467 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 18:15:37.24 ID:p6GeX8860.net]
>>448
なるほど、cstdioの方が良いんですね
なんか二種類あるけど、どっちなんだろーと思ってたので、勉強なります
次からそちらを使います

468 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 22:17:21.07 ID:i8Fah5dFa.net]
>>438
前者っぽいでした

469 名前:デフォルトの名無しさん [2018/03/06(火) 23:34:50.60 ID:pZOZvbRza.net]
C++のリファレンスとかで[first,last)というふうに左右で括弧が違う表記があるんだけど、これはIteratorに関しての表記ですか?

470 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 23:42:46.07 ID:xvhpcg6j0.net]
>>452
数学方面の書き方を源流にしていると思います
[x, y) は x は含み、y は含めない半開区間を示しますが、それを類推したものでしょう



471 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 23:43:09.96 ID:ey0B6I8l0.net]
>>452
範囲の数学的な書き方、半開区間とかなんとか
それだとfirst以上last未満の範囲、ということ

472 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 23:47:04.41 ID:MSLc23us0.net]
https://ttsuki.github.io/styleguide/cppguide.ja.html#Forward_Declarations
前方宣言ってしたほうがいいのか、しないほうがいいのかどっちなんですかね

473 名前:デフォルトの名無しさん [2018/03/06(火) 23:50:38.84 ID:pZOZvbRza.net]
>>453,454 数学でしたか!勉強になります。

474 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 00:29:35.52 ID:+JS1hm360.net]
mutex g_Mtx;

int g_Val = 0;

int Func( int A, int B )
{
  int Val = A * B;

  lock_guard<mutex> Lock( g_Mtx );

  return g_Val = Val;
}

void ThreadFunc0()
{
  int Val = Func( 2, 3 );

  // Valを参照する処理
}

void ThreadFunc1()
{
  lock_guard<mutex> Lock( g_Mtx );

  // g_Valを参照する処理
}

上記のようなスレッド関数が非同期に実行されるとき、
Func()はスレッドセーフ(g_Val書き換え中に参照されない)でしょうか?

(1)lock_guard<mutex>によるミューテックスロック
(2)g_Valの書き換え
(3)戻り値を呼び出し元スレッドにコピー(あるいはムーブ)
(4)lock_guard<mutex>がスコープから外れアンロック

というシーケンスを期待しています。

475 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 00:29:47.60 ID:6+ILModc0.net]
endならともかくlastは区間内の最後の要素なんじゃ…

476 名前:デフォルトの名無しさん [2018/03/07(水) 10:09:55.97 ID:ukyKg6LAa.net]
基本的な質問なのですが、以下のプログラムがエラーになるのはなぜでしょうか?


char* pc = "abc";
pc[0] = 'z';
cout << pc << endl;

以下のプログラムでは意図通りに動きます。

char ac[] = { 'a', 'b', 'c', '\0' };
cout << ac << endl;
ac[0] = 'z';
cout << ac << endl;

477 名前:はちみつ餃子 mailto:sage [2018/03/07(水) 10:14:51.80 ID:TWOfgg7C0.net]
>>459
上は変数 pc はリテラル文字列の先頭を指すポインタ。
下の変数 ac は配列で、それを文字列 "abc" で初期化するって意味。

リテラルの破壊は未定義。
破壊しないことをあてにして破壊不可能なセクション (メモリ領域) に配置されたりすることもあるので、アクセスエラーが生じる。
あくまで未定義だから出来ちゃうこともあるし、コンパイラオプションで制御できたりもするけど、基本的にはあかんやつ。

478 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 10:30:06.22 ID:ylRgY7un0.net]
>>458
仮引数名をendにすると関数名のendと紛らわしいからだよ
説明の文中にendが出てくる度毎にいちいち仮引数か関数か断るハメになる

479 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 10:35:31.71 ID:ukyKg6LAa.net]
>>460

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

Pythonでimmutableとかいうのがありますが、それでしょうか?

480 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 11:10:02.03 ID:ukyKg6LAa.net]
すみません、また、ベーシックな質問です。

char* pc1 = 1; → エラー
char* pc2 = NULL; → OK
char* pc3 = 0; → OK

なぜ、2番目と3番目はOKなのでしょうか?

char* pc1 = 1;

がエラーになるのは、 int 型の値で char* 型の変数を初期化できないからだとすれば、

char* pc3 = 0;

もエラーになると考えることもできると思います。



481 名前:はちみつ餃子 mailto:sage [2018/03/07(水) 11:10:26.68 ID:TWOfgg7C0.net]
>>462
Python なんか知らんがな。
Python の immutable は Python の immutable であって、それが C++ の何物かであったりはしないよ。
C++ のリテラルを破壊した結果は未定義というのは C++ のリテラルを破壊した結果は未定義という規則であるだけ。
似て感じられたとしても一対一に対応付くような単純なものではないので、
背景にあるメカニズムを理解せずに翻訳して理解しようとするような方法はお勧めできない。

482 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 11:14:31.86 ID:ukyKg6LAa.net]
>>464

なるほど、そういう規則だからリテラルを破壊しようとするとコンパイルエラーにするわけですね。

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

483 名前:はちみつ餃子 mailto:sage [2018/03/07(水) 11:22:08.82 ID:TWOfgg7C0.net]
>>465
書き忘れてたけど、 C++ の文字列リテラルの型は const char[] なので、
const 付きでないポインタに渡すと単純に型が合わなくてエラーになるはず。
C だと型に const が付いてないのに破壊するのは未定義ってことになっててあまりにもクソだったから改められた。

484 名前:はちみつ餃子 mailto:sage [2018/03/07(水) 11:32:07.41 ID:TWOfgg7C0.net]
>>463
0 はポインタに型変換可能で、型変換した結果が空ポインタと等しいことが保証されてる特別な存在。
(ビットパターンが等しいとは限らないことには注意が必要。)

互換であることが保証されているので、処理系によっては
#define NULL 0
として定義していることもある。

余談だが、これはオーバーロードされた関数でうっかりしやすいので気を付けた方がいい。
たとえば関数 foo が以下のような型でオーバーロードされている場合、

void foo(int);
void foo(int*);

これを

foo(NULL)

と呼び出すと void foo(int) が呼び出されたりする。
今ではヌルポインタを表すキーワード nullptr が用意されたので、
NULL はあまり使わない方が良い。

485 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 12:03:25.28 ID:ukyKg6LAa.net]
>>466-467

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

>>466

Visual Stuidoを使っていますが、以下でエラーは発生しませんでした。

char* pc = "abc";
cout << pc << endl;

486 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 12:29:38.25 ID:ylRgY7un0.net]
>>468
それはISO/IEC14882:1998の4.2で許されていたことに由来する
その後ISO/IEC14882:2011のC.1.1で廃止されたが
古いソースを通すために故意に違反状態のままにしている

487 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 16:15:14.65 ID:nnB4Kxzea.net]
c++の規約に違反にしないためには一度変数に代入する必要があるという事?

488 名前:はちみつ餃子 mailto:sage [2018/03/07(水) 16:24:01.54 ID:TWOfgg7C0.net]
オプションで指定できるんじゃね?
俺は GCC を使ってるから知らんけど。

489 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 16:29:51.37 ID:ylRgY7un0.net]
違う

char const* cc;
cc = "abc"; //完全に合法

char* pc;
pc = cc; //不適格
pc = "abc"; //CとC++98では非推奨、C++11以後では不適格

pc = &"abc"[0]; //左辺値変形でこう解釈されていて
非constへのポインタに、constへのポインタを代入することになり、
暗黙のconst外しにあたるので、C++11が正論

pc = const_cast<char*>("abc"); //C++11以後ではこう書く

490 名前:デフォルトの名無しさん [2018/03/07(水) 17:54:06.02 .net]
>>472
それもだめじゃね?
const領域に非constでアクセスするなんて罪深いことなんだから、ちゃんと別領域にコピーしてから扱わないと。



491 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 18:18:25.20 ID:TnxtYBSc0.net]
>>459
>char* pc = "abc";
文字列リテラルは不変だから、const を付けないといけない

古いライブラリで、const を付けていないものを動作させるために(互換性)、
例外的に使う場合だけに許される

>>463
>char* pc3 = 0; → OK
この0 は、数値型の0じゃない。
予約語を増やすのが嫌だから、= 0 と書いたら、特別な意味に解釈する。
分かりにくい、クソ仕様

virtual func( ) = 0;
これも、そう。
純粋仮想関数という特別な意味を表す

492 名前:はちみつ餃子 mailto:sage [2018/03/07(水) 18:49:53.33 ID:TWOfgg7C0.net]
>>473
書き込まなければ問題は無い。
が、 const 外しが必要な状態ってのが良くないことは確か。

493 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 20:52:49.95 ID:ylRgY7un0.net]
>>474
いいや数値型の0だ
翻訳時に0と確定できる汎整数型の定数に限り
ポインタに暗黙変換できるという特例になっている
純粋仮想関数と関連付ける条項はない

494 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 22:07:54.67 ID:eXkgxxlqd.net]
純粋仮想関数と関連付けてはいないだろう
それはともかくとして

char * p = 7-7; // no error

class T {
virtual void f() = 7-7; // error
};

となる気がするので言ってることは合ってるか

495 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 22:10:57.06 ID:NKcGF/Sn0.net]
C言語でNULLが0をdefineしたものだったというだけだろ

496 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 22:12:59.22 ID:eXkgxxlqd.net]
C言語では ((void*)0) だった気がする

497 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 22:34:03.79 ID:ylRgY7un0.net]
>>477
7-7は定数式なので0と完全に等価
純粋仮想関数の = 0 はA.8のpure-specifierで=0という特定のスペルと規定されているので7-7がエラーになるのは当然

498 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 22:41:42.97 ID:eXkgxxlqd.net]
いや疑問も呈していないし否定しているわけでもないのに当然と言われてもな…

499 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 22:52:11.20 ID:ylRgY7un0.net]
じゃあ何のために、7-7とか言い出したんだ?

500 名前:はちみつ餃子 mailto:sage [2018/03/07(水) 23:02:40.75 ID:TWOfgg7C0.net]
>>479
それはあかん。
ひょっとしたら古い処理系でやってるのはあるかもしれんが、
規格違反のはず。



501 名前:はちみつ餃子 mailto:sage [2018/03/07(水) 23:12:03.15 ID:TWOfgg7C0.net]
>>483
と、思って調べてたんだけど、 C++ だと確実にあかんようだけど C だとアリなのかもしれない。

502 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 23:58:27.20 ID:/Jrz1mw60.net]
offsetof()がどう実装されているかやね

503 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 02:18:11.16 ID:BQ11IIJi0.net]
>>476-477
C++14 からリテラルだけに限定されてるよ。
d.hatena.ne.jp/yohhoy/20140305/p1

504 名前:はちみつ餃子 mailto:sage [2018/03/08(木) 03:31:21.90 ID:+04GXVK30.net]
おっ、こんな基本的なことで変更が入ってたのか。
でも当然といえば当然の処置よな。

505 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 06:41:46.04 ID:DSeYC6Qd0.net]
Cの無意味な汚いゴミが掃除されるのは良いことだ

506 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 07:33:41.79 ID:dmEui5aT0.net]
>>484
しっかりして
流石にこの件では C と C++ 混同されたら対話が成り立たないよ

507 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 18:35:02.35 ID:uuOHCrug0.net]
C++の勉強+機械学習も勉強しようとVisual Studio 2017でtiny-dnnを用いたいのですが、tiny-dnn内でコンパイルエラーが発生します。
具体的にはxcontainer.hpp内でC3203というエラーが頻発したり、feedfoward_layer.hppではC2760というエラーが発生したりしています。

環境はWindows 7でVisual Studio 2017 communityです。
プロジェクトはwindowsデスクトップアプリケーションを用いています。
tiny-dnnのインクルードはプロパティのインクルードディレクトリに追加しています。

どなたか心当たりのある方がいらっしゃれば教えていただけると嬉しいです。

508 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 19:27:19.96 ID:i2S5Knpdd.net]
linux windows両対応のコードを考えている最中の質問です
unsigned int型の変数xの32bitに、char型の配列y[4]の8bit×4を当て込みたいです
y[0]から順にxの先頭ビットに入れたいのだけど
そういう時はどのようなコードになるのでしょうか
符号の問題で単純に24bitシフト+16bitシフト...みたいなことをすると期待の値にならないときが存在してます

509 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 19:50:56.79 ID:2k5PL6f/a.net]
unionでどう?

510 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 20:26:39.82 ID:FhiFltVyd.net]
>>491
シフトする前にunsigned charにキャストする



511 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 20:29:17.36 ID:FhiFltVyd.net]
参考
https://stackoverflow.com/questions/2437283/c-c-packing-signed-char-into-int

512 名前:はちみつ餃子 mailto:sage [2018/03/08(木) 22:47:08.29 ID:+04GXVK30.net]
>>489
スマソ

513 名前:デフォルトの名無しさん mailto:sage [2018/03/09(金) 11:50:12.37 ID:XHk1xHdH0.net]
ヘッダーファイルの関数定義から関数ポインタをtypedefする事は可能ですか?
C++98辺りのコンパイラです。

514 名前:はちみつ餃子 mailto:sage [2018/03/09(金) 12:25:38.00 ID:nl8HCt1x0.net]
>>496
昔の C++ には decltype が無いもんな。
出来ないと思うよ。

515 名前:デフォルトの名無しさん mailto:sage [2018/03/09(金) 12:57:58.47 ID:zqzgOSq4d.net]
テンプレート使えないかな?

516 名前:デフォルトの名無しさん mailto:sage [2018/03/09(金) 13:06:17.52 ID:XHk1xHdH0.net]
出来ませんか。ありがとう。
再定義が面倒だったので楽したいだけだったんですけどね。

517 名前:はちみつ餃子 mailto:sage [2018/03/09(金) 13:35:32.12 ID:nl8HCt1x0.net]
>>498
その手があったか。
でも C++98 で自動で推論させようとするとヘルパー関数を使う必要があるじゃろ。
意味のないオブジェクト生成 (最適化で消えるかもしれんけど) がださい感じはするよね。

518 名前:デフォルトの名無しさん mailto:sage [2018/03/09(金) 19:06:34.98 ID:CekgNpjOM.net]
>>496
たくさんあるなら

> ヘッダーファイルの関数定義から関数ポインタをtypedefする

コードを生成するツールを作るとか

519 名前:デフォルトの名無しさん [2018/03/09(金) 22:17:46.30 .net]
>>496
マクロ駆使すれば

TYPEDEF_FUNC_DE

520 名前:CL(なんちゃら);
FUNC_DEF(かんちゃら)
{
return;
}

みたいな書き方できないのかな?

なんちゃらは識別名と戻り値と引数
かんちゃらは識別名を指定するイメージ
[]
[ここ壊れてます]



521 名前:デフォルトの名無しさん [2018/03/09(金) 23:46:50.00 ID:yn7GHiyb0.net]
>>491
unsigned int x;
char y[4];

.
.
.

memcpy(&x, y, 4);

522 名前:デフォルトの名無しさん mailto:sage [2018/03/09(金) 23:57:54.33 ID:5+PoAx/E0.net]
>>491
xの先頭ビットとはMSBなのかLSBなのか

523 名前:デフォルトの名無しさん mailto:sage [2018/03/10(土) 00:45:01.61 ID:8ENKFfsbd.net]
メモリ上でのレイアウトとかもあるのでuint8_t経由でのシフトがいい
クロックが(メモリアクセスが問題にならない程)低くてシフトが遅いマイクロプロセッサは別

524 名前:デフォルトの名無しさん [2018/03/10(土) 04:49:25.72 .net]
>>503
x = ntohl(x);
も忘れずに

525 名前:デフォルトの名無しさん mailto:sage [2018/03/10(土) 06:32:30.15 ID:Tg3hDFxK0.net]
>>491
先頭ビットって32ビット目のことか?

526 名前:デフォルトの名無しさん [2018/03/10(土) 17:21:32.19 ID:a2p+alti0.net]
>>506
それが必要になるかどうかは場合による。

527 名前: mailto:sage [2018/03/10(土) 17:42:35.32 ID:+Ww908Qw0.net]
ネットワークバイトオーダーがここで関係あるのだろうか?

528 名前:デフォルトの名無しさん [2018/03/10(土) 19:22:25.29 .net]
>unsigned int型の変数xの32bitに、char型の配列y[4]の8bit×4を当て込みたいです
>y[0]から順に

っていう要件だから、ホストバイトオーダーがビッグエンディアンかリトルエンディアンか分からない以上は常にntohlを付けるべき

529 名前:デフォルトの名無しさん [2018/03/10(土) 19:24:15.74 .net]
char y[4] = { 0x12, 0x34, 0x56, 0x78 };
unsignd in x = 0x12345678;
これを等価にしたいという意味だろうから。

530 名前:デフォルトの名無しさん mailto:sage [2018/03/10(土) 21:52:35.38 ID:My21AM/A0.net]
独習c++終わりそうなんだが次によむべき本とかある?



531 名前: mailto:sage [2018/03/10(土) 22:03:20.54 ID:+Ww908Qw0.net]
>>512
https://mevius.5ch.net/test/read.cgi/tech/1493844476/312
あと STL の教科書、これもC++11以前のもの
https://www.amazon.co.jp/dp/4881357786/

532 名前:デフォルトの名無しさん mailto:sage [2018/03/10(土) 22:09:22.02 ID:Tk41qGXE0.net]
本ばかり読まず実践しよう

533 名前:デフォルトの名無しさん mailto:sage [2018/03/10(土) 22:09:43.95 ID:lWictyCS0.net]
>>512
cpprefjp

534 名前:デフォルトの名無しさん mailto:sage [2018/03/10(土) 22:28:49.18 ID:tBgkA+tH0.net]
プログラミング言語C++とかどうやろ

535 名前:デフォルトの名無しさん mailto:sage [2018/03/10(土) 22:50:35.99 ID:My21AM/A0.net]
ありがとうございます
ひとまず>>513の本にしてみます

536 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 00:41:56.08 ID:6KlfnVLZ0.net]
そういえば最新版のEffective STLみたいな本って無いのか?

537 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 00:53:03.16 ID:Bd/2u4u/0.net]
あると思うが訳者がへたくそで右辺値左辺値あたり意味ワカランかったぞ

538 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 00:57:27.74 ID:Bd/2u4u/0.net]
その辺りの参考にするなら下手な日本語文献探るよりか英文そのまま読んだ方がいい希ガス
なんでもかんでも日本語訳してあるとほんと意味ワカランから

539 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 01:11:03.65 ID:n48SUKtd0.net]
cpprefjpのstd::min_elementとstd::max_elementの例文が間違ってるので誰か直してください。
自分はGitHubのアカウント持ってないので編集できません。

https://cpprefjp.github.io/reference/algorithm/min_element.html
https://cpprefjp.github.io/reference/algorithm/max_element.html

誤:return a > b;
正:return a < b;

540 名前:デフォルトの名無しさん [2018/03/11(日) 01:22:57.30 ID:ry5KQfC80.net]
unsigned int x;
char y[4];

.
.
.

x = ((y[0] & 0xff) << 24) | ((y[1] & 0xff) << 16) | ((y[2] & 0xff) << 8) | (y[3] & 0xff);



541 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 01:34:50.04 ID:P1lOCLpn0.net]
Scott Meyers

Effective C++ 第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTI)、2014
Effective Modern C++ ―C++11/14プログラムを進化させる

542 名前:42項目、2015

Effective C++ は、昔の本のリバイバルかな?
内容が新しいかどうかまでは、分からないけど
[]
[ここ壊れてます]

543 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 08:34:37.66 ID:XWEx9Mlwd.net]
テンプレートを使ったメタプログラムの有用性が分からん。コンパイル時処理で定数の階乗を計算してるけど実行時に値を変えれないなら、答えをベタ書きすればいいだけでは?

544 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 08:43:14.65 ID:zMqNV6vza.net]
その値をベタ書きする手間をコンパイラにまかせることが出来るのが利点だと思うよ。

545 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 08:48:18.87 ID:XWEx9Mlwd.net]
3の階乗を、tmpするより6とタイプした方が早いだろ

546 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 09:03:15.99 ID:6KlfnVLZ0.net]
>>526
3ならいいけど10の階乗は?15の階乗は?21の階乗は?
それは整数型で表現できるか?
それは何桁になるのか?
適切な型をどうやって選ぶのか?
その値を静的な配列のサイズにしたいが数値を変えるたびに電卓で計算はしたくない
ならばfactorial<N>::valueと表現できれば便利ではないか
ということ

547 名前:デフォルトの名無しさん [2018/03/11(日) 09:03:17.33 ID:0BygLdlM0.net]
その3という数値が別のファイルの特定の値に依存してる場合もあるし

548 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 09:08:13.99 ID:6KlfnVLZ0.net]
意地悪するのはこの辺にしておいて
それはメタプログラミングでこいういうこともできるよ程度のものにすぎない
テンプレートメタプログラミングとはテンプレートを使ってソースコードを生成することだ
ソースコードを作るためのプログラミングだと思ってくれてかまわない
一般的な目的としてはジェネリックプログラミングを実現するために使われる
標準ライブラリではvectorからchoronoやtupleまでテンプレートメタプログラミングありきの設計になっている

549 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 09:08:56.54 ID:zMqNV6vza.net]
値が小さいうちはそうかもしれんが16の階乗とか値が大きくなってもベタ書きが良い?

ちなみにconstexprが使えるc++11以降の話と考えてOK?

550 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 10:19:34.71 ID:i1Cv6XBY0.net]
階乗の例はいい例とは言えんな
TMPで操作したいのはメインは型の方だからな
値も出来るよって例が階乗なだけで



551 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 10:40:47.13 ID:z1FVyjSJ0.net]
>>529
> ソースコードを作るためのプログラミングだと思ってくれてかまわない
そこまでやるならPL/Iみたいに%FOR %SELECTみたいな普通の制御構文で書ける方がいいわ

552 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 10:50:57.85 ID:zMqNV6vza.net]
そんな貴方にtemplate+constexpr(c++14以降)

553 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 10:58:38.38 ID:6KlfnVLZ0.net]
>>532
頑張って古代人用のコンパイラ作ってくれ

554 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 11:03:02.47 ID:z1FVyjSJ0.net]
>>534
お前アホだろ w
方向性がおかしいって話だぞ

555 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 11:13:25.26 ID:6KlfnVLZ0.net]
>>535
現代の言語でジェネリクスをサポートするのは一般的
テンプレートをこねくり回して整数演算をするのはおかしいという意味なら、普通の構文で書けるconstexprが追加されたからそっちを使うように

556 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 11:58:27.43 ID:TvwI/h8S0.net]
テンプレートで再帰ができたらナア…('A`)

557 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 12:00:06.04 ID:TvwI/h8S0.net]
とわいいつつ、実はC++のテンプレートはチューリング完全になってしまっていた(らしい
ttps://cpplover.blogspot.jp/2013/10/blog-post_20.html

558 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 12:05:49.26 ID:93lmuZEGM.net]
>>536
costexprで階乗書いてみてから言えよ

559 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 16:36:05.55 ID:i1Cv6XBY0.net]
constexpr unsigned long long factorial(int n){
 unsigned long long r=1;
 for(int i=1;i<=n;++i){r*=i;}
 return r;
}

うん、簡単だね!

560 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 16:41:07.00 ID:Bd/2u4u/0.net]
毎回毎回コンパイラが計算するのか



561 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 17:05:53.05 ID:6zDmjp+70.net]
たまにソースコードを見て、あ、この数字なんだっけって考えるよりも
10000回コンパイルさせるほうが早いと思うよ

562 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 17:18:40.81 ID:Dtt3qpb50.net]
マジックナンバーの本質

563 名前:片山博文MZ mailto:sage [2018/03/11(日) 17:51:32.86 ID:4ez4tjCrd.net]
>>540
オーバーフローのチェックがないからやり直し。

564 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 18:36:06.03 ID:i1Cv6XBY0.net]
はーい

constexpr unsigned long long unsafe_factorial(int n){
 unsigned long long r=1;
 for(int i=1;i<=n;++i){r*=i;}
 return r;
}

constexpr int min_factorialable(){
 for(int i=1;;++i){
  if(unsafe_factorial(i) > unsafe_factorial(i+1)){ return i; }
 }
}

constexpr unsigned long long factorial(int n){
 if (n < 0 || n > min_factorialable()) { return 0; }
 return unsafe_factorial(n);
}

565 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 18:40:21.07 ID:i3q5YI3y0.net]
コンパイルエラーになるほうがいいなぁ

566 名前:片山博文MZ mailto:sage [2018/03/11(日) 19:45:19.23 ID:4ez4tjCrd.net]
static_assert使え。

567 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 20:16:22.23 ID:XWEx9Mlwd.net]
>>529
実行時計算で答え算出してそれを貼った方が楽じゃね?

568 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 21:15:39.44 ID:ezoYy+fr0.net]
>>548
それで事足りるケースならそれでいいよ

569 名前:デフォルトの名無しさん [2018/03/11(日) 21:19:50.46 ID:0BygLdlM0.net]
>>548
なんでそんなめんどくさくてミスしそうな方法をチョイスするんだよ

570 名前:デフォルトの名無しさん [2018/03/12(月) 01:21:50.18 .net]
>>548
計算&書き換え手順をマニュアル化して、何十種類の仕向け別にバージョンアップの度に人海戦術で計算&書き換え&コードレビュー&テストするんですね、わかります



571 名前:デフォルトの名無しさん mailto:sage [2018/03/12(月) 05:00:24.40 ID:kBVT8YZa0.net]
min_factorialable() は、階乗を正しく計算できる最大の値を返す
constexprな関数(コンパイル時にint定数に置き換えられることを期待)、
と読み取ったんだけど、なぜにmin_なの?

572 名前:デフォルトの名無しさん [2018/03/12(月) 05:41:37.75 .net]
上限を求めるときに使うのはminだから、かな

知らんけど

573 名前:デフォルトの名無しさん mailto:sage [2018/03/12(月) 06:20:08.42 ID:I9Is/5l40.net]
最初min_nonfactorialableでnon取った時に直し忘れました

574 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 09:59:46.06 ID:CGjn2uNbd.net]
一日の秒数を86400と書いてたらマジックナンバーやめろと言われたんだけど、
プログラムを少しでも書く人間にとってその数字は常識でいいよね?
60*60*24 と書いて「その60とか24は何だ?」と言われないでしょ?
それと同じレベルだと思ってるんだけど。

575 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 10:10:13.70 ID:oQx4WixC0.net]
うるう秒でクラッシュするクソソフトウェアの出来あがり
ニュートン力学と天文学と暦学からやりなおした方がいい

576 名前:デフォルトの名無しさん [2018/03/13(火) 10:13:40.69 ID:bAh/W6qqd.net]
>>555
言われないとわからない奴は言ってもわからないだろうから
お前は一生マジックナンバー使いまくりでいいぞ

577 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 10:38:37.74 ID:pKedwP800.net]
そろそろ標準に日付計算のライブラリ欲しいわ

578 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 11:02:13.56 ID:92t/zLSk0.net]
>>558
欲しいね
chronoが中途半端でイラつく

579 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 11:32:32.41 ID:CGjn2uNbd.net]
>>556
それだと 60*60*24 と書いても同じだよね。
うるう秒とかは関係ない定数管理してる場合の話ですよもちろん。

580 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 11:37:27.38 ID:CGjn2uNbd.net]
>>557
86400がプログラマの常識的にマジックナンバーなのかどうか、って話ですよ



581 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 11:45:44.57 ID:cL/fN0Uj0.net]
所で皆さんmakefileはどう編集してます
あまり触れていないようなので気になります

582 名前:デフォルトの名無しさん [2018/03/13(火) 11:45:51.13 ID:92t/zLSk0.net]
2147483647なら俺の常識だが

583 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 11:47:54.17 ID:Hyr8QuVd0.net]
>>562
趣味では汎用のmakefile作ってそれを使い回してる
仕事ではautotools

584 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 12:00:55.79 ID:qHQADaBY0.net]
他人と共有するコードならなるべく要素を分解して分かりやすく書いた方が好ましい
2の倍

585 名前:数も直接記述するのではなくシフト演算使った方が綺麗 []
[ここ壊れてます]

586 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 12:18:10.82 ID:23dHbGxb0.net]
くくるんじゃなくて…

クラス宣言

int main()
{....}

あとは c++ スレで

587 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 12:18:34.80 ID:23dHbGxb0.net]
誤爆しました

588 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 12:51:25.09 ID:YF2y/th/d.net]
常識なんて集団が変われば変わる
そのコードを見せる事を想定した集団の常識かどうかを考えろ

589 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 14:10:31.07 ID:cL/fN0Uj0.net]
2進数8進数10進数16進数のみではないということ
60進数や24進数の話でしょ時計を語るときは必須の常識

590 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 14:26:54.36 ID:cL/fN0Uj0.net]
これをn進数って言うんだよ



591 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 14:37:04.66 ID:CGjn2uNbd.net]
集団の常識ってことなら、'86400' をマジックナンバーと思ってる人間は少数派っぽいので、
文句はやんわりと無視する方向で行きますわ

592 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 14:53:30.50 ID:qHQADaBY0.net]
というかマジックナンバー言われるのって数字の意味とか集団の常識とかじゃなく書式の問題だよね
計算式の中に定数ポン置きしてる書き方してる奴がチームにいたらそりゃマズいよ、変数とか定数に置き換えろって俺も言う

593 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 14:59:18.81 ID:qHQADaBY0.net]
定数を定数に置き換えるってなんだよ
リテラルは定数なり変数なりにって感じで読み替えといて

594 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 15:34:48.40 ID:VrugGyEjd.net]
>>572
しかしこうはしないだろ?

const int int8_bits = 8;
uint16_t word = (hi << int8_bits) | lo;

こうもしない
const int sec_per_min = 60;
int sec = m * sec_per_min + s;

数値リテラルで書くのが許容される数値というものがある
sec = day * 86400 はどうかというのが>>561
個人的には知らない人でも暗算もせずに初見で合ってるかどうかわかるか、
を基本にすべきだと思う (小さな2の冪乗は除く。2の冪乗知らん奴はシネ)

595 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 15:51:51.20 ID:92t/zLSk0.net]
uint16_t word = (hi << CHAR_BIT) | lo;
これCHAR_BIT != 8な環境を意識するんなら、16って書いてあるのも問題だね

const int micro_per_sec = 1000000;
int us = sec * micro_per_sec;
こう書けって言われたら俺はお断りする

596 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 16:10:54.91 ID:lXm9DcKjM.net]
e = 2.71828;
p = 3.1415;

597 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 16:11:31.80 ID:VrugGyEjd.net]
>>575
bit_per_char や shortでもintでもなく int8、uint16_t と明記したのは所与の仕様のつもり。

最近のapiはよくナノ秒返してくるから1000000000 倍
1000.0*1000*1000と分かち書きしたくなる

598 名前:デフォルトの名無しさん [2018/03/13(火) 16:29:39.63 ID:cL/fN0Uj0.net]
時刻を自動的に合わせますというコマンドボタンを作って
押すだけで済むのに

599 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 16:33:12.95 ID:92t/zLSk0.net]
>>577
それを言うなら1'000'000'000だろjk

600 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 18:34:24.26 ID:5mSkIm9zd.net]
86400って書くと、ideで定義の参照も使えんし
86400で検索したときに
1日の秒数なのか、適当に決めたタイムアウトとかの秒数なのか、ただのIDなのか、連番で出てきただけの数値なのかとか、無意味な数列なのかまざってわからんくなるやろ



601 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 18:56:33.51 ID:U9FOV+VD0.net]
#define SEC_PER_DAY (60*60*24)

なんてやる人いないのかな

602 名前: mailto:sage [2018/03/13(火) 19:22: ]
[ここ壊れてます]

603 名前:14.64 ID:4gb3BCLn0.net mailto: >>581
#define は基本使わない、int const ABC = 12345; なら時々使う
[]
[ここ壊れてます]

604 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 19:52:43.56 ID:0AXLQ0hnd.net]
constexpr……

605 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 20:19:53.55 ID:My0TInc10.net]
さっさとこう書けるようにしてくれ
今の<chrono>クソすぎんよ

int sec_par_day = static_cast<int>(std::chrono::second{std::chrono::day{{1}});

606 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 20:25:30.79 ID:pKedwP800.net]
クソというか機能が圧倒的に足りてない

607 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 20:28:38.82 ID:/ChP+Vc3M.net]
86400とか1440でわかるけど
24*60*60とか24*60って書けばいいだけだと思う

608 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 20:30:42.63 ID:My0TInc10.net]
21世紀も5分の1が過ぎようかっていうこの時代に
何が悲しゅうてたかが時刻を扱うだけでtime_pointの他にtmやらtime_tやらをガチャガチャさせられにゃならんのだよまったく

609 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 22:01:42.63 ID:vZM1ymmwM.net]
>>586
お前が正解
他はバカ

610 名前:デフォルトの名無しさん [2018/03/13(火) 22:08:40.50 .net]
86400って何のために使うんだろう

うるう日とかうるう秒とか考慮しなきゃ気持ち悪くね?



611 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 22:17:29.51 ID:U9FOV+VD0.net]
予め考慮しようがない

612 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 22:22:44.39 ID:pKedwP800.net]
考慮する必要性があるものかどうかが分からないからなんとも
例えば時系列データをその時点から1日分の数を使うというものなら閏秒を考える必要がないし

613 名前:デフォルトの名無しさん [2018/03/13(火) 22:28:43.21 .net]
>>591
1日に1秒満たないかもしれないだろ

614 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 22:35:46.84 ID:2iGA+O2n0.net]
int t = 86400; // 24*60*60
これで解決

615 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 23:06:58.39 ID:+Yto8Znfd.net]
閏秒の有無等で可変のものなら可変のものなりの書き方するでしょ
計算して変数に入れるとか

問題は不変の数値定数をどう正規化して書くか、正規化する必要はあるか。
24*60*60 派の人と 60*60*24 派の人が両方プロジェクト内にいたらなんか嫌だな

616 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 23:12:45.19 ID:U9FOV+VD0.net]
プロジェクトで誰かが決めたらそれに従うよ
派閥作るほどの問題じゃないでしょ

617 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 23:17:41.96 ID:+Yto8Znfd.net]
絡むわけじゃないけど
決めたら従うのは当たり前で、それが「決める」ってことだろ。
派閥の話じゃなく混ざってたら気持ち悪いってことが言いたかったんだよ。

618 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 23:20:55.63 ID:pKedwP800.net]
あっちこっちに書き散らすものじゃないから混ざってるとかあり得ない
1カ所になるまでリファクタリングしろ

619 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 23:44:10.62 ID:U9FOV+VD0.net]
気持ち悪いと思うかどうかは感性の問題だからなあ
例えばある日地球の回転速度が変わって1分が61秒になった
プログラムを修正しろと言われて、
場所によって書き方が違っていると大変だね
と言う話なら理解出来るけど

620 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 23:51:40.27 ID:pKedwP800.net]
constexpr int min = 60;
constexpr int hour = min * 60;
constexpr int day = hour * 24;



621 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 06:39:53.70 ID:4nqAllCK0.net]
hoursは<chrono>にあるだろ
それとoperator""h

622 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 06:41:16.16 ID:4nqAllCK0.net]
operator""dayがねえんだよな<chrono>って

623 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 07:36:00.34 ID:eC4PF2tM0.net]
chronoのhoursはstd::chrono::duration<int, std::ratio<3600>>のエイリアスなので
daysはこうすればよい
using days = std::chrono::duration<int, std::ratio<86400>>

624 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 08:15:03.73 ID:ylQhqnt4M.net]
>>602
> daysはこうすればよい
> using days = std::chrono::duration<int, std::ratio<86400>>
>>555へ戻る w

625 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 08:42:21.15 ID:eC4PF2tM0.net]
閏秒を考慮するのと1日を86400秒とするのは全く関係ないのに閏秒がどうとか言い出した奴が悪いのでは
丁寧に書くなら計算の根拠として60*60*24を見えるところに書いておけばいい

626 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 09:17:22.64 ID:MwJCRjiPd.net]
知ってる知識を披露したかっただけだろうから罪は軽い

627 名前:デフォルトの名無しさん [2018/03/14(水) 10:28:48.31 .net]
>>604
全く関係ないは言い過ぎ

628 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 10:52:42.70 ID:a7dBFlsI0.net]
ほぼ関係ないな、難癖もいいとこ
実用上は全く関係ない

629 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 11:03:01.46 ID:2oR7xNCJ0.net]
うるう秒がどうのこうのと言う、問題じゃなく86400秒をそこでしか使わないって根拠が無いんだよね
後でまたその数値が出てくるとしてその度に86400と書くのか、もしその数値を修正する事になったら全部書き直すのか、2回3回使うようになって始めて変数なり定数なりに入れるのか
それなら最初から式中に出てくる数値は変数に格納してから使えって統一した方が話が早い

630 名前:デフォルトの名無しさん [2018/03/14(水) 11:14:21.74 ID:G0IAn/x5d.net]
今時マジックナンバーとか昭和からタイムスリップしてきたのかよ



631 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 11:43:33.36 ID:xovkfTzX0.net]
プログラムにおけるマジックナンバー(英: magic number、魔法の数字)とは、何らかの識別子もしくは定数として用いられる、プログラムのソースコード中に書かれた具体的な数値である。
そのプログラムを書いた時点では製作者は数値の意図を把握しているが、他のプログラマーまたは製作者本人がマジックナンバーの意図を忘れたときに閲覧すると「この数字の意味はわからないが、とにかくプログラムは正しく動く。
まるで魔法の数字だ」という皮肉を含む。
by Wikipedia

632 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 11:50:45.96 ID:I+60yKfra.net]
「1日の秒数」って定数を86400って書いて怒られたって話じゃないんだ?

633 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 12:06:59.05 ID:L/3+Hz1H0.net]
>>609
じゃあオマエ、構造化もしてないのか?
昭和時代ほど耳にしなくなっても廃れたのではない話は結構あるぞ

634 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 13:01:38.98 ID:MwJCRjiPd.net]
>>611
怒られたという程じゃなくて、
 一日の秒数 = 86400;
と書いたら「マジックナンバーやめろ」と言われたってことさ

635 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 13:18:59.19 ID:eC4PF2tM0.net]
わかりきった定数はマジックナンバーではない

636 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 14:08:58.84 ID:IrrOEbi1d.net]
>>613
それをヘッダに移動させるだけやん

637 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 14:14:27.78 ID:MwJCRjiPd.net]
>>615
そうじゃなくて
60*60*24 て書いて欲しいんだってさー


638 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 14:16:09.81 ID:2oR7xNCJ0.net]
>>616
まぁ可読性高くて損する事は無いし、なるべく要素は分解して書いた方がいいんじゃないの
何かどうしても86400じゃなきゃ困る理由とかあるなら話は別だろうけど、無いだろ?

639 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 14:34:38.65 ID:IrrOEbi1d.net]
>>616
クソどうでもいいな

640 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 15:05:38.89 ID:hFOwW8jGM.net]
ITのエンジニアって
こういうくだらないことで
給料貰ってるんだろうなあ



641 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 15:18:02.33 ID:xovkfTzX0.net]
こういうクソみたいなことでもウンチク垂れてテコ入れしろと提案することにより仕事してます感かもし出す為だろうな

642 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 15:45:56.81 ID:L/3+Hz1H0.net]
>>619
結果のわからない投機的な模索をしているときは
逆にマジックナンバー地獄なコードだよ
他人に渡すコードを清書するときの書き方・考え方とは真逆

643 名前:デフォルトの名無しさん [2018/03/14(水) 16:27:34.05 ID:9D6+Eo6Z0.net]
俺がわかるからみんなわかるだろうというコードはすげー困るな
例えその場の全員がわかったとしても今後わからない奴が出てきた時の事を考えて
できうるかぎりわかりやすいコードを書くべきだな

644 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 17:02:40.84 ID:L/3+Hz1H0.net]
そのためのコストにもよる
空想論じみた「わかりやすさ」にまで付き合ってらんないこともある
特に最低限のプロとしてのスキルを

645 名前:欠く者を想定することはしない

ちょっと飛躍するがプログラム言語だってそうなっている
マシンの性能を使いやすさに振るということを無限にはやらない
どのくらいのアホまで付き合ってやるのか性能とのトレードオフで
色んなバランスで棲み分けになっている
[]
[ここ壊れてます]

646 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 17:03:50.56 ID:2oR7xNCJ0.net]
まぁ別に自分だけが使う分にはいくら分かりづらく書いてくれても構わんけどな

647 名前:デフォルトの名無しさん [2018/03/14(水) 17:11:14.36 ID:9D6+Eo6Z0.net]
86400を60*60*24と書くことにはなんのコストも支払ってないから書けばいいな
いちいち話を飛躍させる奴はなんなんだ

648 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 17:20:37.67 ID:I+60yKfra.net]
人によっては>>599みたいにしろって言うだろうし
結局は人それぞれってことじゃないの

16を2*2*2*2っていちいち書く人はいないでしょ
まぁ1<<4って書けと言われるかもしれんが

649 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 17:21:05.80 ID:jowRUKsS0.net]
学校の試験問題で一日の秒数としてソースに86400を書いたら
マジックナンバーだからと減点された、納得いかない。
みたいな発端じゃないのかなぁ。

650 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 17:22:38.07 ID:L/3+Hz1H0.net]
それをfindとsedでやる勇気あるか?

たとえば俺なんかは1箇所ずつよく見て有機的に判断しないと怖いし
それの残業代は貰えるのか心配だ



651 名前:デフォルトの名無しさん [2018/03/14(水) 17:51:03.64 ID:9D6+Eo6Z0.net]
当然その程度のリファクタリングはするべきだしそもそもマジックナンバーをどうにかするべきだし
お前の残業代とかいう飛躍した話はどうでもいい

652 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 18:19:55.18 ID:L/3+Hz1H0.net]
飛躍じゃねえ実話だよ

ずいぶん昔、社内BBSでそれ系のことを言い出したやつが
偉い人から突っ込まれてた

653 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 18:35:58.25 ID:MwJCRjiPd.net]
プロとか言い出してる人がいるけど、それこそ飛躍では?

654 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 18:40:08.58 ID:y6ADsCAy0.net]
プログラムの話題から外れてきていると思いませんか?

655 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 18:48:14.13 ID:uMO7yRavM.net]
>>614
だからわかりきってるかどうかは人によって違うって話
プログラムの前に日本語の勉強しろよ w

656 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 18:48:33.76 ID:2oR7xNCJ0.net]
まぁコスト次第で可読性を犠牲にするケースもあるだろうけど
この場合はメモリ食う訳でも処理遅くなる訳でもソースの構造が変わる訳でもない
86400でも十分分かりやすいかも知れんが60*60*24なら更に分かりやすくなる

どっちが良いかなんて議論の余地無いよね

657 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 18:50:15.11 ID:L/3+Hz1H0.net]
>>631
別にプロでなくてもいいんだけどさ
おまえさんなりに、同じプロジェクトにいて欲しくない足手まといが
どのくらいから下というのはあるだろ

658 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 18:54:56.26 ID:uMO7yRavM.net]
>>626
> 16を2*2*2*2っていちいち書く人はいないでしょ
> まぁ1<<4って書けと言われるかもしれんが
状況次第だろ
場合分けの条件が4個あって各々2状態をとるとかなら2*2*2*2って書くかもしれない
下から4ビット目のマスクが欲しいなら1<<4って書くこともある

659 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 18:58:33.90 ID:2oR7xNCJ0.net]
>>636
ビットフィールド使えば?

660 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 19:09:24.20 ID:L/3+Hz1H0.net]
シフト使うな、ビットフィールドで書け
なんて言われると、俺は相手にもよるが逆らいそう



661 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 19:37:46.29 ID:uMO7yRavM.net]
>>637
ビットフィールドは割り付け順序が処理系定義だったりしたからあまり使ったことがない

662 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 21:26:40.49 ID:kWAHqA+uM.net]
たまには2進リテラルちゃんのことも思い出してあげてください

663 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 06:36:14.64 ID:F+InEeO+0.net]
議論の本筋(1日の秒数として即値で86400と書くことの是非)とはさらに離れるけど、
ビットシフトを使う定数は常にカッコで囲んでくれ。

res = a + 1<<4 + b;
res = a +(1<<4)+ b;

664 名前:デフォルトの名無しさん [2018/03/15(木) 07:15:43.22 .net]
>>641
3つ以上の項があると静的解析ツールで怒られるから
res = (a +(1<<4))+ b;
と書く

665 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 08:58:15.76 ID:x1WHRaDf0.net]
>>641
下のつもりで上書いたらただのバグじゃん

666 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 09:19:10.68 ID:3Ym40JOm0.net]
算術と混用するときは結合順位に注意せよ、というだけのことを
いちいち必ずだ!ルールだ!と金切り声で吠えついてくるやつはウザい

667 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 09:55:31.41 ID:LkpAylTJM.net]
>>642
可読性悪くしてかえって品質低下招きそうな指摘だな

668 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 13:29:47.33 ID:O2sRH7tT0.net]
vectorをつなげる際、copyが良いとか、insertを使えとか色々書いてあるのですが、どれが良いのでしょうか?

669 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 13:54:37.80 ID:XNo6/02A0.net]
あらかじめ領域を広げておく必要があるけどinsertの方がチェックが入らない分速い

670 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 15:23:48.90 ID:9f/t5+6G0.net]
reserveしてinsertだな



671 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 15:36:42.69 ID:q9z+dA6Ga.net]
insertの直前にreserveって意味あるのか?

672 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 16:32:16.09 ID:XNo6/02A0.net]
reserveは終端のポインタが更新されないからresizeじゃないとだめ

673 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 16:57:46.96 ID:R5/WYUtW0.net]
reserveしてback_inserterでcopy

674 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 17:05:27.14 ID:QEAEy0DH0.net]
>>648
insertはサイズチェックしてるでしょ。
>>649
iteratorを2つ受け取るタイプのinsertなら意味あるんじゃね?
>>650
resizeは不味いだろ。

675 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 17:09:09.32 ID:QEAEy0DH0.net]
>>652
アンカしくった。
サイズチェックの指摘は>>647向け

676 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 17:21:30.23 ID:XNo6/02A0.net]
ごめんinsertとcopy逆だった

677 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 17:28:15.72 ID:q9z+dA6Ga.net]
>>652
insertの中で追加数数えてreserveと同じことしてるでしょ
まさかループで一個ずつ挿入なんて実装はあるまい

678 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 19:10:49.64 ID:QEAEy0DH0.net]
>>655
失礼。挿入位置のiteratorもあるから、3つ受け取るタイプの誤り。

679 名前:デフォルトの名無しさん [2018/03/15(木) 22:07:51.82 ID:dQGk6ayHa.net]
cpprefjpの任意の式によるSFINAEの頁でdecltype(a + b, bool())と記載されているコードがあるんだけれど、
このa+b, bool()はラムダ式?

該当頁
https://cpprefjp.github.io/lang/cpp11/range_based_for.html

680 名前:デフォルトの名無しさん [2018/03/15(木) 22:09:23.09 ID:dQGk6ayHa.net]
アドレス間違えた
https://cpprefjp.github.io/lang/cpp11/sfinae_expressions.html



681 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 22:15:55.91 ID:3Ym40JOm0.net]
ラムダ式が[で始まらないことってあるのか?

682 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 22:41:44.53 ID:ubsUN4Yb0.net]
>>657
カンマ演算子とdecltypeでコンパイル時に評価される
decltypeの中身を左から順に評価し、結果は一番右の型が帰る
この場合はa+bの型が評価出来ればbool、できなければSFINAE

683 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 22:41:47.80 ID:XNo6/02A0.net]
>>657
>a + b
a + bが可能かどうか調べる

>,
次の式を評価する

>bool()
bool型の初期値を返す

つまりdecltype(a + b, bool())はa + bでSFINAEをしつつカンマ演算子でdecltypeにbool型の値を与えて返り値の型をbool型にしている

684 名前:デフォルトの名無しさん [2018/03/15(木) 22:57:18.20 ID:dQGk6ayHa.net]
decltypeで,も使えたんですね。一番右の型が帰るということはdecltype(a+b,a-b,a*b,a/b,bool())とかしてもよさそう。。。

自分ではその機能を説明してるページを見つけれませんでした。
ありがとうございます。

685 名前:はちみつ餃子 mailto:sage [2018/03/15(木) 23:50:51.42 ID:VBbQqJBt0.net]
>>660-661
それで良いのか。 いいこと知った。
いちいち enable_if をしとったわ。

686 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 07:54:12.89 ID:UGENGinrd.net]
decltypeって実行時の型を得れる?

687 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 09:23:42.20 ID:Qbg0TjKpa.net]
>>656
a.reserve(a.size()+b.size());
a.insert(a.end(),b.begin(),b.end());
こんな感じのことをやるのかと思ったんだけど、これ意味ないでしょ?

688 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 10:04:08.28 ID:SYp9l/ZId.net]
>>664
declとはdeclareの略であることを考えると

689 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 10:17:31.56 ID:g2YO+i2m0.net]
a.reserve(a.size()+b.size());
copy(b.begin(),b.end(),back_inserter(a));

690 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 15:36:10.69 ID:0r9PteXTM.net]
>>665
random iteratorの場合の特殊化実装がありました。ごめんなさい



691 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 18:08:23.55 ID:Al45BtF0p.net]
>>662
decltype comma trickでググれ

692 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 20:56:30.80 ID:DBylbaSH0.net]
まあoperator,()が定義されてるとまずいんだけどな

693 名前:デフォルトの名無しさん mailto:sage [2018/03/19(月) 22:50:10.89 ID:OQSUItjMd]
codepad.org/C8t9k4fD
ソース自体をプログラムに読み込ませると
#includ
で止まってしまうんですけど何が問題でしょうか

694 名前:デフォルトの名無しさん [2018/03/19(月) 18:07:03.75 ID:/U1oheuNa.net]
インスタンスにdeleteかけたとき、メンバ変数が破壊されるのとデストラクタが実行されるのはどっちが先?
今書いてるコードがデストラクタでメンバ変数アクセスすると落ちることがあるから、破壊されるのが先なんだろうか?

695 名前:はちみつ餃子 mailto:sage [2018/03/19(月) 18:15:15.06 ID:RG1qd9Pc0.net]
>>672
原則としては構築の逆順って覚えておくと間違えない。

696 名前: mailto:sage [2018/03/19(月) 18:33:44.24 ID:lFWK67Qs0.net]
>>672
delete this; とかしてませんか、これは基本的に避けたほうがいい

697 名前:片山博文MZ mailto:sage [2018/03/19(月) 18:43:06.07 ID:SpFx62hRd.net]
>>674に同意。確保と破棄は生ポインタを触らずに自動化した方がいい。スマートポインタとかコンテナとか。
二回deleteを避けるためにポインタにNULLを代入する技もある。

698 名前:デフォルトの名無しさん [2018/03/19(月) 21:03:24.06 ID:kCg91IvDa.net]
そろそろNULLは駆逐してnullptrに移行させたい

699 名前:デフォルトの名無しさん mailto:sage [2018/03/19(月) 22:46:40.23 ID:jnDGFLZz0.net]
>今書いてるコードがデストラクタでメンバ変数アクセスすると落ちることがある
へ〜んなの
ていうかメモリを壊しているかすでにdeleteされた死骸を再deleteしてるとしか、

>二回deleteを避けるためにポインタにNULLを代入
OpenCVのC言語インターフェースのやつ、

700 名前:デフォルトの名無しさん mailto:sage [2018/03/19(月) 22:57:33.17 ID:cmSuhSLP0.net]
C++勉強中の者です。
codepad.org/C8t9k4fD
ソース自体をプログラムに読み込ませると
#includ
で止まってしまいます。
Cのfgets()のようには使えないのでしょうか。



701 名前:デフォルトの名無しさん [2018/03/19(月) 23:06:01.35 .net]
>>678
According to the C++ reference
en.cppreference.com/w/cpp/io/basic_istream/getline
getline sets the ios::fail when count-1 characters have been extracted.
You would have to call filein.clear(); in between the getline() calls.

702 名前:デフォルトの名無しさん mailto:sage [2018/03/19(月) 23:26:45.72 ID:cmSuhSLP0.net]
>>679
区切り文字を読まないとfail状態になってそれ以降は失敗し続けるので止まってしまうということですかね

703 名前:デフォルトの名無しさん mailto:sage [2018/03/19(月) 23:27:24.60 ID:jnDGFLZz0.net]
std::getline()は読み込んだ文字列に改行文字を含めないから
行末まできちんと読んだのか
文字数カウントのせいで読み込みが行の途中でぶちきれたのか
直ちにはわからないといいうアホウな仕様
判別には結局std::basic_istream<T>::unget()の助けが要る

C++標準ライブラリのうちストリーム関連だけは腐っているからC言語のを使いなしゃれ

※ 個人の感想です

704 名前:デフォルトの名無しさん mailto:sage [2018/03/19(月) 23:28:25.97 ID:jnDGFLZz0.net]
訂正
△: C++標準ライブラリのうちストリーム関連だけは腐っているからC言語のを使いなしゃれ
◎: C++標準ライブラリのうちストリーム関連だけは本当に腐っているからC言語のを使いなしゃれ

705 名前:デフォルトの名無しさん mailto:sage [2018/03/20(火) 01:02:22.15 ID:mI6/gPTY0.net]
入出力はCもC++もクソまみれだからなぁ
ちょっとコンソール出力を整形しようとして、あの肥溜めのクソくだらない落とし穴地獄にいちいち付き合わされた結果
プログラミングそのものが嫌いになる人達が山のようにいるのが本当に残念だ

706 名前:デフォルトの名無しさん [2018/03/20(火) 01:12:22.56 ID:PXcTmg8I0.net]
いるか?

707 名前:デフォルトの名無しさん mailto:sage [2018/03/20(火) 01:20:34.94 ID:mI6/gPTY0.net]
自分が知ってる昔はいっぱいいたけど
最近だとスクリプト言語から先に入るから減ってるのかね?

708 名前:はちみつ餃子 mailto:sage [2018/03/20(火) 01:21:52.68 ID:N1yoGURK0.net]
オブジェクトの外部表現を型ごとに定義できる iostream は悪くない設計だと思うんだけどなぁ。

709 名前:デフォルトの名無しさん mailto:sage [2018/03/20(火) 01:41:51.26 ID:PjVFN34O0.net]
ローカライズに向いてない。
打鍵数が倍増どころじゃない。

モダン言語はみなprintfライクだしねー

710 名前:デフォルトの名無しさん mailto:sage [2018/03/20(火) 02:48:01.36 ID:PXcTmg8I0.net]
printf()は便利ではあるが桁を揃えて出す時に面倒になることもある。
特にこの頃は UTF-8 で漢字混ざりだと文字幅とバイト数または文字数が一致しない。
そもそもそんなものの一致をあてにすること自体が間違いかも知れないが、Unicode
には一応 HALF WIDTH, FULL WIDTH 等があるんだから何とかしてこれを生かした
フォーマッタが欲しいところではある。



711 名前:デフォルトの名無しさん [2018/03/20(火) 06:49:53.60 ID:eswqOupsM.net]
>>673
>>674
あるクラスがあって、その中でスレッド立ててるの
それでクラスのデストラクタが呼ばれたら、メンバ変数のスレッドポインタをつかってスレッドcancel->joinってやろうとしてて
それでjoin呼ぶあたりで落ちるんだよね

作られた逆順ってことはデストラクタのほうが先に実行かな?それだとメンバ変数はいきてるよね

712 名前:デフォルトの名無しさん mailto:sage [2018/03/20(火) 06:55:01.02 ID:83N3dpVy0.net]
streamはコンソールの入出力のためだけにあるわけじゃないから

713 名前:デフォルトの名無しさん mailto:sage [2018/03/20(火) 06:55:05.50 ID:Wsijl5j90.net]
つーてもcoutだってsetw/setfillはあんまり使いやすくないしなあ
operator<<をユーザー定義できるのはありがたいけどね

714 名前:デフォルトの名無しさん mailto:sage [2018/03/20(火) 13:10:27.33 ID:geezFnQ40.net]
>>689
デストラクタの実行中はそのクラスとその派生元クラスのメンバ変数はまだ使える
必ず落ちるならデバッガでバックトレース見てみたら?

715 名前:デフォルトの名無しさん mailto:sage [2018/03/20(火) 19:32:56.49 ID:mI6/gPTY0.net]
別の原因に見える
まずデストラクタじゃなくて普通のメンバ関数で明示的に呼んで止めた時に大丈夫か確認してはどうか

716 名前:デフォルトの名無しさん mailto:sage [2018/03/20(火) 19:45:17.42 ID:KQMGt9+Dd.net]
pthread_cancel はいろんなことがよく分かっている人しか使ってはいけない

717 名前:デフォルトの名無しさん mailto:sage [2018/03/20(火) 22:33:41.91 ID:f35CyiEk0.net]
>>686
「<<」と「>>」の2種類しか用意できんやんけ
それらを表示と入力に割り当ててしまえば結局シリアライズのための固有なメソッドなりインターフェースなりを別途作らねばならんぬ、
そもそもの構想からして頓挫してゐる、
頓挫してゐるのだ…!

718 名前:はちみつ餃子 mailto:sage [2018/03/20(火) 23:55:08.06 ID:N1yoGURK0.net]
>>695
表示用とシリアライズ用はストリームの性質で切り替える筋合いのものだろ?
シリアライズ用のストリーム

719 名前:型を用意してオーバーロードすればいいんじゃね。 []
[ここ壊れてます]

720 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 00:33:52.80 ID:7c9Ne47J0.net]
ちょっなんで数億年の生物史史上はじめて
ようやっとSTDINとSTDOUTとSTDERRの3種類に世界が抽象化されたストリームという概念|を
細分化するという元の木阿弥にしますか;;

藻前は
  some_command | tee result.txt > some_file.bin
とかいったパイプやリダイレクトを表示専用とかシリアライズ専用とかに分けたいのかっていうか、



721 名前:デフォルトの名無しさん [2018/03/21(水) 00:44:24.33 ID:p0rFESlF0.net]
なに藻前って

722 名前:はちみつ餃子 mailto:sage [2018/03/21(水) 01:10:44.31 ID:MouF+uE40.net]
>>697
お前は何を言ってるんだ。
ここで言ってるストリームは C++ 用語のストリームだぞ。
「ストリーム『型』」ってわざわざ書いてるんだからわかれよ。
下位レイヤでは好きなところに繋げればいい。

723 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 01:18:27.48 ID:9NBOfW2C0.net]
streamとstreambufの違いを理解しよう

724 名前:はちみつ餃子 mailto:sage [2018/03/21(水) 01:24:40.58 ID:MouF+uE40.net]
要するに std::basic_ostream を継承した何かを作ればいいんだ。

725 名前:デフォルトの名無しさん [2018/03/21(水) 06:52:22.30 ID:fTbDiwfs0.net]
ストリームはもう捨てたほうが良いぞ。
おじさんからの警告だ。

726 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 07:14:12.04 ID:2n7LolrI0.net]
便利そうに見えて便利に使えない
それがstream

727 名前:デフォルトの名無しさん [2018/03/21(水) 07:18:35.01 ID:zecIlzA/0.net]
「29歳既婚、2年前に会社を辞めた。ボードゲーム作りを始めて3700万円を
売り上げたけど何か聞きたいことはある?」回答いろいろ
labaq.com/archives/51880196.html
日本ボードゲーム界の異端児に聞く!ボードゲームデザイナーとして生きていくには?
https://bodoge.hoobby.net/columns/00013
はじめてボードゲームを作ってはじめてゲームマーケットに出店した ので、ひとり反省会をしてみる。
datecocco.hatenablog.com/entry/2015/11/26/000000
はじめて作ったボードゲームを売った話
nrmgoraku.hateblo.jp/entry/2017/05/17/210000
ボードゲームイベント「ゲームマーケット」から業界が見えた!
https://entertainmentstation.jp/61107
ゲームマーケットに挑む人向けガイド
spa-game.com/?p=4830
ボードゲームはどう作るのか、自分なりに考えた
roy.hatenablog.com/entry/2014/07/09/124824
オトナも遊べるボードゲーム!自作するといくらになるのか
www.d-laboweb.jp/special/sp312/
ボードゲームの展示イベント「ゲームマーケット」の成長記録からこれからの
市場に必要なことを妄想してみた。6年間の来場者数推移(2016年4月時点調べ)
https://bodoge.hoobby.net/columns/00001
ボードゲーム市場がクラウドファンディングの出現で急成長を遂げ市場規模を拡大中
gigazine.net/news/20150820-board-game-crowdfunding/

728 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 10:36:30.48 ID:DQv7yGEy0.net]
>>697
カンブリア紀からオルドビス紀にかけて行われた抽象化は
今でいうインターフェイスの考え方で、当たり前だが
インターフェイスを継承する実装クラスは無数にあってよい
そういうのは元の木阿弥とは言わないぞ

729 名前:はちみつ餃子 mailto:sage [2018/03/21(水) 15:09:48.71 ID:MouF+uE40.net]
>>697
さっき >>699 で説明した C++ の話題を置くとしても、
(まあ C++ スレで C++ の話題を置いちゃうのはどうかと思うが)
標準入力、標準出力、標準エラー出力のみっつしかないってことはない。

エラー出力をリダイレクトするときに 2> って書くの、どういう意味だと思ってる?
2 はファイルディスクリプタな。
デフォでオープンされてるのが 0, 1, 2 ってだけで、やりたければ 3 でも 4 でも使っていい。

730 名前: mailto:sage [2018/03/21(水) 15:42:02.21 ID:ZGJmhAHm0.net]
>>706
空いているディスクリプタが使用されるとしても、自分で特定の数字を指定してディスクリプタにすることはできなかったんじゃなかったかな?



731 名前: mailto:sage [2018/03/21(水) 15:50:19.07 ID:ZGJmhAHm0.net]
>>707
失礼、dup2() というのがあったね…

732 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 15:58:29.69 ID:9NBOfW2C0.net]
coutがSTDOUTにつながってるだけでここは何につなげてもいいということ
streambufの中身はただの配列でもいいし、アプリケーションのロガーでもいいし、循環バッファでもいいし、通信のポートでもいい

733 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 19:28:41.53 ID:TV3lE0eZ0.net]
シリアライズするときはバイナリ表現にしたいし
ログするときは文字列表記にしたいし

734 名前:はちみつ餃子 mailto:sage [2018/03/21(水) 20:00:34.84 ID:MouF+uE40.net]
>>710
だからそれはストリームオブジェクトの型で切り替えろって言ってるんだろうが

735 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 20:30:34.07 ID:VVSY5O5Ed.net]
それを嫌だって言ってんだよ
バイナリの読み書きは write() だの read() で十分

736 名前:はちみつ餃子 mailto:sage [2018/03/21(水) 20:33:11.12 ID:MouF+uE40.net]
read なり write なりを「使う」のは別にいいよ。
それを C++ 上でどのように抽象化すればいいかって話なんだから。
そういうレイヤの違う話を混ぜ込んでくるなよ。

737 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 20:43:51.09 ID:KgSvodNyd.net]
そこで新しい型を設けてまで << を使う意味がない
cout にバイナリでシリアライズするときはどうすんの?
size_t serialize(const T& t, ostream& os)
とかを各型用に書く方がマシ

738 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 20:47:43.15 ID:KgSvodNyd.net]
バイナリでシリアライズするに際して
別の型のストリームオブジェクトを作ってまで
<< だの dec だの endl を使えるようにすることの利点を説明して欲しい

739 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 21:36:05.23 ID:9NBOfW2C0.net]
例外を除いて
operator<<()は書式化出力
write()は非書式化出力
なのでバイナリを出力するときはwrite()を使うべき

>size_t serialize(const T& t, ostream& os)
シリアライズのような複雑な操作をするときはこれは悪い選択じゃない
というかstreamそのものを放り込むのはたまに見かける

740 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 22:02:23.07 ID:52xrh1HkM.net]
えっブロックデバイスにもStreamを



741 名前:はちみつ餃子 mailto:sage [2018/03/21(水) 22:15:54.63 ID:MouF+uE40.net]
>>716
書式化 (formatted) ってのと、結果がバイナリかというのは直行する概念だよ。
シリアライズってのはオブジェクトのバイト列をそのまま出力することじゃなくて、
バイナリ形式の特定のフォーマットにして出力することだろ。
それは書式化って言うんだよ。

742 名前:はちみつ餃子 mailto:sage [2018/03/21(水) 22:26:24.75 ID:MouF+uE40.net]
>>715
マニピュレータを使える意味はないかもな。
使えないように定義することも出来るし、意味がないなら使えないようにしておくべき。

ここでは抽象化の話をしているんだ。
出力先が人向けのテキスト表現であるか機械向けのシリアライズ表現であるかによって
書き方を変えなきゃならない、相手を意識しなきゃならないというよりは、
相手によって自動で切り替わって欲しいってことなんだよ。

意識しなくていいデザインってのは意識しにくくなるってことと表裏一体だから、
見えなくなるのが気にくわないってのならわかる。

743 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 22:26:32.59 ID:OwhHF7Zm0.net]
直交

744 名前:はちみつ餃子 mailto:sage [2018/03/21(水) 22:29:29.81 ID:MouF+uE40.net]
>>720
スマソ。 >>718 の直行は直交の書き間違いやね。

745 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 23:13:33.75 ID:NRxI71LE0.net]
無意味な処理が嫌だとか言っておきながら
ここでは無駄の塊みたいな方法を勧める
アホですね

746 名前:はちみつ餃子 mailto:sage [2018/03/21(水) 23:50:04.75 ID:MouF+uE40.net]
>>722
俺は一貫して抽象化の話をしてるつもりなんだが。
プログラマの意図を表現できる書き方をすべきって話をしてんの。
無意味な処理をしろと書いてあるのをプログラマの意図として読み取っていいのか?
そうじゃないだろう。

C++ がせっかく用意しているライブラリを活用するのが無駄なのか?
そうじゃないだろう。

747 名前:デフォルトの名無しさん [2018/03/22(木) 07:21:49.59 ID:tiDItZ1f0.net]
ハッキリ言ってストリームは蛇足だったわ。
廃止したほうが良いわ。

748 名前:デフォルトの名無しさん [2018/03/22(木) 07:25:52.15 ID:tiDItZ1f0.net]
Boostもそうだけど、有り余るC++のパワーをカッコよく使いこなそうとしてやっちまったみたいな。
もうちょっと使う側の立場にたつべきだな。

749 名前:デフォルトの名無しさん mailto:sage [2018/03/22(木) 08:38:59.71 ID:0Y4DSJfq0.net]
黒魔術だなんだ言って楽しめないようではC++は向いていない

750 名前:デフォルトの名無しさん mailto:sage [2018/03/22(木) 10:14:29.52 ID:Q5Rs9TJ/0.net]
蛇足ねえ。。。
禿本1stでoperator overloadのデモ用に作られたサンプルなんだが
そういうのは後で取って付けた存在といえるのか?



751 名前:デフォルトの名無しさん mailto:sage [2018/03/22(木) 17:28:14.63 ID:PBLsyShY0.net]
業界全体としては奥の深さを求める人(求道者)を一か所に集め留めるのには非常に有益な言語

752 名前:デフォルトの名無しさん mailto:sage [2018/03/22(木) 17:34:08.02 ID:0Y4DSJfq0.net]
そのうちAsioやRangeあたりも標準化されるだろうし
もうその方向に突き抜けてほしい
使いやすい言語なんか他にいくらでもある

753 名前:はちみつ餃子 mailto:sage [2018/03/22(木) 17:41:04.44 ID:HExEyyqO0.net]
具体的にどういうときに不便なのか語れよ。
使いにくいってだけじゃ何にもわからん。

754 名前:デフォルトの名無しさん mailto:sage [2018/03/22(木) 17:43:00.10 ID:0Y4DSJfq0.net]
C++に関しては慣れてない人がそう言ってるだけだから

755 名前:デフォルトの名無しさん mailto:sage [2018/03/22(木) 19:57:57.53 ID:sR+euIcT0.net]
>>727
どの資料だったか覚えてないけど、演算子オーバーロードに関して
先生は「元の演算子の意味とかけ離れた挙動をさせるのは避けるべきだ」
みたいなことも書いてるよな。

まぁ、原則は指針であって絶対の規則じゃないわけだけど、
<< >> をビットシフトからストリーム入出力に振り替えておいて
どの口で言うか、このハゲッー! とか思ったり。

756 名前:デフォルトの名無しさん mailto:sage [2018/03/22(木) 20:06:11.34 ID:0Y4DSJfq0.net]
>>732
ストリームのような周知の事実になっているものはそれには当てはまらないでしょ

757 名前:はちみつ餃子 mailto:sage [2018/03/22(木) 20:22:42.90 ID:HExEyyqO0.net]
>>732-733
まああれくらいのものになると、オブジェクトに追加で突っ込んでいくような動作が「元の演算子の意味」になっちゃってるよな。

そんなことより C++20 に入る予定のカレンダーでは日付を 2018y/mar/22 とか書けるらしくて、
これはさすがにクソやろ……。
これもいずれ普通に受け入れる気持ちになるだろうか。

758 名前:デフォルトの名無しさん mailto:sage [2018/03/22(木) 20:47:25.31 ID:0Y4DSJfq0.net]
>>734
既にfilesystemのpathが/で階層作れるから
current_path / "aho" / "baka"みたいに
C++の演算子は連想ゲームだ

759 名前:デフォルトの名無しさん mailto:sage [2018/03/22(木) 22:18:28.94 ID:Q5Rs9TJ/0.net]
>>732
あの頃の禿はreverse_iteratorなんて思いもよらず
operator+が減算の動作をすることを否定してたね

760 名前:デフォルトの名無しさん mailto:sage [2018/03/23(金) 00:38:32.35 ID:2SqL+aT8a.net]
>>734
日付の表記は何種類かあるし年/月/日でも日/年/月でも表せるなら結構便利だと思う。



761 名前:デフォルトの名無しさん mailto:sage [2018/03/23(金) 08:21:50.21 ID:VCdaFb7Y0.net]
>>734
標準に「日付を表す型」みたいのが追加され、
それ用リテラルの接尾語(のひとつ)が ""y で 2018y

762 名前: は2018年を表す、
さらにこの型では / は日付要素を区切る演算子としてオーバーロードされてる。
…といった感じか?

確かに虚心坦懐に / を見れば、割り算のコンピュータ向け代用記号だけでなく
日付の区切りや、ファイルシステムの階層区切りでもあるけど。
[]
[ここ壊れてます]

763 名前:デフォルトの名無しさん mailto:sage [2018/03/23(金) 09:13:18.25 ID:xSYf1jdZ0.net]
aのb乗
a^b
a**b

764 名前:デフォルトの名無しさん mailto:sage [2018/03/23(金) 10:31:52.82 ID:fMiQp2pkd.net]
こんだけ演算子は深いのになぜか未だに[]は引数を一つしか取れない

765 名前:デフォルトの名無しさん [2018/03/23(金) 10:45:38.60 ID:COiOJTLla.net]
「静的」、「動的」というのがよく分からないのですが、詳しく書いてある本はありますか?

ヒープ領域がどうたらとかいうのもよく分かりません。
スタックとかいうのもよく分かりません。

詳しく解説している本を教えてください。

766 名前:デフォルトの名無しさん [2018/03/23(金) 10:48:57.55 ID:COiOJTLla.net]
ロベールのC++の本を読んでいて疑問に思いました。

767 名前:デフォルトの名無しさん mailto:sage [2018/03/23(金) 19:28:55.75 ID:FQA7q+b8M.net]
>>738
> …といった感じか?
そんな感じらしい
d.hatena.ne.jp/yohhoy/touch/20180322/p1

日本だと基本 年/月/日 しかないしソースコードに 睦月、如月、弥生 なんて書く奴はいないからいまいち便利さがわからんけどあちらの人にとっては便利なんだろうか

768 名前:デフォルトの名無しさん mailto:sage [2018/03/23(金) 19:30:12.07 ID:5ELqDBlL0.net]
ポップとプッシュの概念もよく分かってないのでは
www.cc.kyoto-su.ac.jp/~yamada/ap/stack.html
これが分かって来るとC++に於けるバッファオーバーフローBOF攻撃の仕組みが分かって来る

769 名前:デフォルトの名無しさん mailto:sage [2018/03/23(金) 19:42:22.13 ID:5ELqDBlL0.net]
バッファオーバーフロー: #1 概要
https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/c901.html

770 名前:デフォルトの名無しさん mailto:sage [2018/03/23(金) 19:52:45.96 ID:e6tCc9HsM.net]
五曜は対応してくれると有り難いかも知れないけど
他はいらんな



771 名前: mailto:sage [2018/03/23(金) 19:55:59.42 ID:J4dYcx4H0.net]
>>741
C/C++ のメモリ構造について、になります。
これは基本的な事項で、初級を脱するためにはぜひとも必要な知識なんですが、
そのわりにあまりに解説されることがないような気がします
適切な説明がないものか…

772 名前: mailto:sage [2018/03/23(金) 19:59:40.83 ID:J4dYcx4H0.net]
>>741
まず、メモリの管理方法として

1. スタックエリア、に格納するやり方
2. ヒープエリア、に格納するやり方

の大きく分けて二通りがあり、

2. ヒープエリア、二格納するやり方について

2-1. 「静的」:static キーワードを使うやり方
2-1. 「動的」:malloc()/free() または new/delete を使うやり方

が分類されます。

773 名前:デフォルトの名無しさん mailto:sage [2018/03/23(金) 20:10:28.07 ID:e6tCc9HsM.net]
データセグメントって無くなったの?

774 名前:デフォルトの名無しさん [2018/03/23(金) 20:39:25.53 ID:COiOJTLla.net]
>>747-748

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

あまりそういう本はないんですか。

もしかしたら、ヘネシーらのコンピュータのハードの本とか読まないといけないんですかね?

あるいはコンパイラの本ですかね?

775 名前:デフォルトの名無しさん mailto:sage [2018/03/23(金) 20:40:47.42 ID:l1/KZZgNM.net]
>>748
一般的に、静的領域をヒープとは呼ばんだろ

776 名前:デフォルトの名無しさん mailto:sage [2018/03/23(金) 20:41:24.55 ID:qmCr5Czp0.net]
こういうのはネットで覚えたからどういう本に書いてあるかはわからん

777 名前: mailto:sage [2018/03/23(金) 20:45:34.35 ID:J4dYcx4H0.net]
>>750
手っ取り早いのは「マシン語」を書いてみる、マシン語(アセンブリ言語)のルーチンを C にリンクさせる、ていうのが王道ですが、
昨今はマシン語のいい教科書がない、という気がします

gcc のインラインアセンブラとかが有望だとは思いますが、まあ簡単にマシン語を記述している教材なんていうものが思いつかない、マシン語の需要というか動機がないのかもしれませんが

778 名前: mailto:sage [2018/03/23(金) 20:46:44.14 ID:J4dYcx4H0.net]
>>751
うーむ、たしかに static を「ヒープ」とは言わないかもしれませんね…

779 名前:デフォルトの名無しさん mailto:sage [2018/03/23(金) 20:47:37.33 ID:COiOJTLla.net]
>>753

ありがとうございました。
マシン語の本を探してみます。

>>752

ありがとうございました。
本に書いていない場合には仕方がないのでネットで調べてみることにします。

780 名前:はちみつ餃子 mailto:sage [2018/03/23(金) 22:32:48.28 ID:ehYNLgPn0.net]
どうだろ?
C++ の言語仕様的にはオブジェクトの寿命に違いがあるだけで、
それを実現するメカニズムについては詳細な規定があるわけではない。

まずは C++ のパラダイムの中で理解を深めれば自然に理解できるんじゃないの?
手を広げすぎても収集が付かなくなる気もするんだけどなぁ。



781 名前:デフォルトの名無しさん mailto:sage [2018/03/23(金) 22:56:58.27 ID:io4DvPx8a.net]
マシン語に手を出すのは飛躍しすぎだしやめといた方がいい。ある程度C++になれてより深く理解したいと思うようになってからがいいよ。

動的、静的は大雑把に言えば、コンパイル時つまりソースを書いた時点で決まるものを静的、実行時に変化するものを静的と呼ぶ。
変数の型とかメモリ領域の確保の仕方とか、いろんな文脈で使われる。

782 名前:デフォルトの名無しさん mailto:sage [2018/03/23(金) 22:57:57.59 ID:io4DvPx8a.net]
>>757
実行時に変化するのは動的でした

783 名前:デフォルトの名無しさん mailto:sage [2018/03/23(金) 23:15:38.28 ID:g9Gf634nM.net]
>>757
決まる、決まらないの主語は何でしょうか?

784 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 00:54:38.69 ID:LvcaB4Q+0.net]
メモリについて知りたいんならC言語から始めたら良い
Unixの移植目的で設計されたC言語は、実行効率のためほとんど必然的にメモリが透けて見える言語になったんである
『プログラミング言語C』という名著もある
これの後ろの方のmalloc()の実装サンプルまで通読したら
シングルCPUの範疇ならメモリについて嫌でもワカル

『プログラミング言語C++』と違って三日もあれば読めれる手頃な分量やしな!

785 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 01:27:57.09 ID:eFb1d56B0.net]
>>759
横だが。

何でも、だよ。
型なら静的型、動的型というし、メモリ確保なら静的確保、動的確保という。

マシン語は飛躍しすぎ。
CのエンハンスとしてC++を使うのならマシン語(インラインアセンブラ)もありだが、
C++をJava/C#/C++の並びで使うつもりならインラインアセンブラとか禁止でしょ。

というかそもそもその辺が分からない=全くの初心者がC++からやろうというのが間違い。
PythonかRubyあたりから始めとけ。(どっちも俺は知らんけど)

786 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 01:40:25.62 ID:nPxx/G4d0.net]
コンパイラがコンパイル時に決めるものが静的、出来上がったプログラムを実行した時に決まるのが動的
C++だとそういう理解の方がわかりやすいと思う

マクロ、テンプレート、constexpr、リテラル、式や変数や関数やクラスの宣言型なんかは静的
静的なものは全部コンパイラが決めるからプログラムの実行時にはいちいち計算しないし、バグで決められなかったらコンパイラが怒る

変数やインスタンスの中身、関数呼び出し、仮想クラスのオブジェクト型なんかは動的
実行環境や食わせた入力・ファイルなんかに依存するからプログラムを実行してみないと決まらない
動的なバグはコンパイラは感知できないから客先でプログラムを実行するとクラッシュする

適当だけどだいたいこんな感じ

787 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 02:04:25.06 ID:eFb1d56B0.net]
細かいようだが、

コンパイル時に確定=静的
実行時に確定=動的(=コンパイル時に確定できない)

で若干の例外(staticとか)があるが大体あってる。

「プログラミング言語C」はやめとけ。名著だが、あれは
「既にプログラミングを出来る人が、C言語を学ぶ」用であって、全くの初心者じゃ読めない。
「プログラミング言語C++」も止めとけ。あれも「既にCを使える人が…」で以下同文。
他本は総じてゴミなのも事実だが。

788 名前:デフォルトの名無しさん [2018/03/24(土) 02:06:26.05 ID:Z79Bg+7E0.net]
特定のアドレスにデータを配置して割り込みかける必要があるからじゃないだろか。

789 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 02:09:36.82 ID:nPxx/G4d0.net]
予約語のstaticは転用されまくってわけわからなくなってるので
「静的」とソースコード上のstaticは全く別物だと思った方がいい

790 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 02:15:26.90 ID:qYWJwKPe0.net]
その辺整理されないんだろうかね
そう言うものだという説明で
不本意ながら納得する事何十年



791 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 02:29:56.73 ID:eFb1d56B0.net]
そんなに混乱するか?例外としてしまって問題ないと思うが。
俺は規格には詳しくないが、(というより色々混ざってしまっているが)

・Cのstatic関数=ファイルスコープに限定、externの反対 --- (A)
 はC++ではなんとかされたのではなかったっけ?(どうせ使わないからどうでもいいが)
・staticクラス、あるいはクラスのstaticメソッド --- (B)
 は「静的」で矛盾しないから、そもそも問題ない。
・関数内static変数でプチグローバル(みたいなやつ) --- (C)
 も普通にクラスにしろ、って話でしかないし、使わないだろ。

結果、普通に使う分には特に混乱しないと思うが。
文法オタクは気にするのかもしれんが。

(C)は「動的関数にしよう」という意図があったのかもしれんが、
結局C/C++の世界は静的関数しかないから、意味無かったし。
というかそもそも俺は動的関数のメリットがよく分からん。
C#は動的関数だが、結局ロード/アンロードはアセンブリ単位=ほぼ起動時に纏めて、
であって、活用してない。
Javaは動的関数でメリットを享受してるんだっけ?(知らんから教えて)

792 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 02:33:41.17 ID:y/z0A0hW0.net]
https://ideone.com/Epp30z
お兄ちゃん助けて、コンパイルが通らないの。

VCで開発してます。
jsonのメモリーモデル研究にとりあえずシェアードPTRの組んでそれからやっぱユニークPTRの変更しました。
色々いじってるのですが、意味不明なエラーが出てさっぱりわかりません。
自前のコードなら自分でどうにかするのですが、コードステップするとライブラリの中でえらーおこしててさっぱりです。
どなたかご教示ください。お願いします。

793 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 02:46:21.51 ID:nPxx/G4d0.net]
std::vector<UniqueObject>にstd::pair<UniqueObject,UniqueObject>突っ込もうとしてんじゃん
ちゃんとエラーメッセージ読めよ

794 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 02:51:39.38 ID:y/z0A0hW0.net]
え?何行目ですか?そんなバカな・・・。え?

795 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 03:47:44.28 ID:jOWDr2Es0.net]
static関数は恐らくリンク工程がdynamicの場合があるため
それに対してのstaticなんだろな

796 名前:デフォルトの名無しさん [2018/03/24(土) 03:55:06.40 ID:Z79Bg+7E0.net]
毎回思うんだけど、なんでgccで勉強しようとするんだろうな。
エラーメッセージ読めと言われても読めるわけがない。
一番わかりにくいメッセージを出すコンパイラで勉強する子が不憫でならない。

797 名前:デフォルトの名無しさん [2018/03/24(土) 04:28:06.63 .net]
>>772
VCで開発って書いてんだろーが

798 名前:デフォルトの名無しさん [2018/03/24(土) 04:30:46.18 ID:Z79Bg+7E0.net]
確かに書いてあるな。
じゃあエラーメッセージ読めよ。

799 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 05:34:00.15 ID:GrrVfR010.net]
読む気のない奴は何使ってもダメだという良い例

800 名前:デフォルトの名無しさん [2018/03/24(土) 06:12:32.26 .net]
いつも大量のWarningが出るのを真面目に対処せず放置してるからErrorが出ても理解できない罠



801 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 06:12:34.93 ID:y/z0A0hW0.net]
https://ideone.com/FN5IrI

理屈の一つは多分。
イニシャライザーリストが要素をconstで構築するからmoveできない?
内部でconst_castするわけないしこれ詰んでない?

あるぅぇ〜。なんでじゃー。

802 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 06:25:04.10 ID:0qB0BmlJ0.net]
static_castの動作内容は翻訳時に全て確定する
dynamic_castの動作内容は実行時のvtableにより変化する

static_assertは翻訳時に検査を行う
assertは実行時に検査を行う

static link libraryは翻訳時に結合する
dynamic link libraryは実行時に読み込む

803 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 06:57:20.04 ID:XPzSeRia0.net]
どうやら >>741 の質問は C++ に限定した話ではないみたいだから、
C と C++ の両方を扱うスレッドに移動するのが良いんじゃないかな。

「Cの場合は…」「ここC++のスレッドだし」レベルの齟齬が避けられるし、
このスレッドを見てないC専門の人が有用な情報を持ってるかも知れん。


【初心者歓迎】C/C++室 Ver.102【環境依存OK】
ttp://mevius.5ch.net/test/read.cgi/tech/1509780815/

スレを勃てるまでもないC/C++の質問はここで 25
ttp://mevius.5ch.net/test/read.cgi/tech/1471100645/

804 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 09:00:52.23 ID:eFb1d56B0.net]
>>779
質問者はそれ以前の、プログラミング一般の「静的」「動的」の区別が付いてない。
スレ移動しても意味無い。というかどこのスレでも同じ。

C++のstaticは、Cのグダグダな仕様を引きずっているからおかしくなっているだけで、
C++で新たに設定されたstaticは他言語とも整合取れてる。
これに関しては「Cが悪い」でいいと思うよ。

説明している本が無いのは、そもそもそんなところで引っかからないだろう。
教習所でハイオクの話をしても意味無い。
一通り動く物を組めるようになるまではそれにフォーカスしろ、でいい。

805 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 09:28:18.28 ID:nPxx/G4d0.net]
静的動的の区別は大事だし引っかかりやすい所でもあるでしょ
テンプレート引数に変数突っ込んでなんで動かないのぉぉとか初心者はよくあるよ

説明してる本がないって本当か?本当なら世の本がクソすぎる

806 名前:デフォルトの名無しさん [2018/03/24(土) 10:20:48.01 ID:Z79Bg+7E0.net]
で、静的と動的の違いは何なんだよ。
ガンダムで説明してくれ。

807 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 10:26:44.70 ID:UtKAK1R90.net]
staticとauto

808 名前:デフォルトの名無しさん [2018/03/24(土) 10:38:33.14 ID:Z79Bg+7E0.net]
ガンダムで説明できないうちは理解できてることにならないぞ。

809 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 10:49:46.91 ID:jOWDr2Es0.net]
アインシュタインみたいなこと言ってんじゃねえよ

810 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 11:08:12.95 ID:aqtEECgt0.net]
ガンダム言語の表現力を信じろ



811 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 11:10:56.81 ID:eFb1d56B0.net]
>>784
じゃあお前が説明しろよ。
お前は馬鹿だから出来ないと思うがな。

そもそも>>764は誰向けのレスだよ?

812 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 11:18:43.16 ID:aqtEECgt0.net]
コーディング規約にchar aznable禁止っていうのを見たことあるから
C++にガンダム要素を入れるのはタブー

813 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 11:28:25.89 ID:eFb1d56B0.net]
>>781
> テンプレート引数に変数突っ込んでなんで動かないのぉぉとか初心者はよくあるよ
ねえよ

> 説明してる本がないって本当か?本当なら世の本がクソすぎる
世の本は概して糞だ。これは事実だ。

というかここら辺の認識がずれるのは世代ギャップだ。
現状の本を書いてきている世代は全員CをやってからC++をやっている。
だから「静的」「動的」の区別が付かない状態でテンプレートを触ることがなかった。
当然そこを解説した本もそんなにあるはずがない。

お前らの世代がCをやらずにいきなりC++を始め、それで色々苦労した経験があるのなら、
お前らの世代の連中が本を書かなければならない。ただそれ以前に、
俺はその必要(全くの初心者がCをやらずにC++を始める)があるとは思えないが。

入門書を書いている連中はプログラマでも宣教師でもなく、ただのテクニカルライタだ。
だから需要(売れる)があれば書くだけ。今無いのは需要がないと見られているから。
俺もこの見方については同意する。
最初のプログラミング言語がC++ってのは単純に選択を間違えてる。

814 名前:デフォルトの名無しさん [2018/03/24(土) 11:30:12.41 ID:Z79Bg+7E0.net]
C++とJavascript以外学ぶ必要があるとは思えない。

815 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 12:01:13.85 ID:3GLZsUhUM.net]
>>790
それはさすがに世間が狭すぎる
土方志望としてもJava程度は触っとけ

816 名前:デフォルトの名無しさん [2018/03/24(土) 12:18:09.21 ID:Z79Bg+7E0.net]
Javaは当初の理念を失ってしまったように感じる。

817 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 12:21:12.10 ID:aqtEECgt0.net]
JavaはJVM上で動く一言語に成り下がったからな

818 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 17:03:55.62 ID:nPxx/G4d0.net]
今からJavaやるくらいならC#にしとけ

819 名前:デフォルトの名無しさん [2018/03/24(土) 18:05:30.46 ID:upExxHyGa.net]
みなさん、ありがとうございました。

カーニハン他の本をまず読んでみようと思います。

>>794

そうなんですか?

Robert SedgewickらのAlgorithmsという教科書がJavaで書かれているため、
Javaの本も買って読んでいます。

ところで、学術的?な本では、オブジェクト指向言語としてC++かJavaが
大抵使われていますが、C#は使われていません。これはマイクロソフト
という一企業が設計した言語だからでしょうか?

820 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 18:06:22.88 ID:upExxHyGa.net]
たとえば、プログラミングコンテスト関係の本では大抵C++が使われています。



821 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 18:07:40.93 ID:upExxHyGa.net]
そういう理由から、本当はC++ではなくC# + Visual Studioを勉強したいのですが、
C++の本(ロベール)を買って読んでいます。

822 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 18:12:06.94 ID:aqtEECgt0.net]
そのうち大抵の言語は経験なくてもリファレンス片手に使えるようになるから好きなもん使え

823 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 18:12:52.16 ID:0qB0BmlJ0.net]
C++だって元々はAT&T製なんだが

824 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 18:20:10.81 ID:LkK69e8iM.net]
javaも神託に従わないと訴えられるという…

825 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 18:50:18.42 ID:eFb1d56B0.net]
>>797
なら素直にC#やっとけ。
その後に必要ならC++で何も問題ない。

C#は商業的につまずいたのでJavaほどの知名度はないが、
言語自体はJavaよりは断然いい。(後発だから当然だが)

826 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 19:07:41.38 ID:weQnYJFBd.net]
ねーねー。
STL作った人は、共産主義国で食中毒にあって、ベッドの上で朦朧とした頭で閃いたって話だった気がしたけど、どっかにその話のソースある?
ググっても見つからないよー

827 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 19:12:27.84 ID:UtKAK1R90.net]
神託は絶望の淵やタヒぬ直前に見えたりするもんやで

828 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 19:18:50.87 ID:LkK69e8iM.net]
>>802
見つけてきたぞ。何処かで発表か何かするの?
www.stlport.org/resources/StepanovUSA.html

ところでこのインタビューにあるtamagawa numberってなんだろう

829 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 19:25:16.65 ID:upExxHyGa.net]
玉河数

https://ja.wikipedia.org/wiki/%E7%8E%89%E6%B2%B3%E6%81%92%E5%A4%AB

に書いてありました。

830 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 19:30:46.97 ID:LkK69e8iM.net]
玉川数じゃ出てこないわけだ



831 名前:801 mailto:sage [2018/03/25(日) 06:55:48.47 ID:FlrNzX5dd.net]
皆様ありがとーございます。
論文の枕で書こうかと思いまして

832 名前:デフォルトの名無しさん mailto:sage [2018/03/25(日) 11:36:01.08 ID:Lywxeunja.net]
char* str = "abc";

とは書かずに、

const char* str = "abc";

と常に書くようにと本に書いてあります。

理由は文字列リテラルは直接書き換えてはいけないからであると書かれています。

●コンパイルは通っても、実行するとエラーになることもある。
●同じ内容の他の文字列リテラルまで書き換えられてしまうことがある。

とも書かれています。

禁止されているにもかかわらず、コンパイルが通る可能性があるというのはどういう
ことなのでしょうか?

(1)コンパイルエラーが発生
(2)コンパイルは通るが実行するとエラーが発生
(3)コンパイルは通り、実行してもエラーが発生しないが、同じ内容の他の文字列
リテラルまで書き換えられてしまうという不具合が起こることがある。

コンパイラーの設計者には、(1)、(2)、(3)の選択肢があるのはなぜでしょうか?

禁止されているのだから、一律にコンパイルエラーにするのが自然に思われます。 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)


833 名前:デフォルトの名無しさん mailto:sage [2018/03/25(日) 11:39:58.12 ID:Lywxeunja.net]
const char* str = "abc";
const char ca[] = {'a', 'b', 'c', '\0'};

の二つは同じことだと思っていましたが、これは違うということでしょうか?

const char* str = "abc";

では、"abc"をある場所に格納しておき、それを使いまわしたりすることがある
ということでしょうか?

例えば、

const char* str1 = "abc";

const char* str2 = "abc";

と書いたときに、 str1 == str2 になることがあるということでしょうか?

一方、

const char ca1[] = {'a', 'b', 'c', '\0'};
const char ca2[] = {'a', 'b', 'c', '\0'};

と書いた場合には、それぞれ、別に格納場所が確保されるということでしょうか? 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)


834 名前:デフォルトの名無しさん mailto:sage [2018/03/25(日) 11:41:04.91 ID:tMBl9Z88M.net]
>>808
>>469

835 名前:デフォルトの名無しさん mailto:sage [2018/03/25(日) 11:44:30.72 ID:Lywxeunja.net]
すみません。
カーニハンらの本の日本語版のp.127に書いてありました。

char amessage[] = "now is the time";
char *pmessage = "now is the time";

の違いについてです。

そして、文字列の内容を変えようとすると、その結果は不定となる

と書かれいます。なぜ不定としているのかについては理由は書いてありません。

836 名前:デフォルトの名無しさん mailto:sage [2018/03/25(日) 11:46:43.36 ID:Lywxeunja.net]
>>810

ありがとうございました。
故意に違反状態にするということもあるんですね。
正直言って無駄に分かりにくいところがあるんですね。

837 名前:デフォルトの名無しさん mailto:sage [2018/03/25(日) 12:26:26.43 ID:NNknxHvv0.net]
うん過去のもうメンテナンス不能なコードは膨大なんでそうするしか仕方ないんだよ

838 名前:デフォルトの名無しさん mailto:sage [2018/03/25(日) 12:40:02.16 ID:L+/M5ACh0.net]
以前にも同じ質問出たし荒しかとおもた

839 名前:デフォルトの名無しさん [2018/03/25(日) 13:01:03.23 .net]
C++相談室で出す話題でもなかろに

840 名前:デフォルトの名無しさん mailto:sage [2018/03/25(日) 13:06:46.65 ID:zn3nsIh00.net]
一応初心者向けのスレっていう体じゃなかったのか?



841 名前:デフォルトの名無しさん [2018/03/25(日) 13:52:43.26 .net]
ここか、

C言語なら俺に聞け 145
mevius.2ch.net/test/read.cgi/tech/1519046038/

せめてここ向きの質問だろう

【初心者歓迎】C/C++室 Ver.102【環境依存OK】
mevius.2ch.net/test/read.cgi/tech/1509780815/

842 名前:デフォルトの名無しさん mailto:sage [2018/03/25(日) 15:10:26.39 ID:9t80sXyiM.net]
>>811
旧K&Rつまり第一版は書換可能だったの

843 名前:デフォルトの名無しさん [2018/03/25(日) 15:22:53.51 .net]
C++スレでK&Rの話すんなや

844 名前:デフォルトの名無しさん mailto:sage [2018/03/25(日) 17:38:21.10 ID:S7OmeNGW0.net]
>>808
ISO/IEC14882:2017 C.1.1の段落3で
char* p = "abc"; // valid in C, invalid in C++
となっているので、C++ではコンパイルが通ってはいけない

なぜ通ることがあるのかというと、
JIS X3014:2003 D.4で
定値文字列からの暗黙変換 文字列リテラルに対し,定値から非定値へ暗黙変換することは,推奨しない(4.2参照)。
となっており、C++03に従う限りコンパイルは通ることになっていた名残だ

845 名前:デフォルトの名無しさん mailto:sage [2018/03/25(日) 17:59:44.09 ID:oI54xnZZ0.net]
するなと言われてもスーパーセットなんだからC言語の記法がどこまで通じるかは重大な問題だと思う

846 名前:デフォルトの名無しさん mailto:sage [2018/03/25(日) 18:24:54.69 ID:S7OmeNGW0.net]


847 名前:O「それは間違い」なんだが
本音ではそのとおり
[]
[ここ壊れてます]

848 名前:はちみつ餃子 mailto:sage [2018/03/25(日) 18:36:39.65 ID:vqcfoPV60.net]
>>821
スーパーセットにするというよりは、
つかず離れずというポジションかなぁ。
C++ が先にやったのを C で取り入れたことも有るし。

849 名前:デフォルトの名無しさん mailto:sage [2018/03/25(日) 18:55:57.82 ID:HW+VfLnzM.net]
可変長配列とか名前付きの構造体初期化とかc++に取り込まれたんだっけ?
スーパーセットは20年前にとっくに終わったんじゃないかと。

すでに導入されてたらスマソ

850 名前:はちみつ餃子 mailto:sage [2018/03/26(月) 05:22:15.91 ID:S9VCdiyC0.net]
>>824
たぶん入ってないな。

可変長配列 (VLA) って確か C でもオプショナルに格下げされてただろ。 (C11 から)
C++ のイニシャライザはだいぶん複雑になっちゃったから辻褄の合うようにするの大変だろうし、
もうやらないんじゃないかな。



851 名前:デフォルトの名無しさん mailto:sage [2018/03/26(月) 11:36:03.37 ID:pTR+m2Zc0.net]
実用レベルではほぼスーパーセットといっても差し支えない

852 名前:デフォルトの名無しさん [2018/03/26(月) 11:51:36.03 .net]
実用レベルではCがC++のサブセットだし🙄

853 名前:デフォルトの名無しさん mailto:sage [2018/03/26(月) 12:28:17.38 ID:tDSLT7/Xd.net]
実用レベル:=C++にも存在する機能に制限されたC

854 名前:デフォルトの名無しさん mailto:sage [2018/03/26(月) 22:04:18.63 ID:cCKTbT1E0.net]
C11の_GenericとかそれCで敢えてやる必要あるの?って思う

855 名前:デフォルトの名無しさん mailto:sage [2018/03/26(月) 23:52:36.66 ID:TogAHTIh0.net]
微妙に使い辛い機能だし分からんでもないけど、本当の名前がちゃんと見えてるのはちょっと安心感

856 名前:デフォルトの名無しさん mailto:sage [2018/03/26(月) 23:58:29.09 ID:bouVP8Z10.net]
>>829
スイッチで選択するのをスマートにした感じやな。
イマイチ〜〜。
テンプレート一個書いて複数にジェネレートさせる方が好み。

857 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 01:36:13.83 ID:tW2Kdf3t0.net]
あるクラスAのラッパークラスWで
A&を受け取る場合はWの全てのメソッドが使えて
const A&を受け取る場合はWのconstメソッドだけが使えるように制限する設計って
ありましたっけ?

858 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 01:42:41.92 ID:6oSpwfuc0.net]
おーばーらいど。

859 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 06:31:21.75 ID:m3riabwu0.net]
あとは operator -> でポインタ返すやり方とかだな

860 名前:デフォルトの名無しさん [2018/03/27(火) 06:53:48.55 .net]
>>832
制限っていうのは、コンパイルエラーにしたいの?



861 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 07:01:18.53 ID:tW2Kdf3t0.net]
A a0;
const A a1;
W w0(a0);//OK
W w1(a1);//NG
const W w2(a1);//OK
const W w3(a0);//OK
で、Wの非constメソッドには必ずconstメソッドが対応して存在している
みたいな

862 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 07:12:14.69 ID:6oSpwfuc0.net]
設計がダサい気がするけど、何に使うんだろう。

863 名前:デフォルトの名無しさん [2018/03/27(火) 07:35:02.82 .net]
>>836
NGっていうのは、コンパイルエラーにしたいの?

864 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 07:36:16.27 ID:tW2Kdf3t0.net]
>>838
そうですね

865 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 07:40:26.10 ID:ofLFYE4b0.net]
>>837
明確な欠点を指摘出来ない時に使う言葉だな
「ダサい」

866 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 11:34:17.37 ID:bA2HN2rY0.net]
クラスを
W
MutableW (変更可能なW)

と分けるのがよく使われる現実的な解だと思う
MutableW は W の派生型として実装すると楽

>>836
>で、Wの非constメソッドには必ずconstメソッドが対応して存在している

この部分は意味不明なので聞かなかったことにしておく

867 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 12:08:25.74 ID:tW2Kdf3t0.net]
なるほど、ありがとうございます

868 名前:はちみつ餃子 mailto:sage [2018/03/28(水) 16:37:44.82 ID:jJD3k2j80.net]
>>832
テンプレートにしておいて SFINAE で分岐するという方法はとれるが……。

869 名前:デフォルトの名無しさん mailto:sage [2018/03/28(水) 18:32:49.43 ID:rzqMRle+a.net]
C言語ってこんなので就職できるらしい…

【企業】「”C言語…?どこかで見た”程度でOK」 名古

870 名前:屋のアテック、求人広告が話題に エンジニアの人材不足、面白求人でカバーできる?
https://asahi.5ch.net/test/read.cgi/newsplus/1522229305/

本物のC++プログラマーを募集してる某社とはえらい違いだな
[]
[ここ壊れてます]



871 名前:デフォルトの名無しさん mailto:sage [2018/03/28(水) 20:11:10.89 ID:nsQQ2hCk0.net]
永久にPHP弄らせる要員としては十分

872 名前:デフォルトの名無しさん [2018/03/28(水) 20:50:12.70 .net]
>>844
言語ヲタなんてプロジェクトに一人いれば十分だし

兵隊は言語の知識よりコミュニケーション能力、報連相、Excel方眼紙スキルが大事よ

873 名前:デフォルトの名無しさん mailto:sage [2018/03/28(水) 20:55:08.40 ID:NO5LUaew0.net]
上司を黙らせるスキルでしょ
盛らないでね

874 名前:デフォルトの名無しさん mailto:sage [2018/03/28(水) 22:09:32.87 ID:nsQQ2hCk0.net]
会社員なのだから上司が納得することだけが重要

875 名前:デフォルトの名無しさん [2018/03/28(水) 22:29:42.33 .net]
上司なんか関係ないやろ

お客さんを味方に付けることや

876 名前:デフォルトの名無しさん mailto:sage [2018/03/28(水) 22:33:35.60 ID:fYzIlbdt0.net]
関係あるだろ

877 名前:デフォルトの名無しさん [2018/03/28(水) 22:46:49.55 ID:2H+8IznE0.net]
上司も客も関係無いよバカども
プログラミングの話だバカども

878 名前:はちみつ餃子 mailto:sage [2018/03/28(水) 23:56:58.42 ID:jJD3k2j80.net]
マ板でやれ

879 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 00:40:46.75 ID:zCjdEvGWM.net]
visualstudio2017 Win32アプリケーションでSQLiteを使いたいのですが
Nugetにそれらしきものが合ったのでインストールしようとしたのですが以下のエラーでインストールできません。
https://www.nuget.org/packages/SQLite/

パッケージ 'SQLite 3.13.0' をインストールできませんでした。このパッケージを 'native,Version=v0.0' を対象とするプロジェクトにインストールしようとしていますが、
そのフレームワークと互換性があるアセンブリ参照またはコンテンツ ファイルがパッケージに含まれていません。

どうすればよいのでしょうか。

880 名前:デフォルトの名無しさん [2018/03/29(木) 00:42:57.97 ID:+dX3Weor0.net]
CoAppのタイムスタンプ調べてみて。
NuGetは捨てろ。



881 名前:デフォルトの名無しさん [2018/03/29(木) 00:48:50.94 ID:+dX3Weor0.net]
代わりに何を使うか。
VCPKG。
ただし、MSは三年後にVCPKGも捨てているだろう。
逆に我々がVSを捨てる時期に来ている。

882 名前:デフォルトの名無しさん [2018/03/29(木) 00:53:15.59 ID:+dX3Weor0.net]
MSの方針としてC++を捨ててC#に移行させるというのがあって、C++ユーザーはあの手この手で改宗を迫られる。
もはやVSでC++は苦行。
というか、WindowsでC++が苦行。

883 名前:デフォルトの名無しさん [2018/03/29(木) 00:55:08.86 ID:+dX3Weor0.net]
C++を捨ててC#に移行するか、Windowsを捨ててOSXかLinuxに移行するか。
二択。
WindowsではC#が正解。
なぜならMSがそれを望んでいるから。

884 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 01:05:50.70 ID:xx4XvERn0.net]
C++のチームも頑張って更新してるけどな
IDEとコンパイラは十分なのに
・パッケージマネージャーがクソ
・再起動しないとPATHが更新されない
・VSのプロジェクトが用意されていないとビルドが面倒
と環境が整備されてなさすぎる

885 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 01:09:04.86 ID:y/yCqDtn0.net]
C# + C++/CLI + C++
という選択肢

886 名前:デフォルトの名無しさん [2018/03/29(木) 01:14:03.03 ID:+dX3Weor0.net]
我々が間違っている公算も高い。
我々はC++を使いこなせる。
だから、C++なら簡単にできるのになぜそうしない?と思ってしまうが、これから学ぶならC#のほうが簡単だろう。
MSがC#を推すのは正しいのかもしれない。

887 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 01:20:39.82 ID:xx4XvERn0.net]
C#はビジネス用だから
より早く大量にコードを生産することを目的としているからC++とは用途が違う

888 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 02:12:12.07 ID:Hc4kPWXM0.net]
Android でも iPhone でも Windows でも使える共通部分のコードは c++ で、
ってのを C# に変えたいのかもしれんが
別段 c++ で不自由ないしなあ…

てか c# って .Net のイメージ強すぎて単体で使える気がまるでしない

889 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 03:27:22.16 ID:T1PPEJjr0.net]
未だにproperty実装出来ていないC++標準仕様が異常なんだぜ
そりゃMSも堪忍の尾が切れるってもんだぜ

890 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 04:16:13.07 ID:Ng8O1HeK0.net]
ら、ライブラリで実装できるから・・・。
ちなみに、プロパティっぽい提案は過去出てるが、全くテーブルに乗らない。



891 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 04:45:16.84 ID:xx4XvERn0.net]
誰もプロパティを欲していないのである

892 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 06:44:05.72 ID:izMMXIg60.net]
俺も欲しくない
コスト予測し辛杉デフ

893 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 07:38:47.09 ID:LRHKAKcy0.net]
C#はいい言語だよ
Linq便利だし

ただC++とは用途が違うってだけ

894 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 08:06:33.99 ID:qluMmKIH0.net]
何度聞いてもプロパティが欲しいという思いが沸かないんだが

895 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 08:10:21.70 ID:FDAIDKLE0.net]
ウィンドーズホンでネイティブC++とC++/CXの間を取り持つwrapperを書くのに使う
Wrapperを書くのに便利

896 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 10:37:15.71 ID:+tUOh99Na.net]
プロパティが使えたらMFCのような糞環境でUpdateDataを使わなくてよくなる

プロパティに代入で表示が変わり
プロパティからそのまま値が取り出せる

897 名前:デフォルトの名無しさん [2018/03/29(木) 10:39:27.42 ID:+dX3Weor0.net]
しかしVisual Studioは何だってUTF-8で保存されるのをそんなに嫌うんだろうか。
あの手この手でUTF-8で保存するのを妨害してくるけど。

898 名前:デフォルトの名無しさん [2018/03/29(木) 10:40:42.80 ID:+dX3Weor0.net]
VSで開発してLinuxに移植されるのを嫌がってるんだろうかね。
その割にはgdbと接続できるようにしてるし。

899 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 10:47:23.77 ID:Hc4kPWXM0.net]
>>870
ナイナイ
今だって setFoo() だの getFoo() だの実装すりゃできるけど初学者以外はやらないだろ?
実装するにも使うにも効率が悪いからね。

900 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 10:47:32.92 ID:+dsdqxPO0.net]
>>870
それはsetter/getterではできないことなんだな?



901 名前:デフォルトの名無しさん [2018/03/29(木) 10:57:10.36 ID:HNpF58Nud.net]
a.Hoge+=100;
みたいな事をできて便利だなと思うことはあるけど無けりゃないでいいわレベル

902 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 11:06:30.37 ID:q+sj+Afe0.net]
プロパティはメソッドともフィールドとも区別できるメタデータとしての活用が唯一の動機なんだが
結局のところ実行時の型システムまで整備しないととただの構文糖だしなあ

903 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 11:06:41.49 ID:+tUOh99Na.net]
>>874
A.Width+=20;

A.setWidth(A.getWidth()+20);

どっちがいい?;

904 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 11:10:04.25 ID:jtsbgEO5a.net]
>>877
後者の方が好きだな

905 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 11:14:39.59 ID:+tUOh99Na.net]
a.value++とかif(a.Width==100)とか
普通に書けるものをわざわざgetter setter書きたいんだな
変ってる

906 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 11:32:58.49 ID:Hc4kPWXM0.net]
UI とのバインディングを失笑されたら
シンタックスシュガーでこんなに楽にかける!と主張し始めたよw
そりゃ楽にかけて便利だよな。
そのためのものだもの。そこは同意する

907 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 11:35:30.24 ID:+tUOh99Na.net]
GUIだけじゃなくて他にも使えるというか
他がメイン

908 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 12:12:32.14 ID:xx4XvERn0.net]
>>879
そういう風にお手軽にメンバを書き換えるのは事故のもとなのでやめましょうってことでめんどくさくしたのに
戦争を知らない世代みたいな
現状でもa.value()++とかif(a.Width()==100)でできるしな
これまでのコードとの一貫性を破壊してなおかつ年代物のコンパイラに更に複雑なパースをさせて得られるものがちょっと括弧を省略するだけとは

909 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 12:14:06.74 ID:mREgEFijd.net]
プロパティのメリットは最初publicで適当に実装しといても後からgetter/setter付きのprivateに変えれる所じゃない?

910 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 12:18:25.09 ID:xx4XvERn0.net]
変数がない状態でもテストに通るように作るべきだからpublicで変数を持たせる機会が一瞬もない



911 名前:デフォルトの名無しさん [2018/03/29(木) 12:18:48.50 ID:+dX3Weor0.net]
C++builderってプロパティなかったっけ。
たいそう便利だったような気がするのだが、思い違いだろか。

912 名前:デフォルトの名無しさん [2018/03/29(木) 12:19:57.65 ID:+dX3Weor0.net]
そもそも最近のGUIビルダってC++ビルダーの影響受けまくってるような感じがする。

913 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 12:20:28.54 ID:ONnwnPbh0.net]
トップダウンで理想から考えるのが早い
どういう風に書ければ満足するんだ

914 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 12:26:29.79 ID:f5JOZCzba.net]
>>882
パースが面倒になるとは思えない
変数と同じ使い方なんだから変数のようにパースするだけだと思うが…

それにお前はコンパイラつくらないじゃん

915 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 12:28:52.39 ID:f5JOZCzba.net]
c++0x()以降の理念で仕様策定だけしたらいいじゃん
基本機能を妨げないように仕様追加

使うかどうかは本人次第
誰も強制しない

916 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 12:30:14.95 ID:f5JOZCzba.net]
拡張forもautoも馬鹿みたいに文句言ってたけど今でも使うなって言う人はいるのかな

917 名前:デフォルトの名無しさん [2018/03/29(木) 12:31:30.92 ID:+dX3Weor0.net]
使うな!

918 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 12:31:44.70 ID:f5JOZCzba.net]
わかりました使いません…

919 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 12:59:19.47 ID:mREgEFijd.net]
頭かったwwww

920 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 13:03:56.15 ID:xx4XvERn0.net]
>>888
これらを採択する人の中にGCCやMSVCの人がいないわけないじゃん
関数として扱うのか、変数として扱うのか決めなきゃいけない
そしてどうやってポインタをとるのかなど色々な問題がある
そしてさっきも言ったけど括弧を少し減らせるだけでできることが増えるわけじゃないというのが最大の問題



921 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 13:16:13.95 ID:f5JOZCzba.net]
得意げにご高説を垂れ流してる最中に申し訳ありませんが

a.value++;

a.value()++;
は別物
あえてみんなスルーしてくれてるのに

922 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 13:20:41.15 ID:ng76gyv10.net]
>>895
参照返しなら同じでは?

923 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 13:33:25.09 ID:f5JOZCzba.net]
ん?
参照した値を変えるとGUIの表示とか更新してくれんの?
getterとsetterあったとして実行してくれんの?

a.width()とa.widthが同じgetter的な動作してくれるのはわかるけど

924 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 13:38:37.15 ID:mREgEFijd.net]
アンチプロパティの人なんでそんなに必死なん?

925 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 13:47:08.78 ID:xx4XvERn0.net]
>>897
プロキシクラス

926 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 14:39:11.63 ID:BTFPAIj5d.net]
GUIの表示を更新するように作れば更新される

927 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 14:39:13.31 ID:DoW8QBEn0.net]
a.value()++; が参照返しとかどんだけヘボいんだよw
リファレンサのprvalueだろjk

928 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 15:02:55.47 ID:f5JOZCzba.net]
プロパティ不要とは言うけどそもそものプロパティの仕組みと効果はわかってないんだね
こんな人ばかり

929 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 15:57:57.60 ID:or4Xspy50.net]
何スレか前にもプロパティの議論あったんだけどね・・
少なくともgetter/setterを自動生成する、みたいなクソな機能ではないぞ

930 名前:はちみつ餃子 mailto:sage [2018/03/29(木) 16:02:08.91 ID:frx7qa9h0.net]
俺もそのとき発言してた
https://mevius.5ch.net/test/read.cgi/tech/1490917669/683



931 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 17:26:54.17 ID:T1PPEJjr0.net]
>>885
Builderだけtry-finallyセクション使えたり次元が違う希ガス

932 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 20:10:56.09 ID:LRHKAKcy0.net]
>>877
A.extendWidth(20);

それを書くことが便利で必要なクラスだったらそういう操作を作るべきだな

933 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 21:38:46.24 ID:1OB4BLGUM.net]
>>885
あったよ
>>905も含めて当時はネイティブコードを吐くC#みたいな感じだった
もう少し頑張れるかと思ったけど、Visual Studioの便利さに負けたと思ってる

934 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 21:46:54.75 ID:6IJhuxisM.net]
カーンを首にしてアプリ側に振ったのが敗因だったな
膨大なdbaseの資産も全く使えなかったのはNetaWareと
同じだった

935 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 01:25:11.99 ID:6elBmHqP0.net]
>>903
え、違うの?

936 名前:はちみつ餃子 mailto:sage [2018/03/30(金) 04:42:18.00 ID:AQ2aJRgB0.net]
>>909
違うよ。
デフォルトでのゲッタ/セッタを提供したりすることはあるけども、 >>904 で言及している通り「変数に見せかける」機能。

937 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 06:43:57.86 ID:MnRWcQoLM.net]
そもそも変数に見せかけると言うプロパティ自体の話とgetter/setterの自動生成の話は全く別物で>>903で比較してる意味がわからん
たぶん本人もちゃんと理解できてないんだろうな...

938 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 07:46:44.11 ID:QwXbOxz8M.net]
>>906
例えば座標なら+=使えた方が楽じゃね

939 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 08:33:24.78 ID:x9Ml4xAFM.net]
>>910
なんだそういうことか。それも含めて単なる自動生成だと認識してたよ。

940 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 08:34:01.73 ID:trt/A0j+0.net]
そうやってソフトが重くなって行くわけだな

数値の += なんて軽いと思って何度も呼んだら
実は描画や保存も何度も呼ばれてしまうとか



941 名前:デフォルトの名無しさん [2018/03/30(金) 08:42:16.05 ID:u8hlmR9G0.net]
それはプロパティに限った問題ではないな

942 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 08:45:16.06 ID:+sennHugd.net]
プロパティってそれ単体で取り出せるの?
それなら使えるな

943 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 08:52:02.87 ID:HVaF4kSpd.net]
呼ばれる側 : そんな何度も呼ばれるとは思わなかった
呼ぶ側 : 重いとは思わなかった

944 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 09:52:35.47 ID:mPLnga/50.net]
少なくともAdd()なら何かしらの関数を呼んでいることはわかる

945 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 11:31:23.82 ID:3ziE5qsO0.net]
プロパティでもなんらかの関数が含んでいることはわかるが

946 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 11:45:01.30 ID:mPLnga/50.net]
それがただの変数なのかプロパティなのかは調べるまでわからない

947 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 11:57:28.30 ID:27QTfa4qd.net]
調べろよ

948 名前:デフォルトの名無しさん [2018/03/30(金) 11:58:36.02 ID:u8hlmR9G0.net]
変数でも演算子がオーバーロードされてる場合もあるからな
結局調べないとダメ

949 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 12:01:32.59 ID:27QTfa4qd.net]
っていうか>>884いわく、publicな変数は有り得ないらしいし、そういう運用してるなら考えるまでもなくプロパティじゃん

950 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 15:53:31.37 ID:l98ixrSj0.net]
>>911
お前のレスの意味がわからん
実際C#もソースコード公開されてるソフトの改造程度にしか触ったことないんでちゃんと理解してないが
getter/setterの自動生成するだけのクソ機能と誤解してる人がこのスレでも前スレでも見られたから
>>903を書いただけなんだが

というか書き込む前の1〜2レスすら読めんのかお前は



951 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 17:21:54.28 ID:6y8tfNRe0.net]
C++erが通常prvalueで返しているリファレンサを、データメンバにするってことなら
テンポラリを作らなくなる分、速度的なメリットはありそうだな

# でも、俺はイヤだな
# データメンバがドカドカ増えるのがなんか気持ち悪い
# 慣れの問題っちゃそうかも知れんが

952 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 17:39:33.77 ID:+sennHugd.net]
>>899
言いたいことがわかった気がする

953 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 17:42:52.50 ID:HVaF4kSpd.net]
やっとかよ

954 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 20:19:26.33 ID:MnRWcQoLM.net]
>>924
だからそんな誤解してるのはお前と同レベルのバカだけだろ w
言語仕様の話とIDEの機能の区別もつかないアホなんて放置でいい

955 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 20:30:23.19 ID:3ziE5qsO0.net]
自分から絡んで行ってバカ呼ばわりとはこれいかに

956 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 20:51:58.09 ID:MnRWcQoLM.net]
またバカが絡んできたよ w

957 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 20:59:28.09 ID:l98ixrSj0.net]
>>928
いや、なんか根本的に誤解されてる気がするが
C#とかだと、多分プロパティ作ると自動である程度書いてくれるんだろうけど
その話じゃなくて「C++におけるpublicなGetXX(), SetXX()が暗黙的に作られる(だけ)」、みたいな誤解
(C#やBuilder知らずに議論をぱっと見するとそういう誤解しがち、俺も以前はしてたが)
があるんだよな
説明不足だったかもしれんけどIDEの支援機能の話ではない

というか前スレのリンクにあったブログの
ufcpp.net/study/csharp/oo_property.html?key=property#property
これが個人的にはわかりやすかった

958 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 21:21:54.96 ID:FlBD8vqz0.net]
Javaのイメージなのかな?
あれはJavaBeansとかいうゴミ規約のせいで本当にGetXX()とSetXX()を作るだけのゴミ機能がIDEに標準装備だったりする

959 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 21:27:33.97 ID:3ziE5qsO0.net]
まあプロパティある言語触ったことないやつは勉強不足だから無視していいって言うのは一理ある

960 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 21:59:35.93 ID:trt/A0j+0.net]
>>931
現状のメンバへの代入や値取得が
暗黙的に作られるgetter/setter

プロパティが採用されてもこの辺はなんら変わらないかと



961 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 22:16:15.58 ID:8D6duvwPM.net]
お前らの書き込み見ると、プロパティがものすごい大発明なんじゃないかと錯覚するけど
変数のようにかける件を含めても糖衣構文以上のものじゃないだろ。
+=したけりゃそういうプロキシ書けばいい。

962 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 22:21:10.98 ID:trt/A0j+0.net]
お前らってだれだよ
一人だけだろプロパティ信者

963 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 22:25:41.11 ID:trt/A0j+0.net]
これ以上言語機能を増やさなくて良い
コンパイラが規格に追い付いてなくて互換性が崩れる

964 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 22:28:08.90 ID:FlBD8vqz0.net]
クソ機能というわけではないが、ものすごく便利というわけでもない
あればあったで使うけど、ないならないで困らないし、言語設計として採用するしないの判断はどっちもあり
C++は採用しない判断をした

その程度の話

965 名前:デフォルトの名無しさん [2018/03/30(金) 23:12:27.73 .net]
実体が関数なら漢らしく見た目も関数にしろよwww

見た目が変数なのに処理が走るとか、見た目が割り算なのに文字列連結するとか変態野郎は死にくされやwwwww

966 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 23:32:31.76 ID:l98ixrSj0.net]
その辺はC++のコンストラクタ・デストラクタに嫌悪感を示すCユーザーが昔よく言ってた台詞と似てるw
「裏で何が起きてるかわかりづらいから嫌だ」、とかね
別に本気でプロパティ推してるわけじゃないが、いざプロキシクラスで代用しようとするとめんどい
ETなんかを仲介するとテンプレートの実体化の数でコンパイラへの負担がデカいし、
メンバ関数の呼び出しをサポートしようとすると継承が必要になるし・・・それなりに問題点はある

967 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 23:40:02.53 ID:vpP76l93d.net]
>>935
大発明じゃなくて、もはや常識。C++にはないって聞いて最初驚いたもん
いやまあたしかになくてもいいんだけど、演算子オーバロードはあるのにプロパティはないって変な言語だわ

968 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 23:41:38.85 ID:vpP76l93d.net]
>>939
それiostremディスってんの?

969 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 00:11:17.76 ID:o3PNwIlC0.net]
>>941
お前が驚くと凄いことなん?

970 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 00:12:18.16 ID:aFk+9CH40.net]
>>942
>>942はiostreamを擁護する気か



971 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 00:19:06.77 ID:iyPH7JTK0.net]
ダイヤモンド継承使われてるんだっけ
あれ使ったことないな
いらない機能だと思うなら使わないってだけだしプロパティはあった方がらくだと思うけどね
独自拡張でつけてるのもあるし

972 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 00:25:31.98 ID:NJ7AGlMvd.net]
>>943
凄くないよ
>>944
すまん。適当書いたけどiostremは擁護出来ねえわ

973 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 00:47:52.27 ID:C63IJ9vb0.net]
iostreamの<<チェーンが実は最近まで規格上未定義動作だった話は正直呆れた

974 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 01:02:47.99 ID:19OTzhSN0.net]
採択されてもプロパティのアドレスをどうやって取るのかっていうことで標準化委員会で揉めて10年は停滞する

975 名前:はちみつ餃子 mailto:sage [2018/03/31(土) 01:48:24.57 ID:nFIfPX7B0.net]
>>948
サブオブジェクトがユニークアドレスを取れなくてもいいことを示す [[no_unique_address]] 属性が C++20 のドラフトに入った。
www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0840r1.html
オブジェクトがユニークなアドレスを持つ原則を捨てたわけ。

これを踏襲するなら、プロパティのアドレスは取れないってことにして解決するのが自然で、揉める余地はそんなにないと思う。
実際にアドレスは存在しないわけだし、存在しないものを返しようがないじゃん。

976 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 02:09:16.31 ID:19OTzhSN0.net]
>>949
最初のプロパティの提案がいつかはしらないけど
実際にこれが決まったとして最短で2020年
そこから更に何年かかるのか

977 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 04:29:43.55 ID:O6Ruc86y0.net]
抽象クラス"Super"から派生した子クラス、"A", "B", "C"があったとします。

Super* obj1 = new A();
Super* obj2 = new B();
Super* obj3 = new C();

訳あって動的に作成したインスタンスobj1〜3を一度deleteしたのち
再び同じ子クラスでインスタンスを作成しようと思います。

obj2がクラスBのインスタンスであることが一目で分からない場合に
obj2がクラスBのインスタンスであることを突き止め、一度deleteし、
再度クラスBでインスタンスを作成する方法はあるでしょうか?

ちなみに必死に考えて考えついた方法ですが
クラスA, B, Cにそれぞれ「私はAクラスです」「私はBクラスです」みたいな
文字列を出力する共通メソッドをpublicで作成し、そのメソッドを実行して
帰ってきた文字列からそれがどのクラスのインスタンスか判別が付くのではないかなと思いました。
決してスマートな方法とは言えませんが・・・

もっとスマートな方法はありますか?

978 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 04:37:13.22 ID:350O8bDz0.net]
・・・?
typeidじゃアカンの?

979 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 05:55:27.21 ID:15qJIIAA0.net]
class B : public Super
{
public:
Super* re_new() override
{
delete this;
return new B{};
}
};

980 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 06:37:47.25 ID:C63IJ9vb0.net]
>>949
単純に &obj.int_prop と書いた時に、この式の型と値をどうするかは難しい問題じゃない?
intの一時オブジェクトへのポインタ、intのぬるぽ、int_propのgetterへの関数メンバポインタ、ill-formed
どれも問題あると思う



981 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 06:47:39.87 ID:8va89mAu0.net]
プロパティを関数として実装したら関数のアドレスは取れるんじゃないかなぁ。はぁ、実装依存ですか。

982 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 08:02:21.38 ID:5h07DQhTa.net]
>>951
全然スマートじゃないがvisitorパターン使えば?

983 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:03:59.00 ID:OaeapR1O0.net]
>>954
> 単純に &obj.int_prop と書いた時に、この式の型と値をどうするかは難しい問題じゃない?
エラーにしちゃえばいいだろ

984 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:14:46.66 ID:HGehdmya0.net]
つまり意識しなきゃならんてことか
じゃあ素直に関数にしろよ

985 名前:はちみつ餃子 mailto:sage [2018/03/31(土) 09:16:04.32 ID:nFIfPX7B0.net]
>>954
一時オブジェクトへのポインタってことにする一択だと思うけどなぁ。

あくまでも「変数に見せかける」、
つまりは、ゲッタの呼出しに構文糖を付けて見かけ上だけ変数 (データメンバ) っぽいって立場を貫かないと、
余計な気を回してもわかり難さが増すだけだよ。
rvalue なのは仕方がない。

986 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:16:21.25 ID:Nj0xu+770.net]
どうしてアドレスを取りたがるのかよくわからない
クラスのメンバ関数だってアドレス取れないだろ

987 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:18:00.18 ID:Nj0xu+770.net]
ああメンバ仮想関数な

988 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:18:37.44 ID:8va89mAu0.net]
>>960
メンバ関数のポインタ構文が何故あるのですか?

989 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:18:44.11 ID:8va89mAu0.net]
あー。

990 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:22:26.84 ID:Nj0xu+770.net]
訂正しただろ
仮想関数はアドレスが取れないだろ



991 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:23:29.95 ID:15qJIIAA0.net]
取れるよ、何言ってんの
そのポインタは動的結合までできる優れもの

992 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:25:45.36 ID:Nj0xu+770.net]
出来ないよ
何いってんの

993 名前:はちみつ餃子 mailto:sage [2018/03/31(土) 09:26:00.49 ID:nFIfPX7B0.net]
>>960
変数に見せかける以上は変数と同じようにふるまうことを期待するってのは普通の要求じゃないか?
データメンバに対して操作するテンプレートはプロパティを操作するテンプレートとしても使えて欲しい。
でもまあ充分に「見せかける」ことが出来ないのなら問答無用でエラーになった方がマシではあるかもしれん。

994 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:41:17.12 ID:C63IJ9vb0.net]
objがlvalueなのにobj.int_propがrvalueになるのはまずいと思うんだよなあ
うっかり関数の戻り値でその参照なんか返そうものなら相当わかりにくいバグになる
C#とかはその辺の問題どう解決してるのかしらね

995 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:48:31.98 ID:Nj0xu+770.net]
property int count {
>>() {return count_ ; } // getter
<<(int cnt) {SetCount(cnt):} // setter
&() {return &count_;} // address getter
};
みたいにアドレス抽出用のメソッドを追加すりゃ良いだけのような気がする

996 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 10:00:37.36 ID:HGehdmya0.net]
コードを減らす為の規格追加でコードを増やす解決法

う〜ん

997 名前:はちみつ餃子 mailto:sage [2018/03/31(土) 10:21:02.77 ID:nFIfPX7B0.net]
>>970
これは抽象化の話なんだよ。
変数のように見せかけるためには何が必要かって話なの。

998 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 10:29:50.12 ID:15qJIIAA0.net]
>>966
https://ideone.com/1J8uwf

999 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 10:35:19.80 ID:Nj0xu+770.net]
property int count {
() {return count_ ; } // getter
=(int cnt) {SetCount(cnt):} // setter
&() {return &count_;} // address getter
++() {return ++count; } // incrementer
}
この方がしっくり来るな

1000 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 10:56:40.26 ID:aygih7Tkd.net]
予約語を増やすとどれだけの影響があるか
なんて考えたことはないのかな?



1001 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 10:57:47.19 ID:aygih7Tkd.net]
まあここはC++相談室
おれが考えた最強言語を語るところじゃない

1002 名前:はちみつ餃子 mailto:sage [2018/03/31(土) 11:05:17.81 ID:nFIfPX7B0.net]
opaque definition でゲッタを定義できるように拡張すればプロパティ専用の構文を導入する必要なく
プロパティを実現できるのではないかと妄想していた。

1003 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 11:10:24.41 ID:Nj0xu+770.net]
using count = int {
() {return count_ ; } // getter
=(int cnt) {SetCount(cnt):} // setter
&() {return &count_;} // address getter
++() {return ++count; } // incrementer
};
予約語増やさないならこんな感じに書けなくもない

1004 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 11:21:25.52 ID:Pb+ZodvD0.net]
プロパティの実装の議論までここでするか?
Dと同じでいいじゃん

1005 名前:はちみつ餃子 mailto:sage [2018/03/31(土) 11:23:19.53 ID:nFIfPX7B0.net]
前提が違うものを同じには出来ないよ。
参考にすることはあると思うけど。

1006 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 12:19:04.21 ID:+mjd8c8id.net]
仮想関数のアドレスが取れないという発言は何だったんだろう

1007 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 13:29:05.67 ID:19OTzhSN0.net]
>>951
std::pair<Super*,std::string> obj2 = std::make_pair(new B(), "ClassB");

1008 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 13:32:44.21 ID:aygih7Tkd.net]
スレチ
次スレまで引きずるなよ

1009 名前:デフォルトの名無しさん [2018/03/31(土) 13:50:16.75 .net]
>>951
クラスA, B, Cにそれぞれ自分自身のインスタンスを生成するstaticメソッドを用意し、
そのstaticメソッドへのポインタを返す共通メソッドを用意する。

1010 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 14:23:30.31 ID:aFk+9CH40.net]
リフレクションがある言語でGUIの画面またはユーザーコントロール



1011 名前:作成する際に
YSIWYGで作ることをやれるIDEを作りたい、というときに、メンバー関数とプロパティーの2種類あったら便利なのや

C++にプロパティー入れたらリフレクションも来るでこれは…

もっとも上記課題解決のための技術は10年も前にWPFの登場で丸ごと過去の技術やがな…
[]
[ここ壊れてます]

1012 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 14:30:32.65 ID:aFk+9CH40.net]
ていうかWPFのコンバーターの書き方とか、メンバ関数に逆戻りやぞ…
(IValueConverter.Convert(), IValueConverter.ConvertBack(),
 IMultiValueConverter.Conver(), IMultiValueConverter.ConvertBack(), ...

1013 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 15:43:53.79 ID:UG1yVXDXa.net]
リフレクションはゴミとまで言わないけどc++にはいらない機能

1014 名前:デフォルトの名無しさん [2018/03/31(土) 16:09:17.20 ID:D1vbg0pQ0.net]
リフレクションがあれば死なずに済んだ人もいるだろうに。

1015 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 16:37:26.06 ID:UG1yVXDXa.net]
デバッグでリフレクション使うのか?

1016 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 20:24:42.16 ID:o3PNwIlC0.net]
C++相談室 part135
mevius.5ch.net/test/read.cgi/tech/1522495206/

もう糞テンプレいらないよね?
あと死ね

1017 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 22:27:57.63 ID:u+oLKOIo0.net]
うむごくろう。

1018 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 18:13:20.31 ID:JVL2cf0wa.net]
c++のfriendはprivateメンバーすべてにアクセスできてしまうけど特定の変数だけ、もしくは特定の関数だけfriendにする事は可能でしょうか?

1019 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 18:43:04.30 ID:nEv6CmIlM.net]
>>991
ピンプるか、○○って俺の友達の友達なんだぜーにしてしまうか、かなー

1020 名前:デフォルトの名無しさん [2018/04/01(日) 19:11:40.34 ID:BG5JJopwa.net]
pimplイデオムはなんとなくわかるけど、俺の友達の友達は編集したい対象を別のクラスに分けてしまうこと?



1021 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 20:21:44.04 ID:WPbk7cUz0.net]
そういえばシステムハンガリアンはしばしば批判されるのに、pimplのpは批判されているのを見たことがないな。

1022 名前:はちみつ餃子 mailto:sage [2018/04/01(日) 21:12:28.11 ID:47FEpc5z0.net]
https://www.google.com/search?q=%E5%8D%8A%E5%88%88%E3%82%8A&tbm=isch

1023 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 22:32:25.37 ID:EwuQ9U5u0.net]
(餃子が (御乱心 (されたぞー)))

1024 名前:はちみつ餃子 mailto:sage [2018/04/01(日) 23:03:08.00 ID:47FEpc5z0.net]
>>996
そこは「ハンガリアンじゃなくて半刈りやん」って言って欲しかった。

1025 名前:デフォルトの名無しさん mailto:sage [2018/04/02(月) 07:54:09.78 ID:t04teqlda.net]
いやいやこんなの丸刈りやん

1026 名前:デフォルトの名無しさん mailto:sage [2018/04/02(月) 09:36:33.18 ID:E1iWIfmB0.net]
>>984
YSIWYGってなに?

1027 名前:デフォルトの名無しさん [2018/04/02(月) 11:52:25.29 .net]
>>999
WYSIWYGのtypoなだけやん
アスペか

1028 名前:デフォルトの名無しさん mailto:sage [2018/04/02(月) 12:50:23.03 ID:E1iWIfmB0.net]
訂正だろ? 態度悪いなおまえ

1029 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 72日 3時間 44分 41秒

1030 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています








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

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

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