トップページ⇒tech
1002コメント321KB

C++相談室 part123 [無断転載禁止]©5ch.io

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2016/02/21(日) 16:36:27.08ID:jZESqUY+
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part122
http://peace.2ch.net/test/read.cgi/tech/1453557975/

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

■長いソースを貼るときはここへ。■
 http://codepad.org/
 http://ideone.com/
0002デフォルトの名無しさん2016/02/21(日) 16:37:13.72ID:jZESqUY+
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
0003デフォルトの名無しさん2016/02/21(日) 16:38:18.90ID:jZESqUY+
STLつかうと一気に実行ファイルサイズが10倍に?!

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

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

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

#include <stdafx.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0004デフォルトの名無しさん2016/02/21(日) 16:39:22.97ID:jZESqUY+
---- テンプレ ここまで ----
0005デフォルトの名無しさん2016/02/21(日) 16:42:58.92ID:x0ZK9w0e
http://codepad.org/rwLzrPX4
何故cは0になるのですか
0006デフォルトの名無しさん2016/02/21(日) 16:44:46.98ID:BYiGM6la
>前スレ994
>externは引き続く識別子が外部シンボル(!=ファイルスコープ)であることを明示するためのもの

んなこたーない
0007デフォルトの名無しさん2016/02/21(日) 16:44:54.68ID:toLQNscP
471 デフォルトの名無しさん[sage] 2016/02/09(火) 08:07:47.87 ID:GGDlYrLi

Windowsでエクスプローラその他殆どのアプリがメモリ不足死んだ状態でも生き残らななきゃ
いけないシステム監視ソフトを書いたことがある俺に言わせるとそれほど難しいことじゃない
Windowsの場合、メモリアロケーションに失敗する前にPostMessageが失敗するようになるから
その辺に対応するのがコツ
0008デフォルトの名無しさん2016/02/21(日) 16:48:35.85ID:2IuYSi1y
>>5
初期値が設定されないまま読み出されているので未定義動作。
0 が読み出されたように動くこともあるというだけ。
0009デフォルトの名無しさん2016/02/21(日) 16:51:01.47ID:BYiGM6la
んなこたーない
0010デフォルトの名無しさん2016/02/21(日) 17:10:56.91ID:hql2OPnW
>>5
偶然だ,頼ってはいけない
0011デフォルトの名無しさん2016/02/21(日) 17:16:20.23ID:BYiGM6la
よく見たらデフォルトコンストラクターが有った
そんなことあった失礼>>8
0012デフォルトの名無しさん2016/02/21(日) 17:21:25.25ID:m+BXwdHb
偶然は余計だ
規格上未定義動作というレスで十分
0013デフォルトの名無しさん2016/02/21(日) 17:34:03.41ID:toLQNscP
このスレでは文法に関するレスは規格書と一言一句一致している事が要求されているので、素人さんは要注意
0014デフォルトの名無しさん2016/02/21(日) 17:55:01.74ID:UzPMPT/j
なんか混乱させたけど、
1.ore.cppにも#include "ore.h"を入れる。
2.classやstructの宣言、定義も普通にore.hで行う。
3.インスタンスとして生成するものにはexternつける。
4.グローバル変数等も同様。
5.それらはore.cpp内で初期値与えたりなんか色々。

ちゃんと動作させようとするならこんな感じ?
あとwifeの複数形は使ったことなくて知りません。
0015デフォルトの名無しさん2016/02/21(日) 18:06:28.24ID:jZESqUY+
定数だとconstexprで済ませちゃう。
0016片山博文MZ ◆T6xkBnTXz7B0 2016/02/21(日) 21:02:00.64ID:mZ9I4pVL
C++でリスト操作を行うプログラムを作ったよ。
http://katahiromz.web.fc2.com/mathai/list_process.zip
感想を聞かせて欲しい。
0017 ◆tAo.kQ2STk 2016/02/21(日) 22:01:06.41ID:S7h+0zbS
>>16
prologで良いじゃんっていう感想はあり?
fgetsの第二引数にsizeofを使いたい
コメント少なめ
1関数100行超え当たり前をどうにかしたい
他
0018片山博文MZ ◆T6xkBnTXz7B0 2016/02/21(日) 22:18:23.20ID:mZ9I4pVL
>>17
Prologかぁ。ありがとう、参考になった。
0019片山博文MZ ◆T6xkBnTXz7B0 2016/02/21(日) 22:40:14.68ID:mZ9I4pVL
>>17
Prologでリスト方程式を解くプログラムを作って欲しいんだが、可能だろうか?
0020デフォルトの名無しさん2016/02/21(日) 23:39:26.02ID:BYiGM6la
前スレ994に一応補足しておくか
externはリンケージの内部・外部とあまり関係無い
 static void f();
 const int g;
 extern void f(); //内部リンケージ
 extern int g; //内部リンケージ
0021デフォルトの名無しさん2016/02/22(月) 01:21:52.17ID:x/uM3a1P
「あまり」とか、曖昧な用語でしか説明できないならするな。
0022 ◆tAo.kQ2STk 2016/02/22(月) 08:16:49.84ID:/YQF/sqY
>>19
チューリング完全である以上は可能だろうけど、リスト方程式とは?
0023片山博文MZ ◆T6xkBnTXz7B0 2016/02/22(月) 14:25:58.02ID:C/gFN+RL
>>22
リスト(ここでは動的配列みたいなもの)に対する基本操作を関数で表し、
リスト変数と関数からなる等式によって2個以上の
リスト変数の関係を表すとき、その式に含まれるあるリスト変数はどのように表せるか。
という問題なんだけど。
0024 ◆tAo.kQ2STk 2016/02/22(月) 16:55:47.45ID:PefQFuu/
>>23
用語の厳密な定義か任意の言語による実装例を望むんだけど

リスト変数ってのは
1. N次元ベクトルを格納するリスト型の変数の事(std::list<int> list;)?
2. それとも環境に束縛されている変数を記述するリストの事(std::list<std::pair<std::function<int()>, std::function<void(int)>>> values;)?
3. それとも式を名前や演算子のリストとして表現した物(std::list<Token> expr;)?
4. それとも構文解析済みの式を格納した木の事(struct L {std::list<L> left, right; Token token;}; std::list<L> ast;)?

あとは
3番だと仮定して、入力されるリスト表現された式は主加法標準形のように何らかの標準化がされていると仮定しても良い?
数学的な意味での「変数」は複数存在しうる?
人力でなら代数的に解ける?つまり、注目している変数の次数は高々4次だと仮定しても良い?
関係が複数の組に対して定義されている時で、かつ、注目している変数について解いた結果として独立な式が得られた場合、
つまり関係式に十分なランクがある場合に、どう動作するべき?
0025デフォルトの名無しさん2016/02/22(月) 18:01:13.58ID:2E9mhUXS
struct hoge
{
hoge( int ){}
};
hoge h[ 8 ] = {};
初期化の値を省略した場合はゼロで初期化されるといろんなサイトに書いてあるのに初期化されません
何故ですか
0026片山博文MZ ◆T6xkBnTXz7B0 2016/02/22(月) 18:02:19.08ID:C/gFN+RL
ここではリストは、タプルとかstd::list<int>だと考えてかまわない。
4個の項1,2,3,4を順番に並べたリストを<1,2,3,4>と表す。
リストXの第(h+1)項をX[h]と表す。<1,2,3,4>[1]==2である。
リストXとYを連結した結果をAPPENDLIST(X,Y)と表す。
リストXに項yを追加した結果をAPPENDITEM(X,y)と表す。
リストXから項X[h]を取り除いた結果をERASEITEM(X,h)と表す。
0027片山博文MZ ◆T6xkBnTXz7B0 2016/02/22(月) 18:10:53.22ID:C/gFN+RL
リストXの項X[h]の直前に項yを挿入した結果をINSERTITEM(X,h,y)と表す。
ここでZ=INSERTITEM(X,h,y)と仮定すると、X=ERASEITEM(Z,h)と書ける。
これは方程式Z=INSERTITEM(X,h,y)のXについての解であると言える。
一方、Z=ERASEITEM(X,h)と仮定するとX=INSERTITEM(Z,X[h])と書ける。ただ、XのうちでX[h]は未知数として残る。
私は数学者ではないので未知の項目があるときにどのように扱えばいいかはわからない。
0028片山博文MZ ◆T6xkBnTXz7B0 2016/02/22(月) 18:30:37.05ID:C/gFN+RL
>>25
主語が抜けてるよ。「メンバー変数」がゼロクリアされるんだよ。
そのhoge構造体にはメンバー変数がない。
0029片山博文MZ ◆T6xkBnTXz7B0 2016/02/22(月) 18:55:08.21ID:C/gFN+RL
なぜこんなことを考えているかと言うと、
リストを操作して別のリストを作り出すという変換器Cに対して
Cが基本操作c_1,...,c_nの合成で表せたなら、Cの逆変換器C^(-1)は
それらの逆変換器c_n^(-1),...,c_1^(-1)の合成で表せる。
つまり、あるプロセッサから逆の動作を行う別のプロセッサを作れるわけです。
0030 ◆tAo.kQ2STk 2016/02/22(月) 18:58:18.98ID:PefQFuu/
>>27
http://ideone.com/H9X9nS
こういう感じ?
0031片山博文MZ ◆T6xkBnTXz7B0 2016/02/22(月) 19:10:56.66ID:C/gFN+RL
>>30
いい感じ。残念ながら私はまだPrologを習得していないので必要なら勉強するつもり。
「SOLVE FOR X: 方程式」みたいな表現で方程式を解けると有り難い。
メールでAmazonギフト券5000円差し上げます。メルアド教えて。
0032 ◆tAo.kQ2STk 2016/02/22(月) 19:23:11.74ID:PefQFuu/
>>31
5000円券くれるのん?ありがとう。
[email protected]

prologは全探索すれば解けて、パターンマッチングとして記述できる問題を書くのには向いてるけど、
本質的に繰り返しを含むアルゴリズム、例えばニュートン法なんかを書くには向いてないですよ。
prologで解く典型的な問題としては
N-Queensとか4色問題とか、あとは条件付きスケジューリングなんかが挙げられるです。
0033デフォルトの名無しさん2016/02/22(月) 19:31:42.90ID:Sq52s7+O
>>25
コンパイルが通らないからです
0034片山博文MZ ◆T6xkBnTXz7B0 2016/02/22(月) 19:59:40.54ID:C/gFN+RL
>>32
メール送ったよ
0035片山博文MZ ◆T6xkBnTXz7B0 2016/02/22(月) 20:05:18.22ID:C/gFN+RL
今回の謝礼の件は経歴書に書いても構いません。続きはPrologのスレでやります。

【論理】Prolog【初心者】
http://peace.2ch.net/test/read.cgi/tech/1289016056/
0036デフォルトの名無しさん2016/02/22(月) 20:45:46.28ID:yZnaoS7H
>>33
ゼロで初期化されるなら
hoge h[8] = { hoge(0), hoge(0), hoge(0), hoge(0), hoge(0), hoge(0), hoge(0), hoge(0) };
となるんじゃないんですか
0037デフォルトの名無しさん2016/02/22(月) 22:22:03.27ID:v1Wohs7h
いやそうじゃない
ゼロ初期化はコンストラクタ引数にゼロを渡すのとはまったくちがう
struct hoge
{
int baka;
};
hoge h[ 8 ] = {};
ならh[0].baka〜h[7].bakaはゼロ初期化される
っていうか初心者歓迎スレに行け
0038片山博文MZ ◆T6xkBnTXz7B0 2016/02/22(月) 22:22:33.71ID:C/gFN+RL
メンバー変数がなければデータを格納できない。
0039デフォルトの名無しさん2016/02/22(月) 22:56:49.91ID:/YQF/sqY
>>36
「ゼロ初期化」っていう訳語の専門用語と、「ゼロで初期化する事」は意味が違う。
zero initializationでググると良いよ。
0040 ◆tAo.kQ2STk 2016/02/22(月) 22:57:46.65ID:/YQF/sqY
>>>34
メール受け取ったよ
0041デフォルトの名無しさん2016/02/22(月) 22:58:23.84ID:yZnaoS7H
>>37
struct hoge
{
hoge(){}
int baka;
};
ならbakaは不定です。
ほんとにゼロ初期化されるのがルールなんですか
0042デフォルトの名無しさん2016/02/22(月) 23:00:01.44ID:yZnaoS7H
>>39
大抵のサイトは値を省略すると「ゼロで初期化される」と書いてあります。
正確なところを教えてください。値を省略すると何が起こるのですか
0043デフォルトの名無しさん2016/02/22(月) 23:33:38.04ID:/YQF/sqY
>>42
n3690から抜粋すると
8.5.17:The semantics of initializers are as follows. The destination type is the type of the object or reference being
initialized and the source type is the type of the initializer expression. If the initializer is not a single (possibly
parenthesized) expression, the source type is not defined.
— If the initializer is a (non-parenthesized) braced-init-list, the object or reference is list-initialized
8.5.4.3: List-initialization of an object or reference of type T is defined as follows:
if the initializer list has no elements and T is a class type with a default constructor, the
object is value-initialized.
8.5.8: To value-initialize an object of type T means:
— if T is a (possibly cv-qualified) class type (Clause 9) with either no default constructor (12.1) or a
default constructor that is user-provided or deleted, then the object is default-initialized
8.5.7: To default-initialize an object of type T means:
— if T is a (possibly cv-qualified) class type (Clause 9), the default constructor (12.1) for T is called

つまりこの場合に限ると
・リストで初期化するとlist-initializeされる。
・リストが空の場合、list-initializeはvalue-initializeになる。
・デフォルトコンストラクタが削除されてたり、ユーザ定義されてる場合はvalue-initializeはdefault-initializeになる。
・default-initializeはデフォルトコンストラクタを呼び出す
・hoge::hoge()は何も実行しない→hoge::bakaは未定義のままになる
といった具合。

解決するには、
hoge() : baka(0) {return;}
みたいにちゃんと初期化コードを書かなきゃ駄目。
0044デフォルトの名無しさん2016/02/22(月) 23:37:52.25ID:/YQF/sqY
ちなみにhoge::hoge()を定義しない場合、暗黙のデフォルトコンストラクタが定義されて
その場合はvalue-initializeはzero-initializeになるですよー
0045デフォルトの名無しさん2016/02/22(月) 23:59:33.96ID:ANT1CVM2
面倒だ
struct hage
{
 hage() = default;
 hage( int ){}
};
これでOK
0046デフォルトの名無しさん2016/02/23(火) 02:18:04.37ID:gGx+alPj
前スレでラムダ式を気軽に使っていいか?という質問をした者ですが、
以下のようにforの中に定義を書いてしまった場合、forのループの度に
ラムダ式のオブジェクトを生成したりするんでしょうか?
そうだとするとforの外に出しておいたほうがいいんでしょうか?

for
{
 〜ウン十行ある〜

 auto func = [](){}; // ラムダ式を使う場所の近くで定義を書きたい(把握しやすいように)

 if
 {
  func();
 }
 else
 {
  func();
 }

}
0047デフォルトの名無しさん2016/02/23(火) 02:42:27.72ID:0Gk/RmeS
2chに書き込む暇が有ったら測定してみろ
0048デフォルトの名無しさん2016/02/23(火) 07:59:59.43ID:ltvQNGjy
>>41
以下だと、int baka; を、{ }で囲んでいないから、初期化できていない
struct hoge
{
hoge(){}
int baka;
};

上記を以下のようにすればよい。>>37 に書いてある
struct hoge
{
int baka;
};

hoge h = {};

ちゃんと本を読め。初心者歓迎スレに行け
0049デフォルトの名無しさん2016/02/23(火) 08:04:39.95ID:ltvQNGjy
>>46
ループ毎に、処理が変わらないのなら、forの外に書く

ループ毎に、処理が変わるのなら、forの内に書く
0050デフォルトの名無しさん2016/02/23(火) 08:18:48.42ID:UeUvEN3+
>>48
bakaをゼロで初期化する方法は最初から聞いてません
初期化の値を省略した場合の挙動を聞いているのです
デフォルトコンストラクタが呼ばれるならそう書けばいいのにどこもゼロで初期化されるとしかかいてませんでした
0051デフォルトの名無しさん2016/02/23(火) 08:31:58.63ID:xDQTJcBy
まあ>>50が予想された結果だ
>>43の後に>>48はいろいろとマヌケすぎる
0052デフォルトの名無しさん2016/02/23(火) 11:21:56.71ID:ltvQNGjy
>>43 みたいに、複雑な判定が必要なら、
そもそも必ず明示的に初期化すべき

多くのコーディング規則でも、
初期化していない値を使ってはならないと書いてあるだろ

未初期化の場合、初期化し忘れたのか、
故意にやっているのか、意図がわからないから困る

もし、各コンパイラで挙動が異なったら、
こんなバグや意図を突き止めて、修正するのは大変
0053デフォルトの名無しさん2016/02/23(火) 13:35:15.59ID:aFHEViKg
>>50
素人が適当なウソを無責任に書き散らしているサイトが多いが、
「どこでも」と言うなら、Cの構造体の初期化について書いてあったんだろう。

要約するとお前が間抜け
0054デフォルトの名無しさん2016/02/23(火) 14:05:39.64ID:4c1IOC2x
>>50
C++の文脈でPODと非PODの違いにも触れずに={}で一律にゼロ初期化されるなんて
書いてるバカなサイトなんて見たことないんだが?
どこでもっていうなら3つくらいは挙げてくれ
0055デフォルトの名無しさん2016/02/23(火) 14:15:32.01ID:UeUvEN3+
>>54
列挙しても特に意味ないので
意味があるならやりますけど
0056デフォルトの名無しさん2016/02/23(火) 14:24:32.35ID:4c1IOC2x
もうお前はいいよ相手にしちゃいかんやつだ
0057デフォルトの名無しさん2016/02/23(火) 14:37:12.48ID:UeUvEN3+
突然絡んできてもういいよとは何が何やらわかりません
どうしてしまったんですか
0058デフォルトの名無しさん2016/02/23(火) 20:17:07.10ID:bPGlp/ev
>>55
意味ならあるだろ
>>54は={}でゼロ初期化されるなんて書かれているサイトは見たこと無いって主張していて、
君はその逆に、どのサイトを見ても={}でゼロ初期化されるって書いてあると主張している。

どちらが正しいか証明したければ
君が知ってるサイトを片っ端から挙げるべきなのは分かるね?
逆に君がそうしない、又は出来ないというのなら君が単に嘘ついて炎上学習したって事になる。
0059デフォルトの名無しさん2016/02/23(火) 20:24:46.11ID:MF5ot8kL
>>58
嘘もついてないですし自分の正しさを証明する必要も意味もないので
貼るなら正しい仕様を理解するための参考になるサイトを貼ってくれる方がいいですね
ダメなサイトを貼る意味ってあります?
0060デフォルトの名無しさん2016/02/23(火) 20:34:32.34ID:xDQTJcBy
>>59
興味があるので、ゼロ初期化と書いてあるサイトを教えていただけませんか?
今回だけ特別に教えて欲しいです。
代わりに参考になるサイトを紹介します
http://www.open-std.org/
→WG21→papers
N4567がオススメです
0061デフォルトの名無しさん2016/02/23(火) 20:48:31.49ID:MF5ot8kL
>>60
そこは知ってるので別の所お願いします
0062デフォルトの名無しさん2016/02/23(火) 23:03:35.63ID:bPGlp/ev
>>59
背理法って知ってる?
0063デフォルトの名無しさん2016/02/24(水) 06:55:08.54ID:iraD9m85
>>62
熱膨張的な物言いでカッコいいですね
0064デフォルトの名無しさん2016/02/24(水) 07:00:00.19ID:iS9soXkB
ボク自身も熱で膨張しそうです
0065デフォルトの名無しさん2016/02/24(水) 08:48:53.60ID:qiLj0DES
熱くたぎる怒張がどうしたって?
0066デフォルトの名無しさん2016/02/24(水) 12:21:03.69ID:CiZ4HRqF
>>62
ム板じゃないところに来てるかと思って板名見なおしたぞ
0067デフォルトの名無しさん2016/02/24(水) 14:23:42.94ID:4ZA9ynQM
>片桐 はいり(かたぎり はいり、1963年1月18日 - )は、日本の女優。
>本名、片桐 由美(かたぎり ゆみ)。東京都大田区出身。
>スターダストプロモーション芸能1部所属。
0068デフォルトの名無しさん2016/02/24(水) 20:35:27.44ID:qiLj0DES
はいりはいりふれはいりほー
0069デフォルトの名無しさん2016/02/24(水) 21:23:02.15ID:wSKjAMnV
int a = int();
a = int();
のint()はどういう意味ですか
一行目と二行目のint()に違いはありますか
0070デフォルトの名無しさん2016/02/24(水) 21:27:07.75ID:f7gTsPBB
一行目、aをコンストラクトする。
二行目、コンストラクトした一時オブジェクトをaに代入する。
0071デフォルトの名無しさん2016/02/24(水) 21:31:59.33ID:iraD9m85
一行目は一時オブジェクトは作成されないのですか
0072デフォルトの名無しさん2016/02/24(水) 21:44:13.38ID:t5G9cIIP
http://qiita.com/hmito/items/9f4bdc8442b6f6b3c7bc
結構面白かったです。
0073デフォルトの名無しさん2016/02/24(水) 22:14:05.66ID:ZvNmPlpt
>>71
知ってるくせに
0074デフォルトの名無しさん2016/02/25(木) 09:45:38.74ID:pcAVTpJw
int();
と
int(0);
は何が違うんですか
0075デフォルトの名無しさん2016/02/25(木) 09:50:39.66ID:pDSMfAMl
int(0)の方が1文字多い。そしてより明示的
だけどよっぽどの偏屈者じゃない限りint()とかint(0)とか書かない
0076デフォルトの名無しさん2016/02/25(木) 20:29:55.94ID:/tM+b5YW
int()はint型の値初期化によって得られる値
int(0)は0をintにconst_castした結果
0077デフォルトの名無しさん2016/02/25(木) 23:46:46.50ID:Y3PURJ2y
auto i = int{}; はフツーだろ?
auto j = int{0}; は変人
0078デフォルトの名無しさん2016/02/26(金) 00:43:33.92ID:VN+AWD5G
いやいやフツーはint i = 0;だろw
0079デフォルトの名無しさん2016/02/26(金) 02:27:23.53ID:JkkprwN3
int i {0}; // だろ
0080デフォルトの名無しさん2016/02/26(金) 02:57:45.65ID:sByuqtKs
宣言と初期化に関して、いろんな表記が有りすぎて笑えないレベルだな
コンストラクタなのかキャストなのかも分かりにくいし
最高です
0081デフォルトの名無しさん2016/02/26(金) 06:59:41.78ID:L7RTVb9K
しかしnewでクラス作成時にメンバを全ゼロ初期化する方法がないんだな
0082デフォルトの名無しさん2016/02/26(金) 07:10:06.43ID:FbdyjvxV
ちょっと何言ってるかわからない
0083デフォルトの名無しさん2016/02/26(金) 07:44:52.80ID:L7RTVb9K
しかしnewでクラス作成時コンストラクタ呼出し前にメンバを全ゼロ初期化する方法がないんだな
0084デフォルトの名無しさん2016/02/26(金) 07:48:12.67ID:L7RTVb9K
DelphiとかBCBだとTObject派生物はゼロ初期化されるが
標準C++規格でのやり方では聞いたことが無い
0085デフォルトの名無しさん2016/02/26(金) 08:01:04.93ID:Pw5RFD2X
自分が知らない、聞いたことがないことを
方法が無いと断定する低能には難しいだろうな
0086デフォルトの名無しさん2016/02/26(金) 08:04:28.09ID:tJ1gUyHd
初期化はコンストラクタでやるもんだと思うが、なぜコンストラクタ呼び出し前に
そんなことやる必要があるんだろうか。
0087デフォルトの名無しさん2016/02/26(金) 08:28:20.75ID:ouDcFdqg
char p[sizeof hoge]={};
new(p) hoge();
で
0088デフォルトの名無しさん2016/02/26(金) 08:53:49.35ID:L7RTVb9K
>>86
初期値がゼロのメンバ変数はいちいち初期化する面倒が不要になる
0089デフォルトの名無しさん2016/02/26(金) 10:15:10.11ID:OlJixx6H
struct X { int a, b, c; }
X *x = new X({0, 0, 0});
これを簡略化したいってことか?
0090デフォルトの名無しさん2016/02/26(金) 12:19:06.42ID:h1q56VEq
new X() で済む話だよね。
0091デフォルトの名無しさん2016/02/26(金) 18:27:57.97ID:Pw5RFD2X
これでおk
struct baka {
 int p;
 baka() = default;
 baka(int p) : baka{}, p{p} {
 }
};
0092デフォルトの名無しさん2016/02/26(金) 18:43:51.81ID:AYRtcLu9
struct baka {
 int a=0;
 bool b=true;
 baka() = default;
};
でええやん
0093片山博文MZ ◆T6xkBnTXz7B0 2016/02/26(金) 18:45:56.98ID:6Zondczs
struct tensai {
 int a=0;
 bool b=true;
};
0094デフォルトの名無しさん2016/02/26(金) 19:38:43.59ID:VKP1Cmo0
0で初期化すれば安心って、それ自体が間違ってる気がする。
0095デフォルトの名無しさん2016/02/26(金) 20:27:08.19ID:5826a3fE
PostMessageを監視すべし
0096デフォルトの名無しさん2016/02/26(金) 23:25:03.72ID:yiTr60/V
double型の行列とcomplex<double>型の行列演算結果がcomplex<double>
型になるように型拡張を行うには何のテクニック使ったらいい?

あ、単純な演算子のオーバーロード使うと結構大変だから(できんわけではないが)
テンプレートテクニックとかうまく使えないかな。
0097デフォルトの名無しさん2016/02/26(金) 23:45:09.61ID:zaiZLpHx
演算子のオーバーロードが一番いい
0098デフォルトの名無しさん2016/02/27(土) 00:58:43.79ID:e3stW6O/
なにをいってるかわからんな
行列の個々の要素ごとにdoubleとcomplex<double>で四則演算するなら
結果は自動的にcomplex<double>になるだろ
0099デフォルトの名無しさん2016/02/27(土) 01:54:26.55ID:pvHfkl8D
complex<double>をベクトルとみなして、doubleをスカラとみなすのか
そういう演算はC++では普通標準で用意しないから自分でオーバーロードすればいいじゃん
0100デフォルトの名無しさん2016/02/27(土) 01:57:02.77ID:C/ecoBXH
TVアニメ『NEW GAME!』というのを知り、漫画を読みました。
無職5年目ですが、ぷろぐらむ(C++)Win32 アプリケーションを使い
ゲームを製作(勉強)したいと思いました。
お勧めの参考書籍やサイトが有りましたら教えて下さい
0101デフォルトの名無しさん2016/02/27(土) 02:32:29.58ID:wxfsuIHK
>>96
行列クラス自分で作るつもりなら当然行列どうしや行列とスカラーの演算子も定義しなきゃいかんわな
俺ならそんなもの自作しないで既存の行列演算ライブラリ(例えばeigenとか)使うけど
ちなみに>>98が言ってるようにdouble型とcomplex<double>型のスカラー演算結果は標準でcomplex<double>になるよ
0102デフォルトの名無しさん2016/02/27(土) 03:47:18.73ID:0gtZVCNd
>>100
ここは怖い人ばかりなので初心者スレへどうぞ
0103デフォルトの名無しさん2016/02/27(土) 04:15:41.61ID:EVLCSxnr
>>102は会話のできないアスペ
0104デフォルトの名無しさん2016/02/27(土) 09:03:39.57ID:vL66Pzde
>>96
もしかして、このあたりの話をすればいいのかな?
http://stackoverflow.com/questions/17013655/how-to-use-decltype-to-determine-the-result-of-an-addition
これが「結構大変だ」と言っていたのならすまぬ。
0105デフォルトの名無しさん2016/02/27(土) 09:52:02.29ID:HsyJ5PWO
>>104

ありがとう。

スカラー単位の型拡張はあたりまえだけど、double型を要素とする
行列をcomplex<double>型の行列に型拡張するときどうするんだろ
と思ってね.

やはり要素レベルでtraitsを使って,traitsで定義した型を要素と
する行列を作るのが正攻法かなあ。C++14だともっとエレガントに
できないかな? 紹介してくれた所を見てみるよ.
0106デフォルトの名無しさん2016/02/27(土) 12:31:21.47ID:hVqcAFgk
手法にこだわって目的を達成できない典型的パターンだな。
0107デフォルトの名無しさん2016/02/27(土) 16:53:21.38ID:tW+Ks6U1
目的がオナニーだから問題ない
0108デフォルトの名無しさん2016/02/27(土) 18:46:59.39ID:HsyJ5PWO
馬鹿には好きなだけ言わせとくよ
0109デフォルトの名無しさん2016/02/27(土) 20:19:31.60ID:qyipvj4l
初心者の口から出る「エレガント」に反吐が出る
0110デフォルトの名無しさん2016/02/27(土) 20:25:42.58ID:HsyJ5PWO
はいはい、キチガイ犬w
0111デフォルトの名無しさん2016/02/27(土) 20:43:20.31ID:e3iZnQnQ
#ifndef INCFILE_H_
最後のアンダーバーは何のためにあるですか?
0112デフォルトの名無しさん2016/02/27(土) 21:54:26.15ID:TnvXsjWd
反吐が出ると言って本当に吐いてるやつを見たことがない
0113デフォルトの名無しさん2016/02/27(土) 21:57:54.41ID:EVLCSxnr
自然言語の言い回しも理解できない低能には
プログラム言語は難しいだろう
0114デフォルトの名無しさん2016/02/27(土) 22:06:17.26ID:EVLCSxnr
>>111
低能が書いた#defineによる定数と
名前を衝突しにくくするためだろうきっと
0115デフォルトの名無しさん2016/02/27(土) 22:07:02.57ID:T6Jc3KoX
ひとつのテンプレート関数内部で'A'とL'A'を自動判別する方法教えてください
int a['A' or L'A'];
みたいな
0116デフォルトの名無しさん2016/02/27(土) 22:26:19.05ID:TnvXsjWd
>>113
あのさ、ここは2チャンネルであって、基本的に初心者が集まる場所なんだよ?
昔とは違うんだ。わかるか?
0117デフォルトの名無しさん2016/02/27(土) 23:38:42.62ID:bRJMsBK5
>>116
馬鹿の無根拠な妄言ktkr
0118デフォルトの名無しさん2016/02/27(土) 23:53:52.62ID:TnvXsjWd
もともとは>>109の発言
0119デフォルトの名無しさん2016/02/28(日) 09:01:53.38ID:p5UOgBYD
昔ってなんだ? ネットニュースか?
0120デフォルトの名無しさん2016/02/28(日) 09:51:52.96ID:sxXcnRPc
>>100
14歳からはじめるC言語オンラインゲームプログラミング
15歳からはじめるDirectX9 3Dゲームプログラミング教室
14歳からはじめるシリーズ~ あと二冊
0121デフォルトの名無しさん2016/02/28(日) 10:59:04.87ID:yeDT/yDi
Compositeデザインパターンでcomposite1のchildlenの型をcomponentの配列ではなくcomposite2の配列に限定し、composite2のchildrenはleafのみの配列に限定したいのですが、どのようにしたらいいのでしょうか?
0122デフォルトの名無しさん2016/02/28(日) 13:29:41.30ID:w64tNJjH
それはコンポジットパターンなのか?
0123デフォルトの名無しさん2016/02/28(日) 13:48:26.49ID:5n5R60tK
それだけじゃ型を明示しろよとしか思えんが
0124デフォルトの名無しさん2016/02/28(日) 14:19:39.94ID:tz1QY8TO
そういうふうに組めばいいとしか言いようがない。
組む際に何がネックになってるのかね。
0125デフォルトの名無しさん2016/02/28(日) 17:19:18.45ID:yeDT/yDi
>>123
>>124
Compositeでchildrenの型としてComponentを用い、それを継承してComposite1とComposite2を作ったら
これらのchildrenの型が自動的にComponentになってしまうのでどこでどうやって型を明示すればよいのか困っております
0126デフォルトの名無しさん2016/02/28(日) 17:35:13.98ID:emPXsfmM
型を限定したいとか明示したいとか言ってる時点でCompositeパターンを使うのは間違いなんじゃない?
0127デフォルトの名無しさん2016/02/28(日) 18:05:44.76ID:jJK+500Y
配列要素の型を限定したい(componentの配列ではなくcomposite2の配列に限定したい)というのはいかんともし難い
配列要素の型を明示したいだけなら多態性がわかっていれば問題なくできるはず…

ただし、インスタンスの配列で多態性をやるには配列要素の型は基底クラスでなく派生クラスにする必要があり、
派生クラスが2種類(以上)あるcomponentパターンはできない

この場合の配列は基底クラスを指すポインタの配列であるべきなのでは…

※ 個人の感想です。
0128デフォルトの名無しさん2016/02/28(日) 18:27:33.71ID:fFRYdAaf
配列を持つコンポーネントにして、visitorと組み合わせるってのはダメなのかな
0129デフォルトの名無しさん2016/02/28(日) 18:28:25.88ID:yeDT/yDi
>>122,>>126
Compositeパターンじゃなくてもいいのですが、childrenに対する操作は同じ操作がたくさんあるので継承したいのです。
しかしcomposite1はcomposite2にしかないメソッドを呼び出すこともあり、この時ダウンキャストするのを出来れば避けたいと思っております。
>>127
やはり限定するのは難しいですか……
すみません、
>配列要素の型を明示したいだけなら多態性がわかっていれば問題なくできるはず
というのは何を使って明示することを想定されているのか教えていただけないでしょうか?
0130デフォルトの名無しさん2016/02/28(日) 19:11:55.42ID:c40FCrwk
登場人物がComposite1とComposite2とLeafだけなら、普通にComposite1::getChild()は
Composite2を返してComposite2はLeafを返せばいいだけだろ。
0131デフォルトの名無しさん2016/02/28(日) 19:52:22.72ID:PMSRihXY
>>125
「これらのchildrenの型が自動的にComponentになってしまう」
↑ここが何かおかしい。んなわけねーだろ、と。
ほんとうにそんなところまで Composite が制約を加えてるなら、そこが問題。

>>129
ダウンキャストして済むならそれで済ませればいいだろうとも思う。
「避けたい」の具体的な理由があるのかと。
0132デフォルトの名無しさん2016/02/28(日) 20:57:13.19ID:gim467qR
>>129
childrenに対する操作の一部を共通化したいだけなら、
こんな感じでCompositeに共通処理を集めるだけじゃ駄目かね。

template<class Child> class Composite { /* 共通処理 */ };
class Leaf { };
class Composite2 : public Composite<Leaf> { /* Leafだけの処理 */ };
class Composite1 : public Composite<Composite2> { /* Composite2だけの処理 */ };
0133デフォルトの名無しさん2016/02/28(日) 21:20:23.21ID:yeDT/yDi
>>131
class composite{
vector<shared_ptr<component> > children;
}

class composite1:public composite{
}

の形で実装したらcomposit1のchildrenはcomponentになると思っていましたが、違ったでしょうか?
ダウンキャストを避けたいのは単に私が管理しきれなくなりそうだからです

>>132
おっしゃる通りの実装で解決しました。
たしかにtemplateを使えば私の望む動きをしてくれます。
分かりやすく素晴らしい回答大変ありがとうございました。
0134デフォルトの名無しさん2016/02/28(日) 21:27:42.44ID:emPXsfmM
妙に早いな
0135デフォルトの名無しさん2016/02/28(日) 21:33:54.60ID:PMSRihXY
>>133
配列実体の持ち方を composite で決めてしまっているところが問題だということ。

class composite{
virtual component& nth_child(int n) = 0;
}

class composite1:public composite{
vector<shared_ptr<compisite2> > children;
}

こうしておけばよかったんじゃないかと思うんだけど >132 で解決したならいいかな。
0136デフォルトの名無しさん2016/02/28(日) 22:12:35.00ID:jJK+500Y
お禿げ様はインターフェースは一般に最初の基底クラスに全て集まる傾向にあるとはどっかに書いてたが
実装まで最初の基底クラスに集約するのが良い設計なのかどうか…

Cmposite1、Comosite2だけならまだしも
Cmposite3、Comosite4、…と増えていった場合に都度Compositeクラスのソースコードが編集され、肥大化していくんやで〜
0137デフォルトの名無しさん2016/02/29(月) 05:58:03.54ID:j6jzPb2d
Mixin的な使い方に限るなら問題ないでしょう。
継承が嫌なら、Compositeをメンバ変数にするとか、
vectorを受け取る関数テンプレート群にしてしまうとかすればいいし。
0138デフォルトの名無しさん2016/03/02(水) 23:08:12.47ID:g3p9uXMc
C++の質問です。

ウィンドウハンドルHWND型を数値化する方法をご教授下さい。

何をしたいのかというと、VisualStudio付属のspy++を使用して、
色々な事をしています。

spy++の各ウィンドウの「ウィンドウ」文字列の右にウィンドウハンドルID?のような、
ウィンドウ毎に一意につけられたIDが表示されています。
このIDを取得したいのです。

なのでウィンドウハンドルHWND型を数値化出来れば、上記spy++のウィンドウハンドルID?
と同じ物を取得できると考えました。

よって、ウィンドウハンドルHWND型を数値化する方法をご教授下さい。
※もしかしたら目的と実施しようとしている事が間違っているかもしれません
※その場合は正しくウィンドウハンドルID?を取得できる方法をご教授下さい
0139デフォルトの名無しさん2016/03/02(水) 23:26:29.94ID:v5tMoIR7
>>138
size_t id = reinterprete_cast<size_t>(hwnd);
0140デフォルトの名無しさん2016/03/02(水) 23:57:02.22ID:9ZwWQH++
なぜそこでstd::intptr_tでなくsize_tが出てくるのか不思議
0141デフォルトの名無しさん2016/03/03(木) 05:25:34.43ID:tlFkd89Q
しかもreinterpret_cast<&size_t>じゃないとパンニングできないし
0142デフォルトの名無しさん2016/03/03(木) 05:55:57.70ID:vKHIYEam
uint32_t id = (uint32_t)(uintptr_t)hwnd;

で問題ないよ
0143片山博文MZ ◆T6xkBnTXz7B0 2016/03/03(木) 06:01:02.75ID:UnIH0jHm
>>142
hwndが64ビットの可能性
0144デフォルトの名無しさん2016/03/03(木) 06:03:58.47ID:vKHIYEam
>>143
https://msdn.microsoft.com/en-us/library/windows/desktop/aa384203%28v=vs.85%29.aspx
0145片山博文MZ ◆T6xkBnTXz7B0 2016/03/03(木) 06:18:15.21ID:UnIH0jHm
#include <cstdint>
uint32_t id = static_cast<uint32_t>(reinterpret_cast<uintptr_t>(hwnd));

C++スタイルのキャスト、めんどい
0146片山博文MZ ◆T6xkBnTXz7B0 2016/03/03(木) 06:22:38.14ID:UnIH0jHm
Windows限定ならcstdint要らないかな?

UINT id = static_cast<UINT>(reinterpret_cast<UINT_PTR>(hwnd));
0147片山博文MZ ◆T6xkBnTXz7B0 2016/03/03(木) 06:27:13.98ID:UnIH0jHm
Win16じゃ動かないんだな
0148デフォルトの名無しさん2016/03/03(木) 06:42:45.53ID:+JeDUCvS
16ビットオブジェクトを出力できるコンパイラ未だもってんのか?
0149デフォルトの名無しさん2016/03/03(木) 08:31:20.27ID:6K3/+EIJ
>>138

ありがとう解決しました。
.Netの世界の文字列型に変換する必要があるので以下としました。
String^ hw_id = static_cast<UINT>(reinterpret_cast<UINT_PTR>(this->hw)).ToString("X");
0150デフォルトの名無しさん2016/03/03(木) 08:36:11.53ID:km2vGawV
>>148
持ってるか?
って聞かれたら、
Visual C++ 1.52c が押し入れのどこかに眠ってるはず
って答えることにしてる
0151デフォルトの名無しさん2016/03/03(木) 11:36:15.96ID:DPHy8aYb
>>148
昔手に入れたLSI Cの試食版の方ならたしかどこかに・・・
0152デフォルトの名無しさん2016/03/03(木) 12:03:10.46ID:mDpo7bQQ
Cマガ電脳倶楽部
0153デフォルトの名無しさん2016/03/03(木) 12:50:10.40ID:ECv4uLci
ビジアルシー2についてるのがある。
0154デフォルトの名無しさん2016/03/03(木) 20:25:35.72ID:km2vGawV
>>153
それが >>150 だよ
大元の Visual C++ 2.0 は捨てたかも知らんけど、1.52c はなぜか捨てられない
0155デフォルトの名無しさん2016/03/03(木) 20:47:49.02ID:+JeDUCvS
1.52って5.24" FDDだったりしない?
0156デフォルトの名無しさん2016/03/03(木) 21:13:16.06ID:km2vGawV
>>155
単品売りは知らんけど 2.0 付属の奴は1995 年だから、1.52c も普通に CD-ROM だよ
https://ja.m.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B#.E6.A6.82.E8.A6.81
0157デフォルトの名無しさん2016/03/03(木) 21:20:26.58ID:+JeDUCvS
そう言えば、32ビットWindowsもう動態保存してるの無いや

double spaceからサルベージするためにWin98SEをqemuかvboxにいれたイメージがどこかにあるはずだけど
0158デフォルトの名無しさん2016/03/04(金) 09:04:28.30ID:TYlQwhRh
strcopyを代入演算子=に置き換えてみればわかるだろ
0159デフォルトの名無しさん2016/03/04(金) 10:00:38.32ID:wO5/jJwK
は?どこの誤爆だよ
それにstrcopyなんてものは聞いたこともないぞ
朝からクソ酔っ払ってる俺よりもトンチンカンな事書き込むってどんだけヤバイ薬やってるんだよ
0160デフォルトの名無しさん2016/03/04(金) 10:05:52.57ID:4C3oKPHs
俺に聞け
0161デフォルトの名無しさん2016/03/05(土) 16:26:40.97ID:Uw046/hC
初心者です。
c++で文字を入力するとそれを出力するものをビルドしたら、出力した後すぐにビルドが終わってしまいます。
出力後に画面を固定する方法はありませんか?
0162デフォルトの名無しさん2016/03/05(土) 16:33:23.72ID:yY6Am1xo
ビルドじゃなくてデバッグ実行だろ?
ひとまずVSと仮定して、適当にブレークポイントでも打っとけば?
0163デフォルトの名無しさん2016/03/05(土) 16:33:48.17ID:niBmwPNn
>>161
入力待ちを利用する
0164デフォルトの名無しさん2016/03/05(土) 16:36:24.81ID:TtOs9IsN
環境を書かないと
0165デフォルトの名無しさん2016/03/05(土) 16:53:34.22ID:Uw046/hC
<<163
出来そうです。有難うございました。
0166デフォルトの名無しさん2016/03/05(土) 17:01:13.18ID:e8RWR+IR
デバッガーで実行(F5)ではなく、デバッガー無しで実行(ctrl-F5)すれば良い
0167デフォルトの名無しさん2016/03/05(土) 17:42:59.14ID:u5sweskK
いやそういう話じゃないし質問者は解決したみたいだから
0168デフォルトの名無しさん2016/03/05(土) 18:15:07.47ID:eQxVJDBh
system("pause");
0169デフォルトの名無しさん2016/03/05(土) 19:06:42.96ID:e8RWR+IR
いや、確実にそういう話だよ。
そういう話じゃないなら、どう言う話だよ。
0170デフォルトの名無しさん2016/03/05(土) 19:35:57.25ID:u5sweskK
はあ?入力文字の出力直後にコンソール消えちゃった(泣)のありがちパターンに決まってるだろ
なんでそれが分らないんだよ
0171デフォルトの名無しさん2016/03/05(土) 19:47:02.21ID:oAjMaO0h
>>170
だからそういう話だろう。
0172デフォルトの名無しさん2016/03/05(土) 19:56:15.67ID:u5sweskK
>>171
もしかして、それがデバッガで実行するかそうじゃないかで変わるとでも思ってるのか?
0173デフォルトの名無しさん2016/03/05(土) 19:57:35.25ID:e8RWR+IR
その、ありがちなパターンがどう言う状況で生じるのか、わからないのか?
PostMessage監視してろよ
0174デフォルトの名無しさん2016/03/05(土) 19:59:34.21ID:e8RWR+IR
>>172
もしかして、それがデバッガで実行するかそうじゃないかで変らないとでも思ってるのか?
0175デフォルトの名無しさん2016/03/05(土) 20:00:46.88ID:TtOs9IsN
多分そうなんだろうけど、決めつけはしない方が良いかと
0176デフォルトの名無しさん2016/03/05(土) 20:03:50.62ID:45RldPY2
PostMessageさんはもう許してやれよ
0177デフォルトの名無しさん2016/03/05(土) 20:41:09.94ID:e8RWR+IR
>>175
俺の推測は完璧だ。
キミも後10年PostMessage監視してれば、「環境書け」とかバカのひとつ覚え繰り返さなくても済むようになるかもね。
0178デフォルトの名無しさん2016/03/05(土) 20:41:10.45ID:oAjMaO0h
実際変わるよねぇ
VSだと。
0179デフォルトの名無しさん2016/03/05(土) 21:15:14.82ID:u5sweskK
ホントだ知らんかったわ。どうなってるんだこれ?
でもデバッガ無しかどうかの問題じゃないわな
0180デフォルトの名無しさん2016/03/05(土) 21:41:59.15ID:NhCRzDCm
みんなの書き込みがまるでわかんないんだけど
やっぱり PostMessage から勉強しなきゃいけないと、そういうこと…?
0181デフォルトの名無しさん2016/03/05(土) 21:50:07.17ID:u5sweskK
>>177
たしかに俺はPostMessageについて書いた者だが
キミは
while (PostMessage(hWnd, WM_NULL, 0, 0))
と64メガのVirtualAllocで証明終了!君か
これをバカ呼ばわりされたのがよっぽど悔しかったみたいだな

CTRL-F5についてはいいことを教えてもらったよありがと
exe直接起動と振る舞いが違うんじゃ使うことはないだろうけど

もう一度言っておくけどキミがしつこく言ってる「PostMessageの失敗がメモリ不足の兆候になる」なんて俺は一言も言ってないからw
0182デフォルトの名無しさん2016/03/05(土) 21:58:24.08ID:e8RWR+IR
>>181
自信満々で、物凄くあたま悪い発言をして、しかも、その頭悪さを理解してないバカは
日本中探してもそんなに多くは無い。


471 デフォルトの名無しさん[sage] 2016/02/09(火) 08:07:47.87 ID:GGDlYrLi

Windowsでエクスプローラその他殆どのアプリがメモリ不足死んだ状態でも生き残らななきゃ
いけないシステム監視ソフトを書いたことがある俺に言わせるとそれほど難しいことじゃない
Windowsの場合、メモリアロケーションに失敗する前にPostMessageが失敗するようになるから
その辺に対応するのがコツ
0183デフォルトの名無しさん2016/03/05(土) 22:04:16.82ID:u5sweskK
>>182
それが「PostMessageの失敗がメモリアロケーション失敗の兆候を知ることが出来る」としか読めないわけか
そんなんだから
while (PostMessage(hWnd, WM_NULL, 0, 0))
と64メガのVirtualAllocで証明終了!
になっちゃうんだよCTRL-F5クン
0184デフォルトの名無しさん2016/03/05(土) 22:17:53.94ID:e8RWR+IR
プライドだけ高いバカって始末に負えないな
ま、バカだから虚栄張ってないと世渡りできないんだろうが
0185デフォルトの名無しさん2016/03/05(土) 22:21:58.02ID:NhCRzDCm
よくわかりました。ありがとう
0186デフォルトの名無しさん2016/03/05(土) 22:43:46.74ID:KlM00wBU
環境はVC++2010です
セミコロン『;』について質問ですが

クラスの場合
class Test
{ ..... };
『}』の後ろに『;』がついています

class Test
{ ..... } obj ;
この様に『}』と『;』との間に記述すれば
『obj』というオブジェクトが生成
という事を最近知りました

構造体で同じことを試したら
オブジェクトが生成できました

配列、列挙体に同じ事をしたらエラーになります
配列、列挙体の『;』は何ですか?
0187デフォルトの名無しさん2016/03/05(土) 22:52:37.60ID:oAjMaO0h
文の終端記号
文法上そうなっている。
変数定義構文だから。

配列がどういう記述をしているかはわからないが、enumでもいけるだろ。

namespaceは要らないのよね。
0188デフォルトの名無しさん2016/03/05(土) 23:12:16.43ID:xWrvFPw5
ID:u5sweskK はコンソールアプリのデバッガ有り無しで動作が変わることも
知らなかったのに、結局偉そうなんだな
どうしようもないな
そんなことだからPostMessageなんだよ
サブスレッドから結果を返す為にPostMessage使ったんだって?バカ
0189デフォルトの名無しさん2016/03/05(土) 23:29:40.33ID:oC+37Qlp
valgrind使いものにならないさんか。
Visual Studioの挙動も知らずposix環境のツールも使えず一体何だったら知ってるんだろうか?
0190デフォルトの名無しさん2016/03/05(土) 23:42:02.63ID:VRv8TvnQ
え、valgrind使い物にならないも、postmessageさんなの?
だとしたら、ほんとすげぇなwww
0191デフォルトの名無しさん2016/03/06(日) 00:05:21.79ID:ChxbUFgQ
10年以上前にPostMessageを駆使した監視プログラム作ったらしい
会社勤めなら中堅どころなはずだが、これだけ無能な奴も珍しい
良く辞めずに続いてると思う

己の無能さを理解出来ないバカが最強って事だな
0192デフォルトの名無しさん2016/03/06(日) 00:11:04.70ID:LHysMdWz
だいぶ前にclassのデフォルトアクセス範囲をpublicにすべきっていってたのもpostMessageさんな気がする
0193デフォルトの名無しさん2016/03/06(日) 00:13:58.16ID:FS9V5eXL
いつまでこのネタをひっぱるんだろう
そんなに話題がないのか?
終わってる言語なのか?
0194デフォルトの名無しさん2016/03/06(日) 00:19:35.66ID:Brtwb7pX
構文解析のオススメ書籍教えてください
0195デフォルトの名無しさん2016/03/06(日) 00:26:27.79ID:Vcl9wz74
namespaceをどう使えばいいかわかりません。
基本的に○○.hのクラスの中で定義して、○○.cppで実装すれば良いのでは?、と考えています。
namespaceを利用する理由は何ですか?
0196片山博文MZ ◆T6xkBnTXz7B0 2016/03/06(日) 00:31:44.13ID:EizY3BRi
>>195
他の人が作ったソースを参照するときに名前が衝突しないようにするためだろうね。
0197デフォルトの名無しさん2016/03/06(日) 00:33:35.07ID:R4Ql0hHb
いろんなところからライブラリを持ってきてくっつけてアプリケーションを開発するのに、クラスや関数に名前やシグネチャかぶりがあったらコンパイル通らないじゃないか。
0198デフォルトの名無しさん2016/03/06(日) 00:34:08.24ID:LHysMdWz
>>195
名前だけで個人を識別してくださいって言われたらどう思う?
いやいや苗字もあったほうが識別しやすいよと思うだろ?
そんな時に使うんだよ
0199片山博文MZ ◆T6xkBnTXz7B0 2016/03/06(日) 00:50:13.80ID:EizY3BRi
std::shared_ptrとboost::shared_ptrという二種類のshared_ptrがある。
stdとboostという2つのnamespaceにより同時に使っても名前は衝突しない。
また、using std::shared_ptr;のようにしてshared_ptrを切り替えて使うことができる。
0200デフォルトの名無しさん2016/03/06(日) 00:53:06.89ID:0RQOBmjP
同じネームスペースの{}内に属しているクラスや関数同士で
定義の前後関係なく後ろにあるものも参照できるようになるのはいつですか?
いわゆる後方参照?と呼ばれるものだと思うのですが

今でも、同じクラス内に有るクラスやメソッドは記述の前後関係なく参照できますが
同じクラス内に定義が有るものは後方参照が可能な理由は、私が思うに
「同じクラス内に存在している」->「同一コンパイル単位に存在している」
という式が成り立つからだと思うんですよ
C++は分割コンパイルをサポートしている上に、C譲りのヘッダシステムなので
コンパイル単位を跨いで後方参照をするのが無理なのはわかります
そこで、同一クラス内に定義が有るなら必ず同じコンパイル単位に属するのは明白なので
これをもって、後方参照が可能になっているのかと
だったら、同じように同一ネームスペースの{}内に定義が有るクラスや関数も必ず同一コンパイル単位なわけですから
(何故なら{}は必ず対応していなければならないのだから)
後方参照が出来ても問題ないように思うのですが

細かいことを抜きにして、同一コンパイル単位内であれば後方参照が可能になれば良いんですが
部分的には既にできているわけですし
0201片山博文MZ ◆T6xkBnTXz7B0 2016/03/06(日) 00:55:01.26ID:EizY3BRi
また、名前空間というまとまりがあることも重要だ。
まとまりがなければ、プロジェクト全体を見ることになって、維持コストがかかる。
0202デフォルトの名無しさん2016/03/06(日) 00:57:14.96ID:PT9uiEbB
>同一ネームスペースの{}内に定義が有るクラスや関数も必ず同一コンパイル単位
え?
0203デフォルトの名無しさん2016/03/06(日) 00:58:30.86ID:2oASoSJR
10年前にPostMessageを使った監視プログラムを発明した奴に
リファレンスも読めずマトモに反論出来なかった低能の自演がまだ続くのか
0204デフォルトの名無しさん2016/03/06(日) 01:05:53.01ID:2oASoSJR
>>187
>文の終端記号
規格のどこを読むとそうなるのかkwsk
0205デフォルトの名無しさん2016/03/06(日) 01:16:52.82ID:2oASoSJR
>>189
>posix環境のツールも使えず
ほうほう、valgrindが一体POSIXの第何章で規定されているのですか?
0206デフォルトの名無しさん2016/03/06(日) 02:17:18.54ID:tuNXTXW3
>>184
いやー>>165で質問者が「入力待ちを利用する」という正しい方法で解決してるのに
しゃしゃり出てきてCTRL-F5などというバッドノウハウを披露するキミの捻れたプライドには到底及ばないよ
0207デフォルトの名無しさん2016/03/06(日) 02:29:09.64ID:tuNXTXW3
よっぽどPostMessageがウケたみたいだけど
今ではWindowsでもLinuxでもメモリリーク検出とかにはInspector(インテル)を使ってるよ
0208デフォルトの名無しさん2016/03/06(日) 04:05:47.59ID:ChxbUFgQ
こいつ本物のヴァカだ
0209デフォルトの名無しさん2016/03/06(日) 04:07:10.17ID:ChxbUFgQ
471 デフォルトの名無しさん[sage] 2016/02/09(火) 08:07:47.87 ID:GGDlYrLi

Windowsでエクスプローラその他殆どのアプリがメモリ不足死んだ状態でも生き残らななきゃ
いけないシステム監視ソフトを書いたことがある俺に言わせるとそれほど難しいことじゃない
Windowsの場合、メモリアロケーションに失敗する前にPostMessageが失敗するようになるから
その辺に対応するのがコツ
0210デフォルトの名無しさん2016/03/06(日) 04:47:19.07ID:Vcl9wz74
>>196->>199
よくわかりました。
ありがとうございます。
0211デフォルトの名無しさん2016/03/06(日) 06:01:58.25ID:2oASoSJR
最初>>167は>>206の考えで言っているのだろうと思っていたら
>>179のレスで少し驚いた
0212デフォルトの名無しさん2016/03/06(日) 06:10:40.49ID:1plcRuJs
他の言語からの移行組ですが正直吐き気が止まりません
この言語は頭おかしいんじゃないんですか?
0213デフォルトの名無しさん2016/03/06(日) 07:52:12.28ID:r0r1JwnR
言語自体が「頭おかしい」かは分からないけど…。

ストラウストラップ先生は頭(の外観が)おかしい。
規格の変化の激しさ(不安定さ)を見ると規格作成者は頭おかしい。
このスレッドの住人も頭おかしい(この発言の投稿者も含む)。

C++の村へようこそ。
0214デフォルトの名無しさん2016/03/06(日) 08:10:32.19ID:oNsCkDHW
C#の自動実装プロパティみたいなの実装される予定ある?
0215デフォルトの名無しさん2016/03/06(日) 08:29:03.39ID:py9p5YRa
>>187
どうもありがとう
enumも通りました
列挙型は列挙子しか代入できない事を理解していませんでした

enum E
{
a, b, c, d
}e;

int main()
{
cout << e << endl; //0

e = a;
cout << e << endl; //0
e = d;
cout << e << endl; //3
e = (E)1;
cout << e << endl; //1
}

配列は調査中です
0216デフォルトの名無しさん2016/03/06(日) 10:32:12.23ID:tuNXTXW3
>>209
お前は粘着根性だけは一級だ。そこだけは褒めてやるよ
ところで、CTRL-F5で「続行するには何かキーを押してださい」
が出てくるかどうかはVSのバージョンによるようだな
例えばVS2010のデフォルトで作ったコンソールアプリプロジェクトじゃそうはならなずにコンソールすぐ消える
まあ、俺はそんなあやふやなものは永遠に使うことはないだろうけど、豆知識として頭の片隅に置いておくよ
何故そういう違いが発生するのかもおかげさまで調べたらすぐに分かったし。ありがと
0217デフォルトの名無しさん2016/03/06(日) 10:43:08.67ID:hANsEkzf
>>216
もういいよ
VSのバージョンによらないよ

VSはCtrl +F5で起動するとサブプロセスとして走らせることができるんだよ
VS2008はサブプロセスとしてコンソールで起動されるのがデフォルトだったが、
2010以降は空のプロジェクトから作るとメインプロセスで走らせるのがデフォルトになった
ただ2010以降もコンソールアプリテンプレートから作ればサブプロセスとして走らせる設定がデフォルトになる

違いの原因を調べたって、一体何をどうやって調べたんだ
0218デフォルトの名無しさん2016/03/06(日) 10:46:38.57ID:LHysMdWz
>>216
NGしたいからコテつけてほしい
0219デフォルトの名無しさん2016/03/06(日) 10:48:49.35ID:dMKN1oWb
はじめまして。質問をさせてください。
dmcで作った32ビットヘルツのオブジェモジュールは
win配下etcと互換性ありすか?
0220デフォルトの名無しさん2016/03/06(日) 10:53:52.53ID:5DvD/H5K
>>213
ハゲハゲ言うなハゲ!
0221デフォルトの名無しさん2016/03/06(日) 11:05:06.45ID:Z2wdRjzg
>>218
むしろ君が自演してないでコテ付けるべき
0222デフォルトの名無しさん2016/03/06(日) 12:15:36.32ID:uXhlHP6G
規格の変化の激しさ?
0223デフォルトの名無しさん2016/03/06(日) 12:41:50.70ID:ChxbUFgQ
痴呆症のようだから、定期的に貼ってやるよ。

471 デフォルトの名無しさん[sage] 2016/02/09(火) 08:07:47.87 ID:GGDlYrLi

Windowsでエクスプローラその他殆どのアプリがメモリ不足死んだ状態でも生き残らななきゃ
いけないシステム監視ソフトを書いたことがある俺に言わせるとそれほど難しいことじゃない
Windowsの場合、メモリアロケーションに失敗する前にPostMessageが失敗するようになるから
その辺に対応するのがコツ
0224デフォルトの名無しさん2016/03/06(日) 12:52:01.64ID:uNrtakxt
おじいちゃん、それもうさっき貼りましたよ
0225デフォルトの名無しさん2016/03/06(日) 13:05:10.37ID:FS9V5eXL
おじいちゃん、それもうさっき貼りましたよ
0226デフォルトの名無しさん2016/03/06(日) 16:30:31.67ID:MC5mpgnR
Windowsのスペシャリストを気取ってVSの使い方も知らないとは情けないな
しかも入力待ちとか本来不要で本末転倒な解決策を改善だと思ってるし
0227デフォルトの名無しさん2016/03/06(日) 16:55:34.96ID:rlBUJ/rg
c++の仕様の拡大は信者のプライドの拡大と比例している。
02282132016/03/06(日) 17:32:52.89ID:r0r1JwnR
古い書き方がエラーになるわけじゃないから「規格の変化」は不適切だったね。
>>222 を見て「しまった」と思ったけど、他の良い表現が思いつかなかった。
でも >>227 に乗っからせてもらう。「仕様の拡大」がより適切だ。

規格や仕様じゃないけど、推奨される書き方は変化が大きいよね。
数年前のきれいなソースも、すぐに古臭くなる。
…などと知った口を叩けるほどC++の経験は積んでないんだけど。
0229デフォルトの名無しさん2016/03/06(日) 18:16:36.06ID:o7h42g4R
互換性維持のために既存の文法の隙間に新機能を詰め込んでいるような状態だからなぁ。
そのうち維持しきれなくなってOpenGLのようにばっさりやることになるんだろう。
0230デフォルトの名無しさん2016/03/06(日) 18:46:01.70ID:iWD/4muj
具体例
0231デフォルトの名無しさん2016/03/06(日) 18:54:13.36ID:O4MCW888
auto は既存文法の隙間狙いだね
0232デフォルトの名無しさん2016/03/06(日) 20:21:03.80ID:rlBUJ/rg
= 0 で pure virtual とかな。。
素人から見ても馬鹿みたいな構文だわ。
0233デフォルトの名無しさん2016/03/06(日) 21:30:59.08ID:0RQOBmjP
>>223
この発言って、本人は

メモリアロケーションが失敗するより先にPostMessageが失敗するようになって
プログラムでPostMessageを使っていた場合は動作不能になって困るから
その辺に対処しなければならない

ってつもりで書いていると思うんだけど、一部の人は

メモリアロケーションに失敗するより先にPostMessageが失敗するようになるから
メモリ不足のテストに使える

って読み違えているんだよね、わざとかもしれないが

でもそんな究極の生命力のログ取りソフトを作らなきゃならないときに
サブスレッド作ってメインスレッドにデータ渡すときにPostMessage使っている時点でバカなんだがな
0234デフォルトの名無しさん2016/03/06(日) 21:46:56.54ID:2oASoSJR
>メモリ不足のテストに使える
>って読み違えているんだよね

俺もずっとそう思ってたが、よく読み返したら違っていた
コピペ荒らしには何を言っても無駄だろうが
0235デフォルトの名無しさん2016/03/06(日) 23:29:20.12ID:ChxbUFgQ
461 デフォルトの名無しさん[sage] 2016/02/08(月) 22:06:08.66 ID:LnO11qfO

まあ商用でもシミュレーションソフトとか、メモリ不足や設定ミスしたらエラーも出さずに普通にセグフォで落ちる場合があるものも多いけど。

ご丁寧にエラーを出したところでメモリ増やすかメッシュ数減らすと言うのは変わらんわけで。

467 デフォルトの名無しさん[sage] 2016/02/09(火) 04:30:48.06 ID:1CYnHFpe

>>461
世の中にある商用のシミュレーションソフトとやらのほとんどは
おまいらが見たら噴飯物かあるいは卒倒するレベルのコードだと思う
とくに国産ソフトは

470 デフォルトの名無しさん[sage] 2016/02/09(火) 07:58:11.21 ID:sh9Vl//D

>>469
設定ミスでフォルトするのはどうかと思うが、メモリ一不足の対応は難しいな
痴呆症のようだから、定期的に貼ってやるよ。

471 デフォルトの名無しさん[sage] 2016/02/09(火) 08:07:47.87 ID:GGDlYrLi

Windowsでエクスプローラその他殆どのアプリがメモリ不足死んだ状態でも生き残らななきゃ
いけないシステム監視ソフトを書いたことがある俺に言わせるとそれほど難しいことじゃない
Windowsの場合、メモリアロケーションに失敗する前にPostMessageが失敗するようになるから
その辺に対応するのがコツ
0236デフォルトの名無しさん2016/03/06(日) 23:38:50.41ID:ChxbUFgQ
>>233-234
他プロセスがメモリ使い尽した状況でPostMessageが失敗する
という現象が発生するという無能クンの主張

無能クンがPostMessageの失敗に対応したとか関係ない

そのような現象が無能クンの主張どおり発生するなら、それはメモリ状況の観測に利用出来るということだ

無能クンの報告では、簡単に作れるメモリを使い尽くすテストプログラムで再現したそうだし 笑
0237デフォルトの名無しさん2016/03/07(月) 02:22:11.72ID:rcA1ymXW
オツムの弱さは仕方ないが
スレを荒らすのはいただけない
0238デフォルトの名無しさん2016/03/07(月) 04:14:17.45ID:1EfQqvnH
reinterpret_castながったらしい
なるべく使わせない為の配慮なんだろうけど
0239デフォルトの名無しさん2016/03/07(月) 06:54:32.46ID:HUiylToy
>>233
そもそも...

> メモリアロケーションが失敗するより先にPostMessageが失敗するようになって
自体がほんとかなぁ〜?
って思われてるし

> その辺に対処しなければならない
そのご自慢の対処方法が GetLastError( ) の確認もせずにリトライするだけ
とかのお笑いレベル

どう見てもたまたまうまく動いてるように見えたからどやってるようにしか見えん
0240デフォルトの名無しさん2016/03/07(月) 10:18:53.31ID:skfTtER3
>>238
読み方が分からないからなるべく使わないようにしてるw
リインタープリットであってるのかな
0241デフォルトの名無しさん2016/03/07(月) 10:22:22.50ID:TiPYYq0f
strlenは?
0242デフォルトの名無しさん2016/03/07(月) 10:37:35.54ID:VfKbAPeO
シュトーレン
0243デフォルトの名無しさん2016/03/07(月) 11:38:42.08ID:4dTN6Z0P
>>238
Yes, but my program depends on the function and works well so far.
0244デフォルトの名無しさん2016/03/07(月) 15:55:29.06ID:AqI6//Ed
reinterpret_cast<int>(x)ってやってることは結局(int)xじゃん。
いっそのこと(int)x使えばいいのに。
0245デフォルトの名無しさん2016/03/07(月) 16:07:40.49ID:4dTN6Z0P
>>244
Never!
0246デフォルトの名無しさん2016/03/07(月) 17:44:56.74ID:SPuLNVrG
>結局(int)xじゃん

reintrepret_castを何だと思っているんだろう
0247デフォルトの名無しさん2016/03/07(月) 18:00:16.97ID:Ie6AXs1q
コンパイルできない…だと?!
0248デフォルトの名無しさん2016/03/07(月) 18:41:28.00ID:rjj7cXsm
void F(std::string&& s)
{
 F(s);
}
sは右辺値参照なのにどうしてFに渡せないのですか?
0249デフォルトの名無しさん2016/03/07(月) 18:44:55.35ID:AwkwjYtb
左辺値だから
0250デフォルトの名無しさん2016/03/07(月) 18:47:33.85ID:vq5fVXSL
std::move(s)
0251デフォルトの名無しさん2016/03/07(月) 20:17:57.14ID:z9gSfyl1
右辺値参照は右辺値を参照しているものであってそれ自体は左辺値
0252デフォルトの名無しさん2016/03/07(月) 20:30:48.32ID:rcA1ymXW
まるで、式 []()->auto&&{return 0;}() が左辺値かのような物言いだな
0253デフォルトの名無しさん2016/03/07(月) 21:19:45.32ID:PJh8eKUi
問い
std::string && s = hoge();
sは右辺値か左辺値か
0254デフォルトの名無しさん2016/03/07(月) 22:01:51.49ID:rcA1ymXW
まるで左辺値か右辺値かのどちらかであるような物言いだ
0255デフォルトの名無しさん2016/03/07(月) 22:16:10.78ID:DhnnCcYX
え?左辺値じゃないの?
0256デフォルトの名無しさん2016/03/07(月) 22:19:04.83ID:be9Auz0b
>>253
は?何が言いたいのか意味不明
その式の評価値は真か偽だろ
0257デフォルトの名無しさん2016/03/07(月) 22:19:40.89ID:be9Auz0b
>>253
sはhoge()の戻り値
0258デフォルトの名無しさん2016/03/07(月) 22:21:10.23ID:addXPaOO
真偽値??
0259デフォルトの名無しさん2016/03/07(月) 22:22:18.18ID:addXPaOO
名前がついていて右辺値なんてあったっけ?
ないよな?
0260デフォルトの名無しさん2016/03/07(月) 22:30:41.58ID:rcA1ymXW
スコットメイヤーの本ですら(意図的だが)不正確な説明がしてあるので>>255が騙されるのは仕方ない
規格上はどちらでもない
0261デフォルトの名無しさん2016/03/07(月) 23:33:11.14ID:DhnnCcYX
>>260
どういう解釈になるんです?
この文だけでは未確定ってこと?
0262デフォルトの名無しさん2016/03/07(月) 23:58:07.53ID:rcA1ymXW
>>261
『std::string && s = hoge();』
この『s』は右辺値参照型の変数だが、式ではないので値のカテゴリー(lvalue,xvalue,prvalue)の概念は存在しない
02632622016/03/08(火) 00:01:44.10ID:xyKYQJcY
auto s2 = s;
のように式として使われて初めて左辺値になる
0264デフォルトの名無しさん2016/03/08(火) 00:12:01.42ID:xyKYQJcY
この例だと右辺値への自動変換が働くからわかりづらいな
「f ( s ) に含まれる式sは、型が右辺値参照型で値のカテゴリーは左辺値」
と言った方がいいだろうか
0265デフォルトの名無しさん2016/03/08(火) 00:13:06.20ID:A6lTQmi7
>>262-263
なるほど、確かにここだけではどれかとは言えないですね。
勉強になりました。ありがとうございます。
0266デフォルトの名無しさん2016/03/08(火) 07:10:35.81ID:jeIx1SXX
細かいこと言ってるとハゲるぞ
0267デフォルトの名無しさん2016/03/08(火) 07:58:44.45ID:s5rIDaCh
C++界隈ではハゲは弱点にならない、と思う。
規格でどう決まってるかは知らないけど。
0268デフォルトの名無しさん2016/03/08(火) 19:34:59.52ID:0k5HNdyV
C++でハゲが弱点になるかどうか
厳格に規格で決まっていたら
ハゲ病的すぎるだろ
0269デフォルトの名無しさん2016/03/08(火) 21:55:31.91ID:A6lTQmi7
C++マスコットの頭部が薄いのは、禿げ上がる程の高速動作を表現しています。
こうした考えられた仕様と設計を、一般の価値観で弱点と批判するのは論点がずれていますね。
0270デフォルトの名無しさん2016/03/08(火) 21:56:39.84ID:Q4atenOx
ズレてるのはお前のズラだろ
0271デフォルトの名無しさん2016/03/08(火) 22:06:57.27ID:A6lTQmi7
お前今俺のことハゲって言ったか?
0272デフォルトの名無しさん2016/03/08(火) 22:12:40.09ID:OMUEfTHQ
そんなこと言ってないハゲ
気のせいハゲ
これはただの語尾だハゲ
0273デフォルトの名無しさん2016/03/08(火) 22:34:06.49ID:+4p1BEPZ
言っとくけどハゲと坊主は違うからな
0274デフォルトの名無しさん2016/03/08(火) 23:26:46.03ID:40zCAszT
>>200
namespaceは同じ翻訳単位とは限らないお。
0275デフォルトの名無しさん2016/03/09(水) 00:01:35.54ID:gceSYQgA
同じネームスペースは必ず同じコンパイル単位だとは限らないけど
同じネームスペースの{}で囲われた部分は同じコンパイル単位になるだろ
さもなくば、}が無いです、ってコンパイラに怒られる
同じコンパイル単位で、{}は必ず対になってなきゃダメだからね

だからネームスペースどうこうってより、その後ろの{}こそが重要なんだよ
{}に囲われた部分は必ず同じコンパイル単位になるから
本当なら前方参照は可能なはず

今は同じクラス内に有るもののみ前方参照が可能だが
これはクラス定義内は{}で守られていて必ず同じコンパイル単位になることが保証されているからだとも考えられ
同じ理屈でネームスペースにも拡張しても良いはず
もっと単純に、同じコンパイル単位であれば、前方参照が可能としても良いと思うがね

今のクラス内のみ前方参照が可能とかという、中途半端な仕様は意味が分からないね
文法的に出来るんならやれよ、他の今風の言語は大体可能だぞ

C#なんか、コンパイル単位を飛び越えて前方参照が可能なように
並行してコンパイルするって聞いたことあるぞ、本当かどうかは知らんがな
未定義なシンボルに出会ったら、一旦中断して、別のファイルをコンパイルするって感じかね
全く本当かどうかは知らないし、適当だが、C++にそこまでの要求はしない
ただ、同じコンパイル単位であれば前方参照できても良いだろってだけの話
0276デフォルトの名無しさん2016/03/09(水) 00:52:56.35ID:gceSYQgA
極端な話、今のC++でもソースコード全体を適当なダミークラスで囲ってやれば
前方参照し放題の、順番なんか気にしない状態になるわけで(←実際には多少の制約はあるが)
既に、そういうことが現実に可能な状態なわけだから
同じコンパイル単位で前方参照を可能にすることは技術的に然程難しいことではないはずなんだよね
0277デフォルトの名無しさん2016/03/09(水) 00:53:35.71ID:R7oQ7N64
必要ないからだろ。
クラスのメンバ関数は前方宣言できないかわりに前方参照できるようにしてるだけで。
0278デフォルトの名無しさん2016/03/09(水) 01:02:25.39ID:gceSYQgA
//test.hpp
class name
{
  void method(); //←コレ
};

これがメンバ関数の実質的な前方宣言だろ
実体の方はcppファイルにあるんだからな
だから、C++的には、たとえクラス内の前方参照が出来なかったとしても、一応成り立つんだよ
なのに、クラス内に関してだけは、利便性のために前方参照が可能となっている

だったら、利便性のために、同じコンパイル単位内であれば前方参照可能としても良いだろ
0279デフォルトの名無しさん2016/03/09(水) 01:22:01.07ID:gceSYQgA
つまりは、もし仮にC++がクラス内で前方参照が出来なかったとしたら
クラス内で何か相互参照しているような場合は
必ずクラス定義とメンバ関数の実体は分けて定義してください、ってことになるわけだが
実際それで問題ないし、C++erには日常茶飯事にすら感じる話だが
これが面倒だからクラス内に関しては特別に前方参照を可能としたわけでしょ

でも、「相互参照している場合はクラス定義とメンバ関数の実体は分けて書いてください」
は、クラス内だけじゃなくて、C++の彼方此方に頻出するわけで
クラス内の相互参照問題だけ特別扱いする意味が良くわからないんだよね
技術的に可能な範囲で考えると、同じコンパイル単位なら前方参照可能だろう
0280デフォルトの名無しさん2016/03/09(水) 01:46:28.08ID:gceSYQgA
俺もね、C++が全く前方参照を許していないのだったら諦めもつくよ
むしろ清いとすら思う

でもクラス内だけは特別に前方参照可能なんだよ
もしクラス内の前方参照が出来なくても言語としては成り立つにも拘わらずだよ?
もし出来なくても、クラス内で相互参照が発生した場合は、クラス定義とメンバ変数の実体を分けて書けって話で
これはC++では日常だろ?仮にクラス内の前方参照が出来無くてもC++的には普通のこと、むしろ自然

でも何故かクラス内だけ前方参照可能なんだよな
同じクラス内に有れば、変数もクラスも関数も、前方参照可能なんだよ
実際、ダミーのクラスでコードを囲めば、クラスだろうが変数だろうが関数だろうが
前方参照し放題って書き方も可能で、一つのテクニック
それが可能なのだから、技術的には同じコンパイル単位であれば前方参照可能に出来る筈なんだよ
0281デフォルトの名無しさん2016/03/09(水) 02:13:30.73ID:gceSYQgA
訂正
クラス定義とメンバ「変数」の実体
↓
クラス定義とメンバ「関数」の実体
0282デフォルトの名無しさん2016/03/09(水) 04:38:36.51ID:XYqbGPFP
確かにクラスでforward-declarationがいらないが為にめちゃくちゃ解りにくいソース書いて来る奴らにイライラするときがあるな
0283デフォルトの名無しさん2016/03/09(水) 06:24:16.72ID:PsUKAneX
ぼくのかんがえたさいきょうのしーぷらすぷらす

の独演会は終わった?
0284デフォルトの名無しさん2016/03/09(水) 11:50:49.57ID:WF7rFyWl
「利便性を向上させる機能が一部既に存在しているのだから適用範囲を拡大すべき」
そんなにおかしな意見ではないと思うが
どこの世界にも「改善」を否定する283のような残念な人間は居るものだ
0285デフォルトの名無しさん2016/03/09(水) 11:55:58.57ID:c8zeaZJl
別に改善を否定してるとは限らないだろ?
単に長文を否定してるだけかもしれない
0286デフォルトの名無しさん2016/03/09(水) 12:05:50.76ID:1UcnLTLP
こんな所で吠えてても実装なんてされないよ?
0287デフォルトの名無しさん2016/03/09(水) 14:02:39.92ID:VjFIrQgn
反響があれば実装はされるだろ。
0288デフォルトの名無しさん2016/03/09(水) 14:25:54.39ID:WCvUs0lb
まあ長文はいらないよね。
別に大したこと言ってないんだから1レスで短く説明すればいい。
0289デフォルトの名無しさん2016/03/09(水) 14:26:38.30ID:3jrP1VBb
反響があるくらいならとっくにC++なんて廃れてるよ
0290デフォルトの名無しさん2016/03/09(水) 15:12:18.63ID:lSGTJ8xS
対偶を取ると、
「C++が廃れてないなら反響はなかった」
0291デフォルトの名無しさん2016/03/09(水) 17:36:52.78ID:lHuhk1uY
ADL周りの仕様が今以上に訳ワカメになるからダメだろう。

クラスと違って名前空間は後でいくらでも弄れるのだから、コード書く人間がどれが呼ばれるか今以上に予測が難しくなる。
0292デフォルトの名無しさん2016/03/09(水) 19:25:22.04ID:8DyMxRve
>>284
そう言うのがそれしかないとでも思ってるのか?
例えば inner class がどうあがいても前方参照できないことについてはどう思ってるんだい?
自分のことしか考えてなさそうだから
ぼくのかんがえたさいきょうのしーぷらすぷらす
って書かれるんだよ
0293デフォルトの名無しさん2016/03/09(水) 21:19:55.72ID:gceSYQgA
>例えば inner class がどうあがいても前方参照できない

struct outer
{
  struct inner_a
  {
    void method(){ inner_b::method(); }
  };

  struct inner_b
  {
    static void method(){};
  };
};

普通にinner_a内からinner_bを使えますが、いったい何のことを言っているんですか?
コンパイルもちゃんと通りますよ
0294デフォルトの名無しさん2016/03/09(水) 21:30:15.59ID:EHNG1aVZ
それはVSだからとかいうのがあったりする
0295デフォルトの名無しさん2016/03/09(水) 21:35:08.09ID:PsUKAneX
>>293
> いったい何のことを言っているんですか?
それはこっちの台詞だよ...
inner class 前方参照
あたりでググってから出直してこい
0296デフォルトの名無しさん2016/03/09(水) 21:37:16.35ID:gceSYQgA
そうなの?
0297デフォルトの名無しさん2016/03/09(水) 21:39:49.11ID:gceSYQgA
>>295
だったら、インナークラスの前方宣言が出来ないって書くべきで
「inner class がどうあがいても前方"参照"できない」
って書くのはおかしくないですか?そっちのミスでしょ
0298デフォルトの名無しさん2016/03/09(水) 21:53:21.58ID:gceSYQgA
VSだけかもしれないけど、こんな複雑なコードもちゃんとコンパイルできる

struct outer
{
  void method()
  {
    inner_a().method();
    auto obj = new inner_b::inner_inner;
    obj->method();
    obj->value = inner_b::inner_inner::enum_::e;
  }
  struct inner_a
  {
    void method()
    {
      inner_b::inner_inner().method();
    }
  };
  struct inner_b
  {
    struct inner_inner
    {
      enum struct enum_{ e, };
      enum_ value;
      void method(){}
    };
  };
};

一旦クラスで囲んでしまえば、こんな入り組んでいても、何事もなかったかのように前方参照が出来てしまう
C++を同一コンパイル単位内で前方参照を可能とすることに、文法的な隔たりや、技術的ハードルは無いという事だね
0299デフォルトの名無しさん2016/03/09(水) 21:56:46.43ID:WCvUs0lb
まだ荒らし足りないのか
0300デフォルトの名無しさん2016/03/09(水) 21:57:25.47ID:PsUKAneX
>>297
> 「inner class がどうあがいても前方"参照"できない」
> って書くのはおかしくないですか?
メソッドではなく inner "クラス" の前方参照ができるようになってから出直してこいよ
0301デフォルトの名無しさん2016/03/09(水) 22:05:10.18ID:WCvUs0lb
>>300
いやお前も何言ってるんだよ・・・。
0302デフォルトの名無しさん2016/03/09(水) 22:09:47.23ID:WF7rFyWl
>>292
「クラススコープでできていることと同等のことを一つの名前空間定義のなかでもしたい」
というID:gceSYQgAの話と関係無いことを言い出す理由が不明。
唐突に根拠も無く「自分のことしか考えてなさそう」とか言い出すあたり、
知覚障害か何か?
0303デフォルトの名無しさん2016/03/09(水) 22:10:12.26ID:jX68pRI9
この手の議論のためだけに無駄に頑張る人が多いのがc++ってイメージ。
0304デフォルトの名無しさん2016/03/09(水) 22:13:56.70ID:gceSYQgA
>>300
struct outer
{
  void method(){ inner_b obj; //←これ }
  struct inner_a
  {
    void method()
    {
      inner_b obj; //←これ
    }
  };

  struct inner_b{ };
};

VSだけかもしれないけど、インナークラスの前方参照は出来ますよ、ただし、メソッド内ではね

struct outer{ inner *ptr; inner{}; };
って書けない話だろうけど
struct outer{ struct inner; inner *ptr: struct inner{}; };
って前方宣言してあげれば良いだけで、大した手間ではない
同一コンパイル単位で前方参照できるといっても、例外は有って構わないわけで
struct hogehoge; と書くことぐらいの手間は全くの程度問題
0305デフォルトの名無しさん2016/03/09(水) 22:23:03.30ID:gceSYQgA
何事にも例外が有ってよいと思うわけです、ハイ
完ぺき主義者ではないので

仮に
「インナークラスの型のポインタ変数を前方参照っぽく定義より先に使って宣言したいときは
 struct hogehoge; と事前に前方宣言しなければならない」
というルールが有ったとしても、この程度は何の手間でもないから問題ないですね
0306デフォルトの名無しさん2016/03/09(水) 22:24:08.59ID:gceSYQgA
あーこれ間違ったわ
struct outer{ inner *ptr; inner{}; };
↓
struct outer{ inner *ptr; struct inner{}; };

struct が抜けてたわ
0307デフォルトの名無しさん2016/03/09(水) 22:25:04.02ID:WCvUs0lb
>>305
それならそのまま使えばいいじゃないの。
何に不満があるんだよ。
0308デフォルトの名無しさん2016/03/09(水) 22:25:25.73ID:eOjuPS6Y
int main()
{
struct A{ A(){} };
struct B{ A a; int x; };
B b = B();
printf( "%d\n", b.x );
0309デフォルトの名無しさん2016/03/09(水) 22:26:12.04ID:eOjuPS6Y
b.xがvc2015だと0なのに2012、2013だと不定値になります。何故でしょうか。
0310デフォルトの名無しさん2016/03/09(水) 22:28:49.66ID:lHuhk1uY
不定なのが偶々0なだけ
0311デフォルトの名無しさん2016/03/09(水) 22:30:44.15ID:av11/7D/
初期化されてないから
0312デフォルトの名無しさん2016/03/09(水) 22:32:19.48ID:WCvUs0lb
>>309
0が正しいと思う。MSのバグじゃないの?
0313デフォルトの名無しさん2016/03/09(水) 22:34:09.23ID:+X5y9V0s
>>309
0が正しい。
0314デフォルトの名無しさん2016/03/09(水) 22:35:46.14ID:+X5y9V0s
なので、VC++のバグに1票。
0315デフォルトの名無しさん2016/03/09(水) 22:37:39.69ID:PsUKAneX
>>302
できるからやればいいじゃん
って言うのは ID:gceSYQgA が言ってること以外にも色々ある
ってまで説明しないとわからんの?
主張するのは勝手だけど、長々やるほどじゃねーだろ
って言われてるだろ
0316デフォルトの名無しさん2016/03/09(水) 22:41:03.03ID:WCvUs0lb
ごめん血迷ってた。default-intializedだね。
0317デフォルトの名無しさん2016/03/09(水) 22:43:46.61ID:+X5y9V0s
>>316
zero initializeでは?
0318デフォルトの名無しさん2016/03/09(水) 22:46:47.91ID:lHuhk1uY
いやPODだから不定値だろ
0319デフォルトの名無しさん2016/03/09(水) 22:48:02.12ID:WF7rFyWl
PODだと不定値
などという仕様がどこから出てきたのか
0320デフォルトの名無しさん2016/03/09(水) 22:49:51.34ID:+X5y9V0s
>>318
だからゼロ初期化という仕様なんだって。
0321デフォルトの名無しさん2016/03/09(水) 23:01:30.54ID:WF7rFyWl
ついでに、PODがあるようには見えない
0322デフォルトの名無しさん2016/03/09(水) 23:05:53.89ID:WCvUs0lb
逆、非PODだから不定値。
自分はPODのカッコ付きと勘違いした。
0323デフォルトの名無しさん2016/03/09(水) 23:10:57.26ID:WF7rFyWl
ここまで、>>309の炎上学習法若しくは確認間違いという指摘無し
0324デフォルトの名無しさん2016/03/10(木) 01:14:31.68ID:lKwsVgJC
という>>323 の炎上学習法に見えるね
自分で確認するのが面倒だからって
0325デフォルトの名無しさん2016/03/10(木) 01:44:57.86ID:eUGHchpD
0になったり他の値になったりするのは、偶々だね。

12.6.5のサンプル
struct C {
C(){}
A a;
const B b;
int i;
int j = 5;
};
// initializes members as follows:
// OK: calls A::A()
// error: B has no default constructor
// OK: i has indeterminate value
// OK: j has the value 5

規格書読めない初心者は発言しないように。
0326デフォルトの名無しさん2016/03/10(木) 01:58:57.97ID:8KJ6+/BF
>>325
話を読めない人は発言してもいいんですか?
0327デフォルトの名無しさん2016/03/10(木) 02:32:53.57ID:mfhQ4lhr
>>325
お前さーC++14の規格票を持ってることだけが自慢なんだろ
俺も持ってるからお前の間違い突っ込んでやるよ
0328デフォルトの名無しさん2016/03/10(木) 02:47:23.86ID:eUGHchpD
タダで入手できるもの持ってると自慢できるのか?

じゃ、自慢しよう
どうだ、まいったか
0329デフォルトの名無しさん2016/03/10(木) 03:23:13.76ID:mfhQ4lhr
>>328
タダだと?どこで無料で入手出来るというんだ
お前もしかしてタダで入手したのか?
0330デフォルトの名無しさん2016/03/10(木) 03:41:17.30ID:mxNsUMFn
>>308-309
B() で B 型のオブジェクトが値初期化 "value initialize" される。 (8.5 p11)
B はユーザー定義のデフォルトコンストラクタを持たないクラス型なので、値初期化のプロセスとして
まずゼロ初期化 "zero initialize" され、そのあとデフォルト初期化 "default initialize" される。 (8.5 p8 bullet-2)
int 型の B::x がゼロ初期化されると値 0 になる。 (8.5 p6 bullet-1)
そのあと B::x がデフォルト初期化されるが、 int 型なので何も行われず 0 のまま。 (8.5 p7 bullet-3)

と言う感じで、 C++14 の規格に従うと 0 になる。

C++03 以降だと経路が多少違うものの同じ結果になるけど、古の C++98 では B::x は不定となってしまっていた。
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#35

MSDN 見る限りだと 2013 で value initialize に対応してそうなんで、 2013 で不定ならバグかな。
https://msdn.microsoft.com/en-us/library/w7wd1177%28v=vs.110%29.aspx
https://msdn.microsoft.com/en-us/library/w7wd1177%28v=vs.120%29.aspx
0331デフォルトの名無しさん2016/03/10(木) 10:36:48.16ID:OLUNjZSr
>>330
この仕様ってポインタに対しても有効?
以前似たような質問が議論されてたんだけど。
http://echo.2ch.net/test/read.cgi/tech/1439849418/184
0332デフォルトの名無しさん2016/03/10(木) 11:13:34.09ID:l944yzKo
330じゃないけどポインタもscalar typeだから同じくゼロ初期化でしょ
でもvalue initializeルールに依存するようなクラスは書くべきじゃないなあ
http://echo.2ch.net/test/read.cgi/tech/1439849418/184
をNode node;ってやっちゃったらやっぱりnode.nodeは不定だよ
こんなコードは書かずにちゃんとコンストラクタを書いて明示的にnullptrで初期化しなくちゃいかん
0333デフォルトの名無しさん2016/03/10(木) 11:23:42.71ID:mBEuB6ly
デストラクター作ってPODを諦めてるのに、適切に初期化するコンストラクター無いとか
ただのバグでしかない
0334デフォルトの名無しさん2016/03/10(木) 11:46:11.58ID:xbWf2tod
やっぱりvc2012でも2013でもxはゼロで初期化されません
バグですか
gccではゼロになります
0335デフォルトの名無しさん2016/03/10(木) 13:35:05.45ID:l944yzKo
バグだね
>>308のBはxの初期値が重要ならこれもバグ
0336デフォルトの名無しさん2016/03/10(木) 18:43:26.84ID:uK8a0ubO
VCの規格無視はいつもの事らしいから気にすんな
0337デフォルトの名無しさん2016/03/10(木) 20:58:27.62ID:l944yzKo
調べたらこのバグは2012年6月にはもう報告されているね
https://connect.microsoft.com/VisualStudio/feedback/details/746973/incorrect-c-11-value-initialization-for-type-with-implicitly-declared-but-non-trivial-default-constructor
VC++ 2015 RCでやっと直ったらしい
0338デフォルトの名無しさん2016/03/10(木) 21:21:03.49ID:wKO6hiHF
そもそもが、int()で0だなんて馬鹿げたルールができたばっかりに...
0339デフォルトの名無しさん2016/03/10(木) 21:38:31.66ID:kxB40Mc+
マイクロソフト「C++11対応は2015 Update 2から本気出す」
0340デフォルトの名無しさん2016/03/10(木) 22:09:45.41ID:1z8FCjXU
>>331
有効
using P = int *;
P p{};
はp==nullptrになる
0341デフォルトの名無しさん2016/03/10(木) 22:59:23.79ID:XIXQ4NCN
変数の初期値がどうなるかというだけの話でこんな議論になるのはC++ぐらいだろうなぁ。
0342デフォルトの名無しさん2016/03/11(金) 11:55:53.38ID:+X87dz7B
値か0の初期化を当たり前にし、初期化なしを例外記述にする方向性なのだろう。
今のところ(バグがあるので)値初期化を信じず、
未初期化を前提に書けと言うのは、ある意味正しいのかもしれないが、
考え方としては逆行しているね。
0343デフォルトの名無しさん2016/03/11(金) 12:52:11.72ID:Y6ECzuws
ある意味正しいじゃなくてパフォーマンスを考慮すると未初期化がデフォなのはC++としては完全に正しいんだよ
0初期化がデフォになってしまったらCを継承したC++の利点が薄れてしまう
value initializationこそがC++の思想に逆行してると思う
0344デフォルトの名無しさん2016/03/11(金) 13:05:18.46ID:kWA4jyXp
>>308
そもそも非POD型をメンバーに持つPOD型は非POD型になるだろ。

>http://cpplover.blogspot.jp/2010/06/c0xpod.html
>さらに、非PODな非staticデータメンバーを持たないこと。
0345デフォルトの名無しさん2016/03/11(金) 13:10:43.94ID:vYMpLkUm
コンストラクタの強制なんかを見ると、
うっかり未初期化の値を使うことによる不具合を防ぐって
言語思想も含まれてるでしょ。
となると、単純な値にも何らかの初期値が保証される方向性もアリかと。

初期値は保証されるが、そのことによるパフォーマンス上のペナルティがない、
プログラマが初期化すればデフォルト初期値の処理は発生しない、
という仕様なら八方丸くおさまると思ったり。
0346デフォルトの名無しさん2016/03/11(金) 13:12:37.67ID:+X87dz7B
>>343
正しいなら実装側でstack protectorなんてデフォルトにならないよ。
現状もパフォーマンスが欲しいときだけ別にするというのが基本だ。
0347デフォルトの名無しさん2016/03/11(金) 13:13:39.58ID:2/u08KSA
基本強制初期化で
int a = noinit;
みたいにしたら初期化しない方式で
0348デフォルトの名無しさん2016/03/11(金) 13:21:02.38ID:zH9xDiQd
デフォは未初期化で記述方法によっては初期化もしてくれるって方針だろ。

その記述方法が紛らわしいのと、規格通り実装しないのがメジャーなコンパイラの1つなのが問題

もう少し分かりやすい記述なら良いのに、現状だとデフォルトconstructorが呼ばれているようにしか見えない。
0349デフォルトの名無しさん2016/03/11(金) 14:21:15.08ID:49om0mRF
>>347
Dでは
int i = void; // デフォルトの初期値を省く

コンパイラのオプションで従来動作も選べればすぐ導入可能だと思うがね
0350デフォルトの名無しさん2016/03/11(金) 15:25:46.64ID:dykTweBs
>>349
だからどうしたって話

int i{0}; とタイプすることもできないのか
0351デフォルトの名無しさん2016/03/11(金) 15:35:13.63ID:kWA4jyXp
int i(); でもいいよ。
0352デフォルトの名無しさん2016/03/11(金) 15:36:56.24ID:kuBG6faz
int i = 0;
while(std::cin >> i) std::cout << i;
こんな馬鹿っぽい初期化いらんし邪魔だ
0353デフォルトの名無しさん2016/03/11(金) 18:27:14.35ID:0EDCO8WT
>>351
ウソを書くな
0354デフォルトの名無しさん2016/03/11(金) 22:49:53.55ID:YlUxysAB
>>351
それは関数宣言だと何度
0355デフォルトの名無しさん2016/03/11(金) 22:52:02.91ID:RA7SR1be
お前ら一体 何を言ってるんだ
0356デフォルトの名無しさん2016/03/11(金) 22:56:28.69ID:YlUxysAB
>>344
その通りだけど、ゼロ初期化とは何の関係も無い件
0357デフォルトの名無しさん2016/03/11(金) 23:02:09.89ID:4G2Dcq4h
15年C++書いてきて
別案件でC#と数ヶ月戯れたけど
C++はやっぱり変態だと感じたわ
良くも悪くも
0358デフォルトの名無しさん2016/03/11(金) 23:09:07.85ID:RA7SR1be
C++はぐちゃぐちゃ汚いよね
0359デフォルトの名無しさん2016/03/11(金) 23:30:50.24ID:RoKMXwVB
それは綺麗なC++コーダに出会ってない坊やだからさ
0360デフォルトの名無しさん2016/03/11(金) 23:31:51.83ID:+X87dz7B
またハゲの話してる…。
0361デフォルトの名無しさん2016/03/11(金) 23:33:00.33ID:RA7SR1be
いや書き方の問題じゃなくて言語仕様自体の問題なんd
0362デフォルトの名無しさん2016/03/11(金) 23:35:30.87ID:a6R8C1/e
C++はヘンタイだし、クソ言語だと思うけど、
大好き
0363デフォルトの名無しさん2016/03/11(金) 23:36:37.63ID:+X87dz7B
あなたの落とした物はこのC++CLIですか?それともこのJ#ですか?
0364デフォルトの名無しさん2016/03/11(金) 23:37:36.54ID:RA7SR1be
言語体系や構文ではC#が上だが、玄人好みなのはC++
0365デフォルトの名無しさん2016/03/11(金) 23:43:00.34ID:+X87dz7B
ヘンタイな玄人好みって、まるで素人童貞みたいな言い草だな。
0366デフォルトの名無しさん2016/03/11(金) 23:44:29.48ID:RA7SR1be
すまんわかるようでわからん
0367デフォルトの名無しさん2016/03/11(金) 23:53:03.42ID:YlUxysAB
お前ら一体 何を言ってるんだ
0368デフォルトの名無しさん2016/03/11(金) 23:54:21.02ID:RA7SR1be
ほんとだよ全く
0369デフォルトの名無しさん2016/03/12(土) 00:03:43.97ID:z2WBnFu0
でもそれがc++なんだよね。
0370デフォルトの名無しさん2016/03/12(土) 00:35:06.18ID:FH3bqKTZ
こういうことをC++でやるにはあの機能ではダメでこの機能を使ったこの設計でなければならない
っていう無知と思い込みから汚いコード書いて無駄に苦労してる人は珍しくないぞ
0371デフォルトの名無しさん2016/03/12(土) 01:39:29.17ID:Zbyfy48z
自分だけはキレイなコードかいてるという前提
0372デフォルトの名無しさん2016/03/12(土) 01:43:01.42ID:Pl4Qm8o2
データ構造を隠蔽したままinterfaceを隔離する方法ってありませんか?

class IContainer {
};

class Ifold {
  virtual do(IContainer& container) const = 0;
};

class VectorContainer : public IContainer {
private:
  std::vector<double> container_;
};

みたいな感じでIfoldのインターフェースはコンテナに依存しないようにしたいです。
visitorパターンにするとIContainerに、Ifoldの具象クラスのacceptメソッドが増えていくのが…。
何かうまい実装はありませんでしょうか?
0373デフォルトの名無しさん2016/03/12(土) 02:13:17.49ID:VClvi+pB
言っている意味が全然わからない。
Ifoldの具象型がIContanerの具象データに依存してるって事?
上位型だけでやりとりしたいなら、IfoldかIContainerどっちでも良いが、
具象型の中でダウンキャストでもすればいいだろ。
0374デフォルトの名無しさん2016/03/12(土) 02:16:35.39ID:VClvi+pB
もし外でvisit/accept可能か確認したいなら、
bool supports(IContainer&) (またはIfold&)とか付ける。
それ以外思いつかないが、そういうことじゃない?
0375デフォルトの名無しさん2016/03/12(土) 02:18:19.39ID:Pl4Qm8o2
>>373
Ifoldの具象型がIContainerの具象型が中で持ってるデータ構造に依存するのはOKです
ダウンキャストというと、どのように行えばいいですか?
インターフェースクラスからは具象クラスがわからないため何にダウンキャストすればいいか決定できません…
0376デフォルトの名無しさん2016/03/12(土) 02:19:31.10ID:Pl4Qm8o2
>>374
すみません、具体的にどのような実装になるかイメージができません…
0377デフォルトの名無しさん2016/03/12(土) 02:21:31.37ID:VClvi+pB
>>375-376
いまいち要領を得ないが、具象クラスにdo(IContainer& x);を実装、
中でIContainerからVectorContainerなどにキャストすれば良いんじゃないのか?
これ以上は何がしたいのかよくわからないから何とも言えん。
0378デフォルトの名無しさん2016/03/12(土) 02:42:31.41ID:VClvi+pB
もしかしてIfoldではなく、その具象クラスすら、
受け取るべき具象コンテナが決まってないって事か?
それもう設計破綻してるから無理だろ。

そうではなく特定型にキャスト可能かわからないってだけなら、
自分でID付けてis_a(int id)とか実装して調べるか、dynamic_cast。
0379デフォルトの名無しさん2016/03/12(土) 02:51:53.53ID:9NhLr4qt
>>372
class IContainer {
virtual double& at(int index)=0;
virtual void push_back(double& v)=0;
};
0380デフォルトの名無しさん2016/03/12(土) 09:19:37.98ID:Vp+P3H45
>>372
std::accumulateみたいなことがしたいように見受けられるけどそうかね?
0381デフォルトの名無しさん2016/03/12(土) 09:54:48.36ID:fbT4KBM6
std::stack<T, C>を
IContainerを受け取るIStackに魔界造したイメージだろうきっと
0382デフォルトの名無しさん2016/03/12(土) 11:36:06.87ID:oS3fCNyN
欲しいのは単にiteratorじゃね?
visitorはfoldの仕方が変わるからaccept必要でしょ?
0383デフォルトの名無しさん2016/03/12(土) 13:19:48.43ID:VClvi+pB
てっきりテンプレート無しに異なる数値型を扱いたいって事かと思ってたよ。
テンプレート使うならStrategyだけで済んじゃうし。
0384デフォルトの名無しさん2016/03/14(月) 22:12:09.15ID:bYJAKtH4
結局何だったんだ…?
0385デフォルトの名無しさん2016/03/15(火) 18:46:33.79ID:7F6lH4i+
すみません、visitorパターンを使うとacceptを持つインターフェースクラス(ライブラリコード)が、
具象クラスであるvisitor(ユーザーコード)に依存してしまうという問題を解決したかったのですが、いまいち伝わらなかったみたいです。

>>378
型タグによるダウンキャストは、メンテの観点から採用できません...

>>382
自分がなにを抽象化したいのか再考するきっかけになりました。
ありがとうございました。

結局visitorを内部のコンテナ型に依存するインターフェースクラスとすることで解決しました。
実際にはIVectorContainerとかIListContainerのような形にしました。
正確にはvalue_typeは決まってたのでテンプレートテンプレートパラメータを使いました。
0386デフォルトの名無しさん2016/03/15(火) 20:37:53.71ID:drELySke
それだとデータ別にインターフェースできるから統一できないんじゃないの。
ダウンキャストの方が見えてる分まだマシかと。
0387デフォルトの名無しさん2016/03/15(火) 20:46:48.46ID:7F6lH4i+
>>386
ダウンキャストだとコンテナ型が増えるたびにif文を追加しなくてはならず、
しかも追加し忘れてもコンパイル時にエラーが出ないので…
0388デフォルトの名無しさん2016/03/15(火) 20:51:40.14ID:drELySke
>>387
またわけわからん事言っとるね君。
テンプレートだろうが、結局特定のコンテナのインターフェースに依存するだから、
その部分は場合分けしなきゃならんでしょ。
0389デフォルトの名無しさん2016/03/15(火) 20:54:05.87ID:7F6lH4i+
>>388
いや、それはaccept側のオーバーライドで解決します
これがvisitorパターンの一般的な実装かと思いますが、どこがわかりませんか?
0390デフォルトの名無しさん2016/03/15(火) 21:12:36.21ID:drELySke
>>389
うむわけわからんよ。
どうやってacceptのオーバーライドで別種のvisitorを分ける?

そもそもテンプレート型に仮想関数付ける形こそ始末が悪くメンテしにくいのだから、
それならいっそインターフェースも消して、
テンプレートの構造的部分型だけで十分だと思うんだが。
0391デフォルトの名無しさん2016/03/15(火) 21:13:54.39ID:7F6lH4i+
>>390
家に帰ったら実装書きます
0392デフォルトの名無しさん2016/03/15(火) 22:59:29.47ID:7F6lH4i+
>>390
こういうことです
https://ideone.com/JpA22R

これダウンキャストで実装すると、acceptを一つにまとめてif文で一つずつキャストを試すわけですよね?
その場合ConcreteXxxContainerがひとつ増えるとacceptを修正し忘れてもコンパイルが通ってしまって困ります
0393デフォルトの名無しさん2016/03/15(火) 23:00:15.31ID:18/5NGhU
visitorクラスの基底クラスをライブラリ側が提供すれば良いのでは?
0394デフォルトの名無しさん2016/03/15(火) 23:01:00.99ID:7F6lH4i+
>>393
という風にしました
0395デフォルトの名無しさん2016/03/15(火) 23:04:19.56ID:z48QWO4Q
ダウンキャストとか言ってるアホはやばいだろ
コード書かせちゃダメなレベル
0396デフォルトの名無しさん2016/03/15(火) 23:11:15.71ID:18/5NGhU
>>394
申し訳
0397デフォルトの名無しさん2016/03/15(火) 23:48:10.07ID:L3nufqEx
結局具体的に何をやりたいのか分からんな
そもそもVisitorパターンが本当に適切なのか?
Visitorパターンみたいな汚くなりがちなものはなるべく避けるべきだと思うが
0398デフォルトの名無しさん2016/03/16(水) 06:31:57.64ID:+XU07v9B
>>392
なんだオーバーライドじゃなくてオーバーロードじゃないの。
静的なのがいいなら構造部分型や標準コンテナの模倣で十分だろう。
そこまでしてインターフェースとVisitorに拘る理由は何?

>>395
dynamic_castなら危険でも何でもない。
そうやってダウンキャストを危険危険と、
いちいち大げさに騒ぎ立てる方がアホというか初心者だな。
実際OOPなら多くの場所で使われてるし、設計が簡単になるなら使っても良いんだよ。
0399デフォルトの名無しさん2016/03/16(水) 06:42:44.25ID:+XU07v9B
そんなに静的なチェックが重要と言うなら、オーバーロードもやめとけ。
それぞれ別の名前にしたほうがより安全確実だからね。馬鹿みたいだけど。
0400デフォルトの名無しさん2016/03/16(水) 07:47:22.56ID:Jbc4KVVa
そんなに言うならコード提示すればいいのに
0401デフォルトの名無しさん2016/03/16(水) 11:05:22.41ID:9QBMlTeC
> ダウンキャストとか言ってるアホはやばい
> そうやってダウンキャストを危険危険と

個人的には「ダウンキャスト」っていう用語自体がアホ
アップ/ダウンの概念を不用意に持ち込んだ初心者ワードだと思う

暗黙の型変換(implicit conversion)
キャスト演算[明示的な型変換(explicit conversion)

後者を単にキャストと呼ぶのがC/C++の文化
0402デフォルトの名無しさん2016/03/16(水) 12:20:06.84ID:hEm8Gz+A
>>401
お前のルールをさも普遍的なものであるかのように語られても
0403デフォルトの名無しさん2016/03/16(水) 15:13:44.46ID:YWKSC+YR
参照を返す関数は戻り値の一時オブジェクトは作成されないのですか
0404デフォルトの名無しさん2016/03/16(水) 17:05:09.47ID:noSrSdLM
一体どこに一時オブジェが作成される要素があるというのか
0405デフォルトの名無しさん2016/03/16(水) 17:32:24.76ID:P1US5avI
>>403
まさかとは思うがローカル変数の参照を返したりしてないよな?
0406デフォルトの名無しさん2016/03/16(水) 17:34:09.97ID:bCkVw2Gt
>>405
返すこともありますが
参照が有効か無効かは問題にしてません
0407デフォルトの名無しさん2016/03/16(水) 17:35:54.73ID:P1US5avI
漢だな
0408デフォルトの名無しさん2016/03/16(水) 18:42:01.29ID:Sre9WvB0
天才だ
0409デフォルトの名無しさん2016/03/16(水) 20:48:14.54ID:Zxg3aYLU
>>401
それダウンキャストと何の関係もない話だよね?
0410デフォルトの名無しさん2016/03/16(水) 21:09:39.81ID:8e8fbPBE
>>401
律儀に規格用語だけ使って話すのと
アホかどうかは関係ねえぞ

おまえが体現しているようにw
0411デフォルトの名無しさん2016/03/16(水) 21:20:12.09ID:ejdJRW9Z
>そんなに静的なチェックが重要と言うなら、オーバーロードもやめとけ。

これ意味不明だな
オーバーロードは静的なのに
0412デフォルトの名無しさん2016/03/16(水) 21:42:57.82ID:+XU07v9B
>>411
オーバーロードに型チェックはあるが、
ユーザー定義変換のように、使用者側から見れば暗黙に見える変換が起きうるぞ。
なので確実なチェックが欲しいなら一つずつ名前を付けた方が良い。
どうだ馬鹿みたいだろう?
0413デフォルトの名無しさん2016/03/16(水) 21:51:19.58ID:noSrSdLM
>>412はstd::abs(double)やstd::fabs(float)が許せないタイプ
0414デフォルトの名無しさん2016/03/16(水) 21:53:11.55ID:8e8fbPBE
そんなに動的なチェックが重要というなら、dynamic_castもやめとけ。
0415デフォルトの名無しさん2016/03/16(水) 21:56:22.65ID:9IPG0ZaQ
だからdynamic_cast版のコード書いてみろってば
じゃないと比較のしようがない
0416デフォルトの名無しさん2016/03/16(水) 22:14:17.92ID:Sre9WvB0
男ならCスタイルキャストオンリー
0417デフォルトの名無しさん2016/03/17(木) 08:31:39.81ID:yET/+Bsj
>>412
> 変換が起きうるぞ。
意味わからん
具体例プリーズ
0418デフォルトの名無しさん2016/03/17(木) 10:21:34.32ID:mXayW7+h
>>417
あんま触るな
コード出さない時点で誰かわかるだろ
0419デフォルトの名無しさん2016/03/17(木) 12:44:04.09ID:Mb/PAzMm
仮に変換が起こったとしても、静的でしょ
dynamic_castとは別物
0420デフォルトの名無しさん2016/03/17(木) 21:19:25.81ID:Nqbbnzs6
githubに置いてあるゲームをmakeするとコケた。
error: cannot convert 'bool' to 'boolean' for argument '2' to 'int jpeg_read_header(j_decompress_ptr, boolean)'
jpeg_read_header(&cinfo, true);

エラーをみて思ったんだが、bool 型と boolean 型の違いって何なんだろ?
0421デフォルトの名無しさん2016/03/17(木) 21:27:52.26ID:3douJvdz
>>417
void func( std::string );

func( "filename" ); ← 1

1.大丈夫だが、func( char* )ではないし、std::stringの構築が行われている


のやつ言ってるんじゃない?
ユーザ定義変換と書いてあるし
0422デフォルトの名無しさん2016/03/17(木) 21:36:57.43ID:1OZ8wjSn
boolをbooleanに変換するoperatorひとつ記述してやればよくね?
そんなに手間じゃないやろ
0423デフォルトの名無しさん2016/03/17(木) 21:44:32.93ID:K9pRNqs8
>>420
コードの該当箇所見た?
0424デフォルトの名無しさん2016/03/17(木) 22:09:31.51ID:Nqbbnzs6
jpeglib.hでboolean型が定義されていた。
(boolean) tureでコンパイルは通る。
Cにはbool型は無いんだな。
0425デフォルトの名無しさん2016/03/17(木) 22:12:09.48ID:K9pRNqs8
ないねえ
0426片山博文MZ ◆T6xkBnTXz7B0 2016/03/17(木) 22:20:29.77ID:ucqcC/SU
stdbool
0427デフォルトの名無しさん2016/03/17(木) 22:38:53.07ID:rjBvJtG9
あるっちゅーねん
0428デフォルトの名無しさん2016/03/17(木) 22:40:27.06ID:ucqcC/SU
あるっ中年
0429デフォルトの名無しさん2016/03/17(木) 22:41:49.16ID:ucqcC/SU
アル中中年
0430デフォルトの名無しさん2016/03/17(木) 22:42:41.64ID:JPCzu/ni
C17で入れるか審議中。
0431デフォルトの名無しさん2016/03/17(木) 23:12:37.74ID:/lOxP0ET
>>421
でそれって
> なので確実なチェックが欲しいなら一つずつ名前を付けた
で解決できるんか?
0432デフォルトの名無しさん2016/03/17(木) 23:19:50.72ID:dAtTnfZR
気付き易くした俺天才
ということだろう
f_char(""); //OK
f_string(""); //きっと誤り
0433デフォルトの名無しさん2016/03/18(金) 00:31:37.54ID:bZVTun5z
>>424
C言語はスレ違いだがC99から_Boolという型がある
stdbool.hをincludeしたらboolも定義される
0434デフォルトの名無しさん2016/03/18(金) 05:07:52.40ID:bw5Y7I/7
ゼロオーバーヘッドでないなら他の言語を使った方がいい
実行時効率以外に何の理由があってC++なんぞ使うのか
0435デフォルトの名無しさん2016/03/18(金) 06:23:08.41ID:bw5Y7I/7
一見関係ありそうで全く無関係の書込を強めの口調ですることで、スレのおかしな流れを止めるライフハック
0436片山博文MZ ◆T6xkBnTXz7B0 2016/03/18(金) 06:47:57.93ID:Ap+aghgX
それよりお前らClangのソースを読んでみろよ
この世のものとも思えない複雑怪奇
ビルド時間がReactOSよりも長いと来てる
0437デフォルトの名無しさん2016/03/18(金) 13:00:52.70ID:RPKOB45D
convertException(env, [=] () {
Wrapper<WrapperTest>(env, thisj).destroy();
});

↑このコードの[=] () {〜}ってどういう意味?
0438デフォルトの名無しさん2016/03/18(金) 13:08:35.67ID:W5j8+q1I
ttp://en.cppreference.com/w/cpp/language/lambda
0439デフォルトの名無しさん2016/03/18(金) 13:57:19.97ID:Kcr5mRax
[=]は俺も初めて見たときなんじゃそりゃーってなった
0440デフォルトの名無しさん2016/03/18(金) 15:44:12.24ID:InA5se8Z
>>437
「C++ ラムダ式」で検索するのが第一歩。
>>438 は正確なのだろうけど、英語というハードルの高低が人により…。
0441デフォルトの名無しさん2016/03/18(金) 16:01:29.94ID:HFSK+zOK
[](){}();

!?
0442デフォルトの名無しさん2016/03/18(金) 16:16:31.96ID:410UcNdt
[=a,&b,&c,=d,&e]とか一々修飾しないといけないの?
0443デフォルトの名無しさん2016/03/18(金) 16:29:45.63ID:FVNcSrUO
一律同じ条件じゃダメなときはね
0444片山博文MZ ◆T6xkBnTXz7B0 2016/03/18(金) 16:30:09.19ID:Ap+aghgX
>>442
[=]
[&]
[this]
を使え
0445デフォルトの名無しさん2016/03/18(金) 19:11:24.91ID:oTJE6YWd
結局ラムダ式を使うべきところが分からないまま数年経つ
0446デフォルトの名無しさん2016/03/18(金) 19:44:50.08ID:UMQZP4zp
( ・∀・)つ-[](){}();-
0447デフォルトの名無しさん2016/03/18(金) 20:18:38.69ID:vJhS3HXJ
ラムダ式はインラインになり得る?
0448デフォルトの名無しさん2016/03/18(金) 21:20:10.79ID:gDAbGK2s
map を使うとき,キーについて operator-() を定義する必要があるとのことですが,operator==() の定義は必要ないのでしょうか?
実際 operator==() を定義しないままで動いているようですが,気持ち悪いです.
よろしくお願いいたします.
0449デフォルトの名無しさん2016/03/18(金) 21:30:29.40ID:FKb875f6
記号でなんとかしようとするから複雑怪奇で意味不明になっていく
0450デフォルトの名無しさん2016/03/18(金) 22:06:18.03ID:vhFEV+GW
algorithmを使う時にはラムダを結構使うかな。
0451デフォルトの名無しさん2016/03/18(金) 22:08:14.37ID:oKqsBnC/
ファンクタはもう出番ないんですか
0452デフォルトの名無しさん2016/03/18(金) 22:19:30.53ID:vhFEV+GW
>>448
そんな話はじめて聞いた。
operator<()か、mapのテンプレートパラメータで適切な比較関数を指定するか、のどちらかやっとけば問題ないはず。
0453デフォルトの名無しさん2016/03/18(金) 22:20:00.80ID:jzV+DAcw
ある程度長くなるなら、ラムダじゃないほうが良くない? そうでもない?
0454デフォルトの名無しさん2016/03/18(金) 23:38:29.84ID:BXTY6QO1
実行ファイルにバイナリファイルやテキストファイルなどを同梱したいのですが、どうやればいいのでしょうか?
0455デフォルトの名無しさん2016/03/18(金) 23:41:49.45ID:fdaB6v5T
ソースファイルへ変換する。
04564542016/03/19(土) 01:01:05.43ID:09FPc+yt
>>455
それだと起動した時のメモリ使用量がスゴイことになりませんか?
jarみたいにできたらいいのですが…
0457片山博文MZ ◆T6xkBnTXz7B0 2016/03/19(土) 01:38:48.87ID:qPghKix4
>>456
zlibを使う
0458デフォルトの名無しさん2016/03/19(土) 02:01:48.98ID:ojXVuQaH
どれぐらいのサイズのものを同梱したいんだろ。
メモリを気にするってことは
PCなら数百MBを越え、でかいときには楽に1GB越えるサイズかな。
ひょっとしたらターゲットが組み込みマイコンで小メモリなのかな
0459デフォルトの名無しさん2016/03/19(土) 04:25:33.28ID:A8zNJX4o
>>454
リソースに追加
0460デフォルトの名無しさん2016/03/19(土) 05:34:50.36ID:u4PbgbYy
組み込みなら好きな場所にファイルを書き込めるんだから実行バイナリにくっつけるメリットが無い
0461デフォルトの名無しさん2016/03/19(土) 06:22:04.15ID:aVqCTfNk
>>460
> 組み込みなら好きな場所にファイルを書き込める
意味わからん
今時 Linux や Windows Embedded 使ってる組み込みなんていくらでもあるのに
0462デフォルトの名無しさん2016/03/19(土) 07:17:32.18ID:fKG0+8Dg
>>454
Windows + Visual Studio ならリソースに突っ込むのが一番簡単
でもゲーム開発とかなら別個にパックするファイルを用意した方がいい
0463デフォルトの名無しさん2016/03/19(土) 09:27:46.68ID:oD5CZDwR
>>452
なんで operator<() だけでいいのでしょうか?
0464デフォルトの名無しさん2016/03/19(土) 09:32:44.77ID:i3aw7Uuy
むしろless以外(同値判定など)がどうして必要なのか
0465デフォルトの名無しさん2016/03/19(土) 09:59:57.29ID:tKkEJPlU
mapは内部で要素に順序をつけて管理しているため、strict weak orderを満たすlessが必要

順序づけ(要はsort)の条件を指定するのに==では足りないだろう。
0466デフォルトの名無しさん2016/03/19(土) 10:18:49.25ID:i3aw7Uuy
しまったまた自演に反応してしまった
0467デフォルトの名無しさん2016/03/19(土) 10:28:37.96ID:/R8BseZf
>>463
operator<があれば同値判定も出来るからというのが本当の答え
!(a<b) && !(b<a)ならa==b
0468デフォルトの名無しさん2016/03/19(土) 10:42:20.95ID:oD5CZDwR
>>467
ありがとうございます.
0469デフォルトの名無しさん2016/03/19(土) 11:56:29.54ID:i3aw7Uuy
>>467
どうしてそう息を吸ってはくような嘘をつくのか
0470デフォルトの名無しさん2016/03/19(土) 12:07:33.31ID:i3aw7Uuy
mapのキーの話か
勘違いした失礼>>467
0471デフォルトの名無しさん2016/03/19(土) 12:33:51.72ID:P4VbUWO2
変数名はhogeとfooとunkoのどれがいいですか?
0472デフォルトの名無しさん2016/03/19(土) 14:29:27.12ID:SYQTFOu+
昔はhogeは通用したけど、今時の若い衆にいきなり使うと、なんなのこの人と思われることがあるらしい
0473デフォルトの名無しさん2016/03/19(土) 14:53:53.05ID:g1UHnDq8
昔から「hoge=コミュ障」というイメージです
0474デフォルトの名無しさん2016/03/19(土) 15:06:03.88ID:4a76PkUY
enumと文字列を同時に宣言するマクロを組んでいるのですが、

#define STR(head ,name) head ## name

#define MAKE(...) \
typedef enum _ENUM{ \
STR(ENUM_,__VA_ARGS__ ),ENUM_Num \
} ENUM; \
const char *Name[ENUM_Num] ={ #__VA_ARGS__ };

というマクロで
MAKE(one,two,three)
とすると、本来はENUM_one ENUM_two ENUM_three というenumの要素が得られるはずなのに、
なぜか生成されるのはENUM_one two threeの三つになってしまいます。
Visual Studio 2015 CommunityのIntelisenceでのエラーなのですが、
これは本来は予期している結果が得られているのでしょうか?
それともこいつが言うように実際は後者のような宣言になっているのでしょうか?
0475デフォルトの名無しさん2016/03/19(土) 15:37:01.96ID:4a76PkUY
>>474です 
すみません。ものすごい馬鹿な勘違いをしていました。__VA_ARGSは,も含めてそのまま放り込む
ためのものなんですね。
0476デフォルトの名無しさん2016/03/19(土) 15:37:46.60ID:4a76PkUY
すみませんが、>>474でやろうと思っていることを実装できるマクロは
どうやって組めばいいのでしょう?
0477デフォルトの名無しさん2016/03/19(土) 15:54:23.67ID:ni3uOtuZ
>>476
https://www.google.co.jp/search?q=boost+preprocessor

BOOST_PP_SEQ_〜 を使えば MAKE((one)(two)(three)) でいけるはず。
0478デフォルトの名無しさん2016/03/19(土) 15:57:26.06ID:ni3uOtuZ
SEQ にしないといけないのは昔の話だった。
いまは MAKE(one,two,three) でもいけそう。
http://d.hatena.ne.jp/DigitalGhost/20111205/1323052916
0479デフォルトの名無しさん2016/03/19(土) 19:11:04.92ID:4a76PkUY
>>476 ありがとうございます!
私はboostを全く知らなかったのですが、今入れてきました。

しかしいまいちよくわかったいないので、どうかboost/preprocessorを使った
プログラムをご教授願えませんでしょうか?
0480デフォルトの名無しさん2016/03/19(土) 19:48:34.76ID:4a76PkUY
調べていってはいるものの、全く理解が追い付きません…
(a ,b , c)の引数に対して、
enum{
  ENUM_a,
  ENUM_b,
  ENUM_c,
  ENUM_Num
}
が生成できれば締め切りに間に合うのです!
どなたかお願いします!
0481デフォルトの名無しさん2016/03/19(土) 20:06:06.20ID:SYQTFOu+
あ、2ch新参の人だ!
2ch新参の人がいるぞ! 囲め!
0482デフォルトの名無しさん2016/03/19(土) 20:13:11.30ID:cIZsYOxL
どうしてもマクロじゃないと締め切りに間に合わない状況ってなんだろうね
0483デフォルトの名無しさん2016/03/19(土) 20:59:41.54ID:5djHDgqa
#, ##演算子

文字列化演算子・トークン連結演算子
0484デフォルトの名無しさん2016/03/19(土) 21:05:44.25ID:4a76PkUY
>>483 __VA_ARGS__で受け取った場合、引数が(a,b,c)だと
enum{
  ENUM_ ## __VA_ARGS__,
  ENUM_Num
}
としても
enum{
  ENUM_a,b,c,
  ENUM_Num
}
になっちゃいます
0485デフォルトの名無しさん2016/03/19(土) 21:35:28.30ID:IPOoQOnL
ずいぶんレベル下がったなこのスレ
0486デフォルトの名無しさん2016/03/19(土) 21:51:12.72ID:VQqTJbFl
4引数まで版でconst charの中身の展開は省略

#define SELECT4(d1, d2, d3, d4, name, ...) name
#define MAKE_ENUM(...) SELECT4(__VA_ARGS__, MAKE_ENUM_4, MAKE_ENUM_3, MAKE_ENUM_2, MAKE_ENUM_1)(__VA_ARGS__)
#define MAKE_ENUM_1(key) ENUM_ ## key
#define MAKE_ENUM_2(key, ...) ENUM_ ## key, MAKE_ENUM_1(__VA_ARGS__)
#define MAKE_ENUM_3(key, ...) ENUM_ ## key, MAKE_ENUM_2(__VA_ARGS__)
#define MAKE_ENUM_4(key, ...) ENUM_ ## key, MAKE_ENUM_3(__VA_ARGS__)

#define MAKE(...) \
typedef enum _ENUM{ \
MAKE_ENUM(__VA_ARGS__), ENUM_Num \
} ENUM; \
//const char *Name[ENUM_Num] ={ #__VA_ARGS__ };
0487デフォルトの名無しさん2016/03/19(土) 22:03:39.89ID:4a76PkUY
>>486 ありがとうございます
恐らく本格的なプリプロセッサを組まれる方は任意引数でやっているだろうなぁ
とは思いますが、自分の力量にしたがいます。
0488デフォルトの名無しさん2016/03/20(日) 01:20:47.66ID:3h/wnv4V
なにバカ言ってるんだか
プリプロセッサでループや再帰(的処理)を行うには何らかの形で
作者が想定した処理できる限界の数だけのマクロをベタ書きで用意するしかない
事前の用意不要で任意の数をループや再帰で処理するのは元より不可能
0489デフォルトの名無しさん2016/03/20(日) 01:24:49.08ID:YNMOH2/p
なめくさりミステイクしてね?
0490デフォルトの名無しさん2016/03/20(日) 02:24:48.46ID:yN6fzEfa
今時C++でマクロ展開のループとかしてる時点で論外だしな。
0491デフォルトの名無しさん2016/03/20(日) 02:26:06.45ID:yN6fzEfa
いやループはマクロだけじゃ無理か。再帰のしかも一定数までだな。
0492デフォルトの名無しさん2016/03/20(日) 04:59:40.07ID:wXobkPts
ハハワロス
0493デフォルトの名無しさん2016/03/20(日) 09:05:43.61ID:9j4drtjC
__VA_ARGS__なんて使わないで、こういう風にすればいいだけじゃ?
http://www.geocities.jp/rage2050a/rEnumStr/rEnumStr.html
0494デフォルトの名無しさん2016/03/20(日) 09:29:08.28ID:9j4drtjC
ちょっとだけ探した限りだと__VA_ARGS__使うやり方ではこのやり方が一番柔軟で良さそう
http://www.gamedev.net/page/resources/_/technical/apis-and-tools/maintenance-free-enum-to-string-in-pure-c-with-better-enums-r4230
数の制限はやっぱりベタ書きでなんとかしなくちゃいけないけどね
0495デフォルトの名無しさん2016/03/20(日) 14:17:44.97ID:Q9e0J8ZE
BOOST_PP_AUTO_RECってのがある。
こいつは例えばあるマクロ関数「FUNC」があったとして、
再帰の回数分だけFUNC_1 FUNC_2…と作り出す機能がある。
あなたが求める機能は、もし再帰的に書けるなら
MAKE_ENUM_ITER(key, ...) ENUM_ ## key, MAKE_ENUM_ITER(__VA_ARGS__)
のように書けばいいわけだから、

後はわかるだろ?
0496デフォルトの名無しさん2016/03/20(日) 14:19:27.99ID:Q9e0J8ZE
sageてなかった
0497デフォルトの名無しさん2016/03/20(日) 15:57:09.34ID:NZgllOnE
誰に向けたレスだ
> 再帰の回数分だけ
をどうマクロで処理してるかわかってる?
設計としては再帰の回数を管理するカウンタ用のマクロを例えば
COUNT_10,COUNT_9,...と必要な数だけベタ書きで用意して処理に使っているので
あらかじめ用意されてるカウンタ用マクロの数を越える任意の回数の再帰を扱えるわけではない
0498デフォルトの名無しさん2016/03/20(日) 16:04:24.63ID:Q9e0J8ZE
再帰処理させたいマクロをFUNCとして、
FUNCを何回再帰させるかを指定してBOOST_PP系統のマクロを定義すると、
FUNC_nという形になる名前の任意のマクロのうち、まだ定義されていない
名前のマクロを探し出して再帰的にFUNC_nを命名する機能を持っているのだ
>>486のやっているベタ書きを自動的に書いてくれるのだ
0499デフォルトの名無しさん2016/03/20(日) 18:31:41.32ID:EqMhetHD
>>498
boost/preprocessor/repetition/repeat.hpp
の中身見たことある?
0500デフォルトの名無しさん2016/03/23(水) 01:48:29.48ID:ja7H/O1J
百歩譲って
A=A+1
って式を認めよう
この場合のイコールは代入を意味するんだな

そこで質問です
A+1=A
って書いたらどーなるの?
A=A-1
と同じ結果が得られるの?
教えてー
0501デフォルトの名無しさん2016/03/23(水) 01:49:27.42ID:90Oe+hOc
>>500
コンパイルエラーになるだけです
0502デフォルトの名無しさん2016/03/23(水) 01:50:09.88ID:ja7H/O1J
>>501
そっか・・・
あんまり論理的ではないのねorz
0503デフォルトの名無しさん2016/03/23(水) 02:17:41.55ID:d4s8z5nU
あーたの狭い脳内論理にフイットしないってだけで完全に論理的だから
0504デフォルトの名無しさん2016/03/23(水) 02:24:07.46ID:SoMbpeP6
マセマティカでも使えば幸せになれるかも
0505デフォルトの名無しさん2016/03/23(水) 02:53:49.93ID:YLhrJ5lt
>>501
おまいはエジソンかよw
0506デフォルトの名無しさん2016/03/23(水) 03:41:34.03ID:ti1fSBNM
だから = は等価(equal, equivalence)じゃなくて割り当て(assignment)だと何度言ったら
0507デフォルトの名無しさん2016/03/23(水) 05:12:04.79ID:YLhrJ5lt
あ、レス番間違えた
エジソンは>>500ね
0508デフォルトの名無しさん2016/03/23(水) 05:55:27.03ID:uWb5tpCC
質問です。
(コンパイラ絡みの話題なので若干スレチかもしれませんが、このスレが一番詳しい人が多いと思いますのでご容赦ください)

stringやlistなどはc++11でABIが変更になったと聞きますが、これの挙動がgccとclangで違うことを最近知りました。
たとえば以下のコードをビルド(g++ 5.2.0とclang++ 3.7.1)して nm --demangle コマンドでシンボルを見てみると、

$ cat hoge.h
#include <list>
using namespace std;
struct hoge {
list<int> get_list(list<int>);
list<int> get_list();
};

$ cat hoge.cpp
#include "hoge.h"
list<int> hoge::get_list(list<int>) {return list<int>();}
list<int> hoge::get_list() {return list<int>();}

引数のある関数get_list(list<int>)のシンボルはg++、clang++ともに
hoge::set_list(std::__cxx11::list<int, std::allocator<int> >)
ですが、引数のない関数get_list()のシンボルはg++だと hoge::get_list[abi:cxx11]() 、
clang++だと hoge::get_list() でした。
この違いのせいでg++でビルドしたライブラリをclang++のプロジェクトで使うことができません。
やむなく -D_GLIBCXX_USE_CXX11_ABI=0 オプションを付けてビルドし直したのですが
これだとC++11でもたらされた効率化の恩恵が受けられないですよね?
何か上手い方法はないでしょうか?(clangが対応するのを待つしかない・・・?)

# なお、ライブラリのほうをg++でなくclang++でビルドしろというのはなしでお願いします
0509デフォルトの名無しさん2016/03/23(水) 06:01:35.89ID:LEkWD+7J
>>500
struct B
{
B& operator + (int) { return *this; }
B& operator - (int) { return *this; }
B& operator = (B&) = default;
};

B A;
A=A+1;
A+1=A;
A=A-1;
0510デフォルトの名無しさん2016/03/23(水) 10:12:52.17ID:COygSTBI
struct hoge{
std::string s;
};
hogeのムーブコンストラクタはどう書くのが正しいですか
0511デフォルトの名無しさん2016/03/23(水) 10:29:58.57ID:YLhrJ5lt
>>509
すべてAになるとかエジソンコードかコレw
0512デフォルトの名無しさん2016/03/23(水) 10:31:56.68ID:LEkWD+7J
メンバポインタで仮想関数を呼び出すとき、基底クラスの関数を指定ってできますか?
struct hoge { virtual void hage() { } };
struct fuga : hoge { void hage() { } };
void (hoge::*hogo)() = &hoge::hage;
fuga hege;
(hege.*hogo)(); //fuga::hageじゃなくhoge::hageにしたい
0513デフォルトの名無しさん2016/03/23(水) 10:56:19.75ID:GrZPafJv
>>512
出来ない
0514デフォルトの名無しさん2016/03/23(水) 11:01:24.81ID:d4s8z5nU
そもそもメンバポインタなんてものは使うな
0515デフォルトの名無しさん2016/03/23(水) 14:32:18.80ID:LEkWD+7J
>>513
thx
情報密度の高いわずか4文字、その次の真空とは格段に違いますね。
0516デフォルトの名無しさん2016/03/24(木) 00:36:19.09ID:CsN4wd4t
newとか書くのは老害なんですかね?
今日若いもんに指摘されたんだけども
make_hogehogeとか書いたほうがよいのでしょうか?
老害脱却してナウくてミニマルなコード書きたい
0517デフォルトの名無しさん2016/03/24(木) 00:41:36.09ID:9Xk0G6q+
指摘したやつに聞いてこいよ
というか指摘されたときにちゃんと理由聞いとけよ
0518デフォルトの名無しさん2016/03/24(木) 01:42:21.09ID:019JwaRF
deleteしわすれるマヌケなコードでなければ使ってもいいが
0519デフォルトの名無しさん2016/03/24(木) 02:15:40.78ID:lQwaLUOO
>>500
上段より下段が時系列的に後
右辺より左辺が時系列的に後
そんなカスケード的概念が根底にある
BASICに行番号が有った頃と何も変わらない

左辺が変数のみなら代入を意味する
左辺が数式なら数式と扱う
どの辺がオブジェクト指向か知らない
ポリモーフィズムとかカプセル化も関係ない

多分、生物は前を向く、みたいな本能に根差した定義が隠れている
0520デフォルトの名無しさん2016/03/24(木) 08:13:12.75ID:xZz5tDVg
>左辺が変数のみなら代入を意味する
>左辺が数式なら数式と扱う

という妄想でした
(c1 ? gr() : fr()) = 100 ;
0521デフォルトの名無しさん2016/03/24(木) 08:24:49.44ID:Nz54sUCC
それを言うなら
*pt = 100;
でしょ

A=100;のAもC++では左辺値という式で
変数とか数式とかいう言葉遣いは行番号BASICの話だろ
0522デフォルトの名無しさん2016/03/24(木) 08:47:03.11ID:RWWxbY4p
>>516
スマートポインタを調べておいで
0523デフォルトの名無しさん2016/03/24(木) 08:50:35.73ID:4NO08lYx
俺は数値型はmallocしか使わない
0524デフォルトの名無しさん2016/03/24(木) 09:04:10.19ID:wWfOqsS1
なぜcallocを使わないのか
謎である
0525デフォルトの名無しさん2016/03/24(木) 11:15:22.83ID:biS/7wG3
callocではポインタを初期化出来ないから
0526デフォルトの名無しさん2016/03/24(木) 11:17:02.82ID:biS/7wG3
ああ、数値型限定か。取り下げ。
0527デフォルトの名無しさん2016/03/24(木) 12:08:43.62ID:ZS8UeVhQ
>>516
そう書く以上ある程度は知ってるんでしょ?
まず使ってみて判断すりゃいい。
0528デフォルトの名無しさん2016/03/24(木) 14:24:41.64ID:aFiY6vgp
スマポのデメリットって、
ちょっと記述が長いくらい?
0529デフォルトの名無しさん2016/03/24(木) 15:53:26.47ID:eZePobDJ
そもそもC++において記述量はものの数に入らない。注意はゼロオーバーヘッドに向いている
0530デフォルトの名無しさん2016/03/24(木) 16:10:53.13ID:aFiY6vgp
まあ、そうなんだけどね

もしC++の開発当初からスマポの概念が存在してたとしたら
もうちょっとシンプルなキーワードになってたのかなと思わなくはない
0531デフォルトの名無しさん2016/03/24(木) 16:32:37.90ID:5JBRPHnG
スマポ使って記述量増えるか?delete書かなくていいんだし、例外安全なコード書くこと考えたらスマポ使わないと大変な記述量になるぞ
0532デフォルトの名無しさん2016/03/24(木) 16:40:18.89ID:YciTCaLR
C++とOpenGLで大量のデータ(といっても1ファイル数MBのバイナリファイル)を表示するグラフを作ったんだが
ファイルを次々読んでいくと不正落ちするんだが
タスクマネージャを見る限りメモリリークはしてないっぽいんだが
原因はなんだろう?
エスパーさん助けて
0533デフォルトの名無しさん2016/03/24(木) 16:47:29.18ID:YnxOCpos
>>532
フツーにVC++でデバッグしろや
0534デフォルトの名無しさん2016/03/24(木) 16:56:15.84ID:aFiY6vgp
>>531
あくまで宣言時の話ね
安全かどうかはとりあえず置いとく
0535デフォルトの名無しさん2016/03/24(木) 17:11:05.46ID:YciTCaLR
>>533
そういやそうやね
デバッグしたときの思い出したけどメモリのアクセスの違反とかやったかな
ただどこのメモリアクセスかだとかてんで絞り込めなかった記憶が蘇ってきた
0536デフォルトの名無しさん2016/03/24(木) 17:11:55.85ID:bJRa7hQW
スマポは宣言したことないなあ
0537デフォルトの名無しさん2016/03/24(木) 18:19:30.58ID:GuX4g1Aq
class POINT{
int x, y;

POINT(int x, int y){
this.x = x;
this.y = y;
}
};

式にはクラス型が必要です。とエラー出る。
Javaだとこの書き方で来たと思うんだけどどうれば?
0538デフォルトの名無しさん2016/03/24(木) 18:20:23.26ID:HU0hrWcK
this.x
↓
this->x
0539デフォルトの名無しさん2016/03/24(木) 19:05:20.17ID:4ybpt3lE
コンストラクタ内はthis未定。
0540デフォルトの名無しさん2016/03/24(木) 19:16:58.07ID:xZz5tDVg
なにをいっているんだこのばかは
0541デフォルトの名無しさん2016/03/24(木) 19:17:43.17ID:CKYJRfTx
>>537
class POINT{
  int x_, y_;

  POINT(int x, int y)
    : x_(x), y_(y)
  {}
};
0542デフォルトの名無しさん2016/03/24(木) 22:26:04.65ID:zkjgNnUp
>>541はアスペ
0543デフォルトの名無しさん2016/03/24(木) 22:39:30.65ID:f7qbbkg+
>>541
class POINT{
  int x_, y_;
public:
  POINT(int x, int y)
    : x_(x), y_(y)
  {}
};
0544デフォルトの名無しさん2016/03/24(木) 23:04:36.81ID:3G6+DDFH
>>510
struct hoge{
std::string s;
hoge() = default;
hoge(hoge &&) = default;
hoge(hoge const &) = default;
};
struct hoge{
std::string s;
hoge(hoge &&baka) : s{std::move(baka.s)} {}
};
0545デフォルトの名無しさん2016/03/24(木) 23:49:09.31ID:zWmpvvy2
>>535
clangやgccならAddressSanitizerでバッファーオーバーフローしたタイミングで止めてコールスタックを表示できるし、
解放済みメモリへアクセスしたときもそのアドレスを解放した箇所のコールスタック表示できる。
0546デフォルトの名無しさん2016/03/25(金) 00:38:22.72ID:+Ze54dSh
でもOpenGLのデバッグはつらいね。
OpenGLの使い方間違え落ちると呼び出し元がわからんことが多いし。
0547デフォルトの名無しさん2016/03/25(金) 00:52:21.56ID:UpbiIEYU
>>537
class POINT{
  int x, y;
  POINT(int x_, int y_)
    : x(x_), y(y_) {}
};
だろ
0548デフォルトの名無しさん2016/03/25(金) 00:53:38.91ID:UpbiIEYU
>>537
ていうか
class POINT{
public:
  int x, y;
  POINT(int x_, int y_)
    : x(x_), y(y_) {}
};
しておかないとコンストラクタ呼べんよ
0549デフォルトの名無しさん2016/03/25(金) 00:58:19.08ID:BMGk8TKa
>>548 そのアンダースコア要らない。
0550デフォルトの名無しさん2016/03/25(金) 01:05:01.92ID:UpbiIEYU
でもわかりにくいだろ?
0551デフォルトの名無しさん2016/03/25(金) 01:09:41.99ID:OQH/xHTw
>>548であれば明確で分かりやすいから要らない
0552デフォルトの名無しさん2016/03/25(金) 01:16:51.01ID:ea+R8FSN
後ろアンダーラインカコワルイ
0553デフォルトの名無しさん2016/03/25(金) 02:09:13.34ID:9WnSpcyZ
だよね。引数を後ろアンダースコアにするの俺も昔やってたことあるけどカッコ悪すぎるのでもう止めた
メンバ変数は前アンダースコア、引数にはアンダースコア付けないで落ち着いた
後ろアンダースコアって何であんなにカッコ悪いんだろ?m_よりはマシだと思うが
0554デフォルトの名無しさん2016/03/25(金) 02:58:29.24ID:7ath5rIc
変数命名で思い出したけど、いろんな様式あるよねキャメルケースとかスネークケースとかそういうの

どれが流行ってるとか一般的にどうあるべきとかいう一般論あるの?
0555デフォルトの名無しさん2016/03/25(金) 03:08:18.87ID:cXdBDF9l
前アンダーが処理系予約と知らずに使う方がもっとカッコ悪い
0556デフォルトの名無しさん2016/03/25(金) 03:11:49.84ID:UodAUCRU
それぞれの流儀で決まる
コーディング規約を守るために努力すんのは無駄極まりないからGoogleの規約基準にしていいと思うけど
さすがにiとかbは消えたけどm_とg_はたまに見かける
0557デフォルトの名無しさん2016/03/25(金) 03:19:28.56ID:9WnSpcyZ
>>555
規格ちゃんと読んだか?
前アンダースコアが予約されてる条件を理解してるか?
メンバ変数の前アンダースコアは合法だってことを知ってるか?
0558デフォルトの名無しさん2016/03/25(金) 03:58:43.82ID:F3D1y9dC
法典を示せよ
0559デフォルトの名無しさん2016/03/25(金) 04:05:28.83ID:cXdBDF9l
>>557
マクロはCの制約を適用しなければいけない
必然的に前アンダーは使ってはいけない
0560デフォルトの名無しさん2016/03/25(金) 04:16:26.20ID:9WnSpcyZ
何言ってるんだか
規格を見るのが一番だが、この辺りでも見て自分の頭で考えてね
https://msdn.microsoft.com/ja-jp/library/cc440188%28v=vs.71%29.aspx

_大文字始まりは主にマクロのために全てのスコープで予約されてるが、_小文字始まりはグローバルスコープ以外では合法
これくらいのルールが分からないようじゃプログラマ失格だぞ
法典を示せ?テメエで調べろよ怠け者
0561デフォルトの名無しさん2016/03/25(金) 05:55:20.56ID:Agsep6u6
「_大文字で始まる名前、_小文字で始まる名前は
ここでは許される、ここでは許されない」みたいな部分で
規格のギリギリを突くような書き方が好ましいとは思わないけどね。

場面によらずアンダースコアで始まる名前は一切つけない、
という方針も安全策としてありうるかと。

せいぜい複数人で開発しているときに、
「このメンバ名、_で始まってるけどいいんだっけ?」
「この場合は許されてるんですよ。予約されてるのは…
(しばらく薀蓄タイム)…というわけなのです」
「ふぅん、そうか。要するに問題ないのね」
という会話が生じる程度のネタでしょ。
0562デフォルトの名無しさん2016/03/25(金) 06:13:55.38ID:9WnSpcyZ
ギリギリでもなんでもなく明確に合法なんだが
それにネタ程度の話なんかじゃなくて、メンバ変数を_小文字始まりに統一するとIDEで_を入力するとメンバ変数の一覧が出てきてメッチャ捗るという現実的な恩恵がある
C#では奨励されているスタイルだし、C++とC#を同じくらいやる俺にとってはもうこのスタイルで統一するのがベストという結論
0563デフォルトの名無しさん2016/03/25(金) 06:40:08.87ID:i3XIX2iS
まったくだ
0564デフォルトの名無しさん2016/03/25(金) 06:52:38.28ID:MISdMFxz
>>562
どこで奨励されてるの?

https://msdn.microsoft.com/ja-jp/library/ms229045(v=vs.100).aspx
ここには使うなって書いてあるけど
0565デフォルトの名無しさん2016/03/25(金) 07:06:04.17ID:ACUGT+cL
this付ける派閥には一切恩恵がないや…
0566デフォルトの名無しさん2016/03/25(金) 07:35:12.73ID:bT5/u8Kc
前アンダースコアはないわ
0567デフォルトの名無しさん2016/03/25(金) 07:48:56.52ID:i3XIX2iS
>>564
そんな不適切なページ
0568デフォルトの名無しさん2016/03/25(金) 08:10:52.98ID:cXdBDF9l
C++ではグローバルネームだけが前アンスコ予約となってる
Cとの共存に考えがいたらないまま、
>>557
>規格ちゃんと読んだか?
と言ってしまい、引っこみがつかなくなり発狂中
0569デフォルトの名無しさん2016/03/25(金) 08:14:22.84ID:+Ze54dSh
スレタイ
0570デフォルトの名無しさん2016/03/25(金) 08:16:09.34ID:i3XIX2iS
大文字と小文字の区別がつかない人間か
0571デフォルトの名無しさん2016/03/25(金) 08:25:16.24ID:cXdBDF9l
>>569
Cのヘッダーを全くインクルードしなけりゃ良いよ
そんなの学校の宿題くらいしか無いけどね
0572デフォルトの名無しさん2016/03/25(金) 08:29:34.02ID:UodAUCRU
動けば何をやってもいいのがC++だぞ
0573デフォルトの名無しさん2016/03/25(金) 08:33:00.37ID:TW5rwKlv
>>541です
物議を醸すようなコードを晒してすみません
個人的には前アンスコでも後アンスコでもいいと思います
同じでプロジェクト単位で統一されていることが重要と思っていてC++としてどちらがいいとかはないと思ってます
0574デフォルトの名無しさん2016/03/25(金) 09:11:07.81ID:+Ze54dSh
素のCヘッダなんて、どうしてもCのライブラリを使いたい場合くらいしか使わんなぁ。
C/C++共用のヘッダじゃなきゃ自分でextern "C"することになるから、そのときに
両方の規格を気にするくらいで。
そもそも、自前のcppコードでメンバにアンダースコア使う話とCヘッダのインクルードが
どう関係あるのか意味不明。
05755352016/03/25(金) 09:21:42.75ID:qvYXoatK
>>545
だいたい数十ファイル(ばらつき)を読み込んだあたりで突然落ちて
最初はメモリリークを疑ったからかなり明示的にメモリの解放を頻繁に行うようにした
でもやっぱり症状変わらなかった
解放済みメモリへのアクセスもあるかなって思ったけどようわからんかったけど
もうちょい頑張ってみる

>>546
OpenGLとかコードをパクりまくってつぎはぎだらけでなんとか表示させてるからあんまり意味わかってなくてつらい部分は確かにある
このOpenGLあたりでグラフィックメモリがパンクしてんのかとも思ってコード内でグラフィックの使用量吐き出させたりフリーソフトで監視したけどそんなにメモリが増大していってる感じじゃなかったな
0576デフォルトの名無しさん2016/03/25(金) 09:37:39.50ID:KBRwIVst
あれ?これ合法だっけ?ってなる時点で紛らわしいので避けるかな
だったら前this か m_ の方がマシ
0577デフォルトの名無しさん2016/03/25(金) 10:22:53.41ID:AP4XabWz
>>559
classのメンバ変数弄るならInline関数使うべきだろ。
そこ触るのにcとの互換性考慮する必要なくね?
0578デフォルトの名無しさん2016/03/25(金) 11:19:19.06ID:9WnSpcyZ
StyleCop死ねwww
http://stylecop.codeplex.com/wikipage?title=A%20Brief%20History%20of%20CSharp%20Style&;referringTitle=Documentation
0579デフォルトの名無しさん2016/03/25(金) 11:27:57.09ID:9WnSpcyZ
前thisなんてルール作ったところで
this付けなくてもエラーにもなんにもならないしルール違反コード探すのだって容易じゃない
そんなの全く意味ないんだよこのクソバカStyleCop
0580デフォルトの名無しさん2016/03/25(金) 15:47:57.54ID:ACUGT+cL
_fooでもm_barでもthis.bazでも
それを強制されるのなら、コーディング規約としては大して変わらん気がするなあ
0581デフォルトの名無しさん2016/03/25(金) 16:01:49.59ID:ACUGT+cL
あ、ごめん。this.じゃねぇ
0582片山博文MZ ◆T6xkBnTXz7B0 2016/03/25(金) 17:02:16.92ID:C4e13KV/
アンパンマン、新しい顔ができたよ!!!

Unboost --- Time to say good-bye to Boost
https://github.com/katahiromz/unboost
0583デフォルトの名無しさん2016/03/25(金) 17:22:36.13ID:ZbElIMvp
g_とかm_とかクッソ気持ち悪い
0584デフォルトの名無しさん2016/03/25(金) 17:55:35.65ID:uQE9fwFQ
前アンスコが一番素敵だワ
0585デフォルトの名無しさん2016/03/25(金) 18:09:09.53ID:i3XIX2iS
_そ_う_お_も_う_
0586デフォルトの名無しさん2016/03/25(金) 18:12:39.86ID:i3XIX2iS
しかし_を入力するとメンバ一覧が出てきて捗るなどという考えは皆無だな
0587デフォルトの名無しさん2016/03/25(金) 18:24:41.23ID:uQE9fwFQ
>>586
ん?便利と思うよ。mでも何でもいいけど。
逆に不便なのが、IDEのコンストラクタやsetter/getter自動生成機能で_やmが関数名や仮引数名についちゃうところ。
0588デフォルトの名無しさん2016/03/25(金) 20:17:21.95ID:CiUv48rG
アンダースコアで始まる識別子がたくさん出てくるだけじゃあ
0589デフォルトの名無しさん2016/03/25(金) 20:31:45.14ID:9WnSpcyZ
そういえば俺はVisualAssist入れてたわ
試しにVisualAssistをオフにすると確かに_入力すると要らん識別子がたくさん出てくるね
0590デフォルトの名無しさん2016/03/25(金) 21:02:26.06ID:cXdBDF9l
バッドノウハウを自慢してる道化者がいるのはこのスレですか?
0591デフォルトの名無しさん2016/03/25(金) 21:42:22.81ID:wYNIzxY0
法典を示せよ
0592デフォルトの名無しさん2016/03/25(金) 22:51:46.85ID:UodAUCRU
他人のクソコード読まされることを考えると入力補完の利便性よりプリフィックスの邪魔臭さの方が勝つわ
0593デフォルトの名無しさん2016/03/25(金) 23:44:39.74ID:Z4j/XIfG
こういう糞などうでもいいことに時間をとられる事が多いからc++はね。。
0594デフォルトの名無しさん2016/03/26(土) 00:16:33.30ID:tkiIr1J4
時間をとられる?
楽しむのタイポかな
0595デフォルトの名無しさん2016/03/26(土) 00:23:13.45ID:qvwT55MZ
使用者の責任を道具の責任にされてもなあ
こういうのがC++は生産性が低いとか言って回ってるんだろう
ウェブ以外
0596デフォルトの名無しさん2016/03/26(土) 00:28:43.03ID:rFgFIa6f
ド素人のニワカのサンデープログラマ以下の連中が
したり顔で「C++は〜」などと語るのを見てさすがに反吐が出る
0597デフォルトの名無しさん2016/03/26(土) 00:43:00.42ID:n7CZDVn6
IDEでメンバーの一覧出したければthis->打てばいいだけやん。
コーディング規約とか関係なく通用するぞ
0598デフォルトの名無しさん2016/03/26(土) 00:47:37.09ID:MgEq8J/o
それだとメンバ「変数」以外も表示されるから嫌だ、ということを言いたいのでは?
0599デフォルトの名無しさん2016/03/26(土) 01:00:28.25ID:KL+QyKv8
一体メンバ変数がいくつあるのかと
0600デフォルトの名無しさん2016/03/26(土) 03:16:27.70ID:dPHkRzMW
m_やらg_やらdwやら先頭に小文字持ってくるMSの変数の書き方が気色悪くて受け入れられへんわ
0601デフォルトの名無しさん2016/03/26(土) 07:12:13.54ID:WyVomS0l
>>596
四六時中、鏡ばっかり見てるナルシストさんですね
0602デフォルトの名無しさん2016/03/26(土) 08:29:17.64ID:MOolL9qH
いや道具と使う人な相互関係にあるだろう。
麻薬使ってる人が犯罪起こして、麻薬は悪くない、使う方の問題
って言い回ってるのと変わらん。
厳密に正しくても普遍的には間違ってるってこと、わかる?
0603デフォルトの名無しさん2016/03/26(土) 08:44:42.01ID:R9brpoqy
つまり、前アンスコは麻薬事犯と等価という結論で良いな。
0604デフォルトの名無しさん2016/03/26(土) 09:45:44.31ID:DLlb1OCl
たかが変数の書き方のことで気持ち悪い気持ち悪い本気で思ってる人って自閉症かなんかなの?
0605デフォルトの名無しさん2016/03/26(土) 09:52:52.12ID:x8vHWeP/
道具にスタイルをあわせる発想がいけてない
0606デフォルトの名無しさん2016/03/26(土) 10:21:57.85ID:WyVomS0l
気持ちいいとか悪いとか、知らんやつの主観を押しつけられてもねえ
確かにM$のハンガリー記法は勘違いもいいとこで迷惑だが
0607デフォルトの名無しさん2016/03/26(土) 10:38:24.29ID:qvwT55MZ
MFCに合わせた結果
m_c○○○○
m_i○○○○
0608デフォルトの名無しさん2016/03/26(土) 11:14:45.34ID:DLlb1OCl
>>596
それは異常な感覚といえるな
0609デフォルトの名無しさん2016/03/26(土) 11:15:22.04ID:dhtja+1l
m_fooや_fooのような不自然なスペルのものを好き好んで使用するのは馬鹿に違いない
そしておかしな変数名を気持ち悪いと感じることをおかしいと考える奴も同レベル
0610デフォルトの名無しさん2016/03/26(土) 11:24:39.33ID:oqt1XBlq
まだ話題続いてたんだw
0611デフォルトの名無しさん2016/03/26(土) 11:26:02.29ID:nC5XRm0k
つまり人工言語を好き好んで使うプログラマーは全員馬鹿。
0612デフォルトの名無しさん2016/03/26(土) 11:40:47.61ID:drxQ1xsy
>>605
スレチ
0613デフォルトの名無しさん2016/03/26(土) 12:36:35.51ID:dPHkRzMW
内輪でそのスタンスをやってるならかまわないんだよ
布教のようにその気味悪いスタンスを他に持ってくるな
0614デフォルトの名無しさん2016/03/26(土) 12:38:35.72ID:dPHkRzMW
せっかくのフリーフォマットが糞うんこみたいなプレフィックスでダイナシ
0615デフォルトの名無しさん2016/03/26(土) 12:58:40.88ID:amcLkjKv
みんなclassのprivateメソッドってテストしてる?
pimplとかで書くと直接テストできなくなるので困ってる
0616デフォルトの名無しさん2016/03/26(土) 13:39:59.31ID:WyVomS0l
#ifndef NDEBUG
public:
#endif
0617デフォルトの名無しさん2016/03/26(土) 15:10:50.95ID:72n90ws5
pimplにするとむりやりpublicにしても直接さわれない
0618デフォルトの名無しさん2016/03/26(土) 15:27:07.31ID:drxQ1xsy
いわゆるユニットテストなら public だけで十分だべ
それで不満なら unittestall(), unittest(testid) みたいなメソッドを露出するか
0619デフォルトの名無しさん2016/03/26(土) 16:18:42.90ID:xgz3RPza
法典を示せよ
0620デフォルトの名無しさん2016/03/26(土) 16:50:39.90ID:rTAUpSul
「目には目を、歯には歯を」
0621デフォルトの名無しさん2016/03/26(土) 16:56:47.85ID:rTAUpSul
>>609
自然って何だよ
camelMustDieみたいなのは自然ですか?
0622デフォルトの名無しさん2016/03/26(土) 18:08:51.11ID:qvwT55MZ
キャメルは無駄な情報がないからまだマシ
ただ先頭が大文字か小文字かを強制するのは意味ないから止めろ
それを統一することで生産性が上がるなら証明するべきだし、それができないなら無意味だとして従わない
0623デフォルトの名無しさん2016/03/26(土) 18:23:23.92ID:DLlb1OCl
些細なこだわりも具体的な何かに貢献するならいいんだけどね。
0624デフォルトの名無しさん2016/03/27(日) 01:03:57.92ID:qNc2l1L8
具体的に何かあったら、それはもう「こだわり」とは言わんw
0625デフォルトの名無しさん2016/03/27(日) 01:11:36.93ID:FbZbPUQJ
?
0626デフォルトの名無しさん2016/03/27(日) 01:53:56.60ID:EAU7bKpG
こだわりおことわり
0627デフォルトの名無しさん2016/03/27(日) 05:10:40.23ID:bhtDicVS
Visual C++がプライベートな変数はアクセスできても
プライベートな関数が呼び出せない(メンバー関数ポインターが取れない)ことことに気づいた。
よくわからんので、規格の14.7.2p12的にどうなの?と報告しといた
0628デフォルトの名無しさん2016/03/27(日) 05:14:42.78ID:WowjK6nr
C++Builderなら__closureポインタ使えて便利やで
0629デフォルトの名無しさん2016/03/27(日) 06:02:28.55ID:xKhiQxW2
>>627
こういうこと?
https://ideone.com/ebbVAP
2015 Update1では通るけど?
0630デフォルトの名無しさん2016/03/27(日) 08:35:41.25ID:R6dvexpH
>>627
それ「呼び出す」と表現できるんだっけ?
0631デフォルトの名無しさん2016/03/27(日) 09:35:47.69ID:1hdhT0Xm
629のコードで、どうやってprivateに引っかかれるのかわからん
コンパイラのバグって大抵、気持ちはわかるもんだが
0632デフォルトの名無しさん2016/03/27(日) 10:34:27.20ID:FPj3n5or
プライベート情報を外部から取る事って有りなのかな?
取りたいなら、struct使うと思うけどね。
0633デフォルトの名無しさん2016/03/27(日) 10:37:41.61ID:FbZbPUQJ
?
0634デフォルトの名無しさん2016/03/27(日) 10:49:50.28ID:1o1JeAKn
プライベートメソッドの単体テストの話の続きか
関数ポインターなんてバカなもの使うのはやめて>>618が言ってるようにクラスの中に単体テストメソッド書け
それか単体テスト実行クラスを別に作ってfriend宣言だ
0635デフォルトの名無しさん2016/03/27(日) 11:00:41.58ID:bhtDicVS
>>629
そうじゃなくてこんな感じのコード
http://ideone.com/G0rchW
何故関数だけできないのか。何か見落としてるのか
0636デフォルトの名無しさん2016/03/27(日) 11:09:05.17ID:WowjK6nr
>>635
型判ってんならいちいち auto 使うなよハゲ
0637デフォルトの名無しさん2016/03/27(日) 11:12:34.23ID:GYHXz8Cu
確かに美しくない
0638デフォルトの名無しさん2016/03/27(日) 11:25:33.33ID:WowjK6nr
>>635
プライベートメンバな変数を外部から参照出来ているならそいつはVC++が仕様的におかしい。friend でも使わない限りアクセス許可されないはずだ。
0639デフォルトの名無しさん2016/03/27(日) 11:36:25.90ID:b5RPwXUJ
>>636
禿かどうかわからないだろ。そこはauto使おうよ
0640デフォルトの名無しさん2016/03/27(日) 11:39:31.31ID:WowjK6nr
>>639
いや、要らんだろ
字数多くなるし
ん?スタンス?
0641デフォルトの名無しさん2016/03/27(日) 11:50:13.28ID:svF1nKbs
俺はラムダ式以外autoは使わないこだわりを持ってる
イテレータでもきっちり書く
0642デフォルトの名無しさん2016/03/27(日) 12:03:23.39ID:nUenius6
さらしたコードは2ちゃんのコピペだが、
>>638
gccでアクセスできてるサンプルと規格の当該箇所が示されてるのに
「許可されないはずだ」しか言えないなんて、お前はどれだけ低能なんだ

ちなみにclangでも通る
0643デフォルトの名無しさん2016/03/27(日) 12:07:39.19ID:nUenius6
あれ?ID変わった
>>635=>>642
0644デフォルトの名無しさん2016/03/27(日) 12:37:57.94ID:1o1JeAKn
無意味なauto使ってる汚いコードが最近ちらほら散見されるね
何考えてるのか知らんけど
0645デフォルトの名無しさん2016/03/27(日) 12:41:26.10ID:Yzg+pBV4
出来る限りauto使えってメイヤーズが言ってた
お前らよりメイヤーズを信じる!
0646デフォルトの名無しさん2016/03/27(日) 12:43:26.88ID:FbZbPUQJ
オレはスタイルをわざと混在させて書くことがある。もちろん変な混乱がおきたりしない範囲でだが。
こだわりを捨てて自由になれる。
0647デフォルトの名無しさん2016/03/27(日) 12:44:11.17ID:GYHXz8Cu
>> 645
たしかにそうだけど、あんなコードみたいに無意味な使い方を推奨してはいない。
初期化漏れ、関数からの返却型の勘違い、クロージャーを受け取る際のメモリ最適化
があるから推奨している。
一方で、イニシャライザーリストで初期化したときに、意図しない型推論が起きるから注意
とも書いてある。
0648デフォルトの名無しさん2016/03/27(日) 12:50:08.45ID:WowjK6nr
>>642
じゃその変数の参照が通るという糞ソース晒してみろよ
ブツがねぇのに違いなんてわからねぇだろ
0649デフォルトの名無しさん2016/03/27(日) 12:58:46.41ID:ZVkuBwfb
>>645
メイヤーズ C++やめるってよ
0650デフォルトの名無しさん2016/03/27(日) 13:06:35.25ID:FbZbPUQJ
>>649
そういやそうだった
てか何歳なんだよ
0651デフォルトの名無しさん2016/03/27(日) 13:17:55.79ID:1o1JeAKn
そのVSのバグについてはここで報告されてるよ
https://social.msdn.microsoft.com/Forums/vstudio/en-US/9f05fd9d-9268-4c61-847b-2c151594f252/failure-to-comply-with-c-standard?forum=vcgeneral
https://connect.microsoft.com/VisualStudio/feedback/details/2448531/failure-to-comply-with-c-standard
まあ3年後くらいには直るんじゃない?www

14.7.2/12ルールを使ってprivateにアクセスなんてバッドノウハウは使うなというMSからのありがたい思し召しじゃ
こんなもの使って沢山のクラス、沢山のプライベートメソッドの単体テストコード
をどうやって書くつもりなんだよ?目も当てられない様な汚い状態になるぞ。
0652デフォルトの名無しさん2016/03/27(日) 14:12:52.48ID:svF1nKbs
#ifdef DEBUG
#define private public
#endif
0653デフォルトの名無しさん2016/03/27(日) 14:40:55.16ID:16qVVvu7
>>635
gcc5.3.0でノーエラーノー警告だったぞ
0654デフォルトの名無しさん2016/03/27(日) 15:07:10.88ID:1o1JeAKn
VS2015固有のバグみたいね2010、2012、2013では通る
でもこんなものは使うな
無意味なautoもだ
0655デフォルトの名無しさん2016/03/27(日) 15:37:16.32ID:FbZbPUQJ
最後の一行はどさくさ紛れだな
0656デフォルトの名無しさん2016/03/27(日) 15:53:04.46ID:nUenius6
どさくさ紛れというか変数名もそうだけど
どうして他人に俺スタイルを強要したがるアホが多いんだろう

個人的には、むしろautoを避けた結果 無意味に一貫性が無い書き方になる方こそやめた方がいいと思うけど
0657デフォルトの名無しさん2016/03/27(日) 16:22:00.88ID:svF1nKbs
一貫性など無用
気分でautoを使うくらいでも問題ない
0658デフォルトの名無しさん2016/03/27(日) 16:26:32.32ID:qNc2l1L8
無意味なautoって、自動変数の時のやつかと思った
11で廃止されたんだっけか
0659デフォルトの名無しさん2016/03/27(日) 18:31:06.24ID:1hdhT0Xm
規格の意図がわからん
なぜグローバルのコンテキストでのprivate関数の名指しを、突然そこで許すんだ?

関係ないが返却値はauto->で統一すべきだと思う
宣言の対象となる識別子より左に長さが一定でないものがあるという
Cから続く悪しき伝統をせっかく改めたのだから黒歴史はさっさと忘れようや
同じ話でtypedefもusingで統一していいだろう
0660デフォルトの名無しさん2016/03/27(日) 18:51:38.33ID:nUenius6
>>659
長さだけでなく戻り値のtype-idがまとまってるのも見やすいと思う
 int (*f(int))[10];
 auto f(int) -> int(*)[10];
そしてprivateアクセスを許す14.7.2の取ってつけたようなルールの意図は確かに不明だ
でもC++98からずっとある
0661デフォルトの名無しさん2016/03/27(日) 19:03:47.24ID:1hdhT0Xm
C++98つーと、これか
> 14.7.2 明示的な具現化
> 8 明示的な具現化を指定するために用いる名前には,通常のアクセス検査規則は,適用されない。
> 参考特に,関数宣言子(仮引数型,返却値の型及び例外仕様を含む。)中で使用される名前は,通常はアク
> セス可能でない非公開の型又はオブジェクトであってもよい。また,そのテンプレートは,通常はアク
> セス可能でないメンバテンプレート又はメンバ関数であってもよい。
0662デフォルトの名無しさん2016/03/27(日) 20:18:21.82ID:u0G9Uv1h
最初に無があった
無は有を生んだ
これが全ての真理
0663デフォルトの名無しさん2016/03/27(日) 20:39:08.85ID:GYHXz8Cu
>> 660
俺は逆で、autoと->が無駄な情報としてあるから、みにくいな
0664デフォルトの名無しさん2016/03/27(日) 20:40:26.75ID:GYHXz8Cu
autoで推論だと思ったら、後ろを見て推論じゃないのかと、無駄な判断が入る
0665デフォルトの名無しさん2016/03/27(日) 20:55:22.40ID:n4P1YeBc
0

無

0
= (-1)×0
= (-1)×(1-1)
= (-1)×1+ (-1)×(-1)
= -1+ (-1)×(-1)
両辺に1を足し、
1+0 = 1-1 + (-1)×(-1)
つまり、1=0+(-1)×(-1)
∴(-1)×(-1) = 1
0666デフォルトの名無しさん2016/03/27(日) 21:37:40.14ID:svF1nKbs
autoはそれ自体に情報が無いからぱっと見たときの理解が遅れる
C#のvarだらけのコードをメンテさせられたとき軽く混乱しかたからマジ
0667デフォルトの名無しさん2016/03/27(日) 21:56:58.87ID:aLC7L0Nd
>>666
それは
var foo = new Foo(); とか
var bar = (Bar) baz; とかでも?
0668デフォルトの名無しさん2016/03/27(日) 21:57:04.76ID:nOeH6ELU
TABもそうだね
0669デフォルトの名無しさん2016/03/27(日) 21:57:25.64ID:+zMq83Ww
autoじゃないと、暗黙の変換噛ましているのかそのまま受けているのかわかりづらい。
0670デフォルトの名無しさん2016/03/27(日) 21:59:48.82ID:xKhiQxW2
std::vector<bool> みたいな参照じゃなくても参照みたいに動作するクラスもあるしなぁ

http://ideone.com/Rf2j3k
こういうのautoの型を把握してないとハマるよね。実際ハマったことないけど
0671デフォルトの名無しさん2016/03/27(日) 22:03:30.89ID:GYHXz8Cu
Effective Modern C++に書いてある内容だね
0672デフォルトの名無しさん2016/03/27(日) 22:07:27.95ID:svF1nKbs
>>667
newしてる場合はいいけど見慣れない関数の戻り値の場合いちいち確認しなきゃいけないから面倒くさい
俯瞰して処理の流れを整理したいときそれが入ると考えが乱れるときがある
0673デフォルトの名無しさん2016/03/27(日) 22:50:18.38ID:QDvm7CjZ
complex.h

って整数との演算定義されていないんだねえ。
1+z/2とか普通に使いそうなのに。

まあ、それは「整数との演算が定義されていません」ってエラーが
出るから良いけど。

あと、complex<float>とcomplex<double>の演算もできないんだ。
複素数使うような数値計算ではdouble基準だからいいけど。

演算子のオーバーロードを定義するだけだし。
0674デフォルトの名無しさん2016/03/27(日) 22:53:10.46ID:M1h1PCkM
そっかー(´・ω・`)
0675デフォルトの名無しさん2016/03/27(日) 22:53:33.36ID:GYHXz8Cu
complex.h?
complexではなく?
0676デフォルトの名無しさん2016/03/27(日) 22:54:00.32ID:GYHXz8Cu
複素数使わないから良く知らんけど。
変なこと言ってたらスルーして。
0677デフォルトの名無しさん2016/03/27(日) 22:54:15.84ID:QDvm7CjZ
よくわからんけど

#include <complex>の方
0678デフォルトの名無しさん2016/03/27(日) 23:09:53.76ID:nOeH6ELU
>>673
> 26.4.2 Class template complex [complex]
> namespace std {
> template<class T>
> class complex {
> public:
> typedef T value_type;
> constexpr complex(const T& re = T(), const T& im = T());
あとは、わかるな?
0679デフォルトの名無しさん2016/03/27(日) 23:12:36.40ID:nUenius6
3iや3i + 3.0がよくて3i + 3がエラー
これがC++クオリティー
0680デフォルトの名無しさん2016/03/27(日) 23:27:21.83ID:QDvm7CjZ
>>678

すみません。わかりません。

これで整数との演算やcomplex<float>とcomplex<double>との演算が
可能になりますか?

decltypeとdeclval()使ったオーバーロードは試しましたが、
constexprを使った例を見たのは初めてです。
0681デフォルトの名無しさん2016/03/27(日) 23:50:11.77ID:nOeH6ELU
>>680
z/2.ではなくz/2か、失礼した
0682デフォルトの名無しさん2016/03/28(月) 00:33:11.83ID:HB92OvOj
>>672
ぱっと見てわからない関数の戻り値をautoで受けるのは
わりとダメな使い方のほうなんじゃ…
0683デフォルトの名無しさん2016/03/28(月) 01:29:23.80ID:qcb2KDJp
R ⊂ C だから実数ならば複素数であるべきだ
0684デフォルトの名無しさん2016/03/28(月) 08:43:21.82ID:XWzo3Vl6
auto が悪いんじゃなくて命名が悪い
0685デフォルトの名無しさん2016/03/28(月) 10:41:36.56ID:Z0KWQSon
varなら3文字だった
0686デフォルトの名無しさん2016/03/28(月) 11:05:21.48ID:XWzo3Vl6
var を通常変数名として愛用する会の反対によって否決された
0687デフォルトの名無しさん2016/03/28(月) 11:23:45.44ID:OMGd+pup
varとかもろにPascalだな
0688デフォルトの名無しさん2016/03/28(月) 11:28:58.77ID:di4OCp5M
新たな予約語の追加なんて
0689デフォルトの名無しさん2016/03/28(月) 12:55:46.89ID:d3YBhLBG
予約語空間は、アンスコ英大文字始まりで無限拡張されたから心配無用
0690デフォルトの名無しさん2016/03/28(月) 12:58:51.91ID:di4OCp5M
varの話だよ
0691デフォルトの名無しさん2016/03/28(月) 13:05:09.67ID:+tZpj9K4
>>689
そんな風に信じてるのはCのWG14だけだ
0692デフォルトの名無しさん2016/03/28(月) 13:13:47.24ID:R+Zfq3T/
そしてアンスコで始まらないキーワードをまたしれっと...
0693デフォルトの名無しさん2016/03/28(月) 13:47:53.49ID:di4OCp5M
とは言っても _Generic はカッコ悪いな
0694デフォルトの名無しさん2016/03/28(月) 14:37:23.70ID:W+7nMgLD
うん。_大文字なんて処理系内部の普通見えないところでだけで使うべきであって
プログラマが使うキーワードにそんなもの採用するなと思うね
_大文字はアプリでは禁止ってしておけば違反コードはgrepで簡単に見つけられるし
autoの件は別にautoで良いと思うけどな
 auto func(void) -> void;
みたいな使い方をしない限りは
0695デフォルトの名無しさん2016/03/28(月) 14:55:14.45ID:XWzo3Vl6
プログラマ側で命名を工夫しろと言ってるのに
なんで今さらどうにもならないキーワードにガタガタ言ってるのか
このばかちん共は
0696デフォルトの名無しさん2016/03/28(月) 15:48:25.93ID:hQLGsHZz
法典を示せよ
0697デフォルトの名無しさん2016/03/28(月) 19:32:42.68ID:aAFkFiG7
自由度を捨てたがる理由は何だよ
予約語と被ってもIDEが教えてくれるから何も困らないだろ
0698デフォルトの名無しさん2016/03/28(月) 19:42:19.95ID:W+7nMgLD
スレ違いだし、C11なんて使うことは永遠にないだろうけど
C++規格委員会は_大文字始まりをキーワードにするなんてバカな発想はしてない
そこは評価できる
0699デフォルトの名無しさん2016/03/28(月) 22:54:52.48ID:R+Zfq3T/
宗家と分家の溝は深まるばかり
0700デフォルトの名無しさん2016/03/29(火) 14:03:36.48ID:Mxqb9u1y
メモリーリークの検出って
みんなはどうしてる?
0701デフォルトの名無しさん2016/03/29(火) 14:05:23.00ID:FYQaWiNn
>>700
PostMessageが失敗しない事を監視する
0702デフォルトの名無しさん2016/03/29(火) 14:12:33.70ID:s+SLRt+S
GCを使う
0703デフォルトの名無しさん2016/03/29(火) 14:41:23.44ID:pdgQCR7B
operator newを乗っ取って、デバッグ時のみ乗っ取ったnewが使われるようにマクロ定義するのが鉄板ではないか
0704デフォルトの名無しさん2016/03/29(火) 14:55:24.71ID:WSKzICKp
>>703
まーた悪手や
0705デフォルトの名無しさん2016/03/29(火) 15:03:29.91ID:nEM/qKPT
ちゃんとした検出ツール使う以上の策はないよ
仕事でやってるならこういうところにはある程度の費用を惜しむな
ケチったばっかりにバカみたいに工数が膨れ上がったケースはいやというほど見てきた
ちなみに俺が今使ってるのはIntel Inspector XE
0706デフォルトの名無しさん2016/03/29(火) 17:50:15.54ID:C2g/RtHb
>>704
なんで?
0707デフォルトの名無しさん2016/03/29(火) 17:58:21.57ID:TqAkCNK1
金で時間を買え
0708デフォルトの名無しさん2016/03/29(火) 18:46:53.80ID:npJZCYbN
自分で作るのが楽しい
0709デフォルトの名無しさん2016/03/29(火) 19:12:38.16ID:nvewoInJ
>>706
マクロなんて
0710デフォルトの名無しさん2016/03/29(火) 19:14:23.90ID:s+SLRt+S
鉄板 vs 石頭
0711デフォルトの名無しさん2016/03/29(火) 19:32:13.98ID:npJZCYbN
またマクロ全否定君か
使える機能は全部使っとけばいいのに
0712デフォルトの名無しさん2016/03/29(火) 20:21:57.54ID:oqcyKopZ
>>700
operator new/delete を再定義,渡すポインタを記録しdeleteで記録抹消,の繰り返し
0713デフォルトの名無しさん2016/03/29(火) 20:53:20.32ID:u30OhyQi
Mac OSX/iOSならprofiling toolのleaks
Linuxならvalgrind
Windowsは知らん
0714デフォルトの名無しさん2016/03/29(火) 20:57:52.29ID:u30OhyQi
使える機能使わずに自分でnew delete定義するとか無いわ
0715デフォルトの名無しさん2016/03/29(火) 21:11:01.41ID:nvewoInJ
だって>>703のやつだとnewのかわりにマクロに置き換えるんだろ?
それはいやだよ
0716デフォルトの名無しさん2016/03/29(火) 21:21:59.28ID:npJZCYbN
気に入らないのと悪手なのとは別だろ
goto使っただけでキレてきそう
0717デフォルトの名無しさん2016/03/29(火) 21:40:58.96ID:i9nCn85O
>>716
キミ>>708で自分で作るのが楽しいと言ってたのと矛盾してるような気がするんだが
0718デフォルトの名無しさん2016/03/29(火) 21:51:20.31ID:7MEeFjE4
そもそもマクロに置き換える
って言うのが意味不明
マクロで(デバックバージョンの new に)置き換えるんだろ
0719デフォルトの名無しさん2016/03/29(火) 21:58:16.53ID:nvewoInJ
じゃあ>>703の「乗っ取る」って単にオーバーロードするって意味かよ。
紛らわしい。
0720デフォルトの名無しさん2016/03/29(火) 22:04:49.25ID:C2g/RtHb
goto使っただけでキレてきそう
マクロ使っただけでキレる人はね
0721デフォルトの名無しさん2016/03/29(火) 22:12:17.58ID:nvewoInJ
キレるというか、使わずに済む方法を考えて出来なかった経験はないし結局その方が良かったから、マクロを使う事にはやっぱりキレる。
0722デフォルトの名無しさん2016/03/29(火) 22:25:16.38ID:C2g/RtHb
インクルードガートとか__cplusplusとかassertとか色々あるやん
0723デフォルトの名無しさん2016/03/29(火) 22:27:37.31ID:nvewoInJ
http://qiita.com/m2266269151/items/be7cdc16d662bc4bb226
0724デフォルトの名無しさん2016/03/29(火) 22:30:00.32ID:nvewoInJ
俺がイヤだと言ってたのは関数マクロね
0725デフォルトの名無しさん2016/03/29(火) 22:30:14.88ID:7MEeFjE4
>>719
どっちかって言うとオーバーライドだけどな
0726デフォルトの名無しさん2016/03/29(火) 22:34:37.01ID:nvewoInJ
>>725
それじゃますます「乗っ取る」の語感から遠ざかるな。
グローバルなoperator new のオーバーロードのことかと思ったぜ。
0727デフォルトの名無しさん2016/03/29(火) 22:43:50.98ID:E3F4JfBl
そういえば#pragma once使ってると、ハードリンクが貼ってあった場合
実際には同じファイルなのに違うファイル扱いになって(パスが違うから・・・)
#pragma onceが機能しないっていう罠が有るんだよね
0728デフォルトの名無しさん2016/03/29(火) 23:01:23.07ID:AwO+nZlI
マクロも規格の一部だから使うなとは言わないが
置換のために使う奴は相当オツムが弱いんだろうなと思う。
マジでiostreamとか愛用してそうなレベル
0729デフォルトの名無しさん2016/03/29(火) 23:08:30.06ID:QaYzwOX0
iostreamアカンの?
0730デフォルトの名無しさん2016/03/29(火) 23:11:41.05ID:oVJBQ/xE
法典を示せよ
0731デフォルトの名無しさん2016/03/29(火) 23:24:52.30ID:C2g/RtHb
>>724
なんで?

>>726
::operator newを「オーバーロード」なら
普通にnewしてる箇所は乗っ取れないぜ?
::operator new(void*)をデフォでなくするのは「オーバーライド」だろ
virtualを基底クラスが提供したデフォでなくすような意味合いで
0732デフォルトの名無しさん2016/03/29(火) 23:32:59.06ID:nvewoInJ
>>731
いや、「普通にnewする」のをやめてマクロ定義した何かに全部置き換えるのかと思っていた。
だから「そんなのヤダ」と言っていたんだ。
>>703がそういう意味じゃないってなら忘れてくれ。
0733デフォルトの名無しさん2016/03/29(火) 23:37:05.69ID:AwO+nZlI
>>731
>「オーバーライド」だろ

そうか?
規格の10.3と13.5を見た限り「オーバーロード」が正しいように見えるのだが
0734デフォルトの名無しさん2016/03/30(水) 00:00:03.43ID:fpTcXouK
>>733
13. で多重定義とは何かを書いてあるよな
同じスコープで同じ名前の【型の異なる】宣言があることをいうと
::operator new(void*)は型の異なる宣言か?
0735デフォルトの名無しさん2016/03/30(水) 00:12:04.37ID:dgdg37Vb
>>734
むぅ、確かに「Overloaded operators」というタイトルで始まる説明の中に書かれているだけで、
operator newがオーバーロードだとは書かれていないな。
3.7.4の言葉では『replaces the default version』か。
少なくともオーバーライドではないのでは?
0736デフォルトの名無しさん2016/03/30(水) 00:25:14.03ID:kph2Bx8Q
overrideは仮想関数についての用語で、operator newには使わないかも知れんが
overloadよりはoperator new(void*)をユーザー定義することの意味に近いってことさ
俺もそれ以上の主張はしない
0737デフォルトの名無しさん2016/03/30(水) 01:15:32.05ID:OkZk6jA9
>>700
ソースを delete やその他明示的な解放処理の名前で検索。
単体 delete は unique_ptr 、配列 delete は vector で置き換える、
その他は RAII ラッパーのデストラクタに注意深く押し込む。
0738デフォルトの名無しさん2016/03/30(水) 07:11:22.79ID:YrELR0Gg
配列も使い方次第ではunique_ptrでいいけどね
0739デフォルトの名無しさん2016/03/30(水) 07:14:59.59ID:gjgR4bIq
>>732
> いや、「普通にnewする」のをやめてマクロ定義した何かに全部置き換えるのかと思っていた。
> だから「そんなのヤダ」と言っていたんだ。
マジで10年ROMっとけ
0740デフォルトの名無しさん2016/03/30(水) 07:17:19.65ID:gjgR4bIq
>>735
> 少なくともオーバーライドではないのでは?
だから「どっちかって言うと」って書いてある
少なくともオーバーロードは明らかにおかしい
0741デフォルトの名無しさん2016/03/30(水) 07:46:10.09ID:Quon4zw6
>>731
operator new(void*)って簡単に置き換えられるんだっけ?

オーバーロードでこういうふうにする話かと思ってた。
http://jumble-note.blogspot.jp/2012/12/cnewdelete.html

MFCだとこれに
#define new DEBUG_NEW
なんて反則技合わせてリーク検出してるな。
0742デフォルトの名無しさん2016/03/30(水) 07:49:45.12ID:rtr/ZoOr
方言でコミュニケーションしてるみたいだ
0743デフォルトの名無しさん2016/03/30(水) 08:26:40.08ID:evGQ1MoD
newを自前でオーバーロードするならdeleteもオーバーロードしないと意味ないで
0744デフォルトの名無しさん2016/03/30(水) 11:42:36.89ID:Spu236HU
MFC はクラス構築するのにウィザード用意してたから
マクロとかどっさりついてきたよ
0745デフォルトの名無しさん2016/03/30(水) 12:38:50.34ID:PF+SxQoW
俺はマクロを教条主義的に嫌うわけではないが、
MFCのはさすがにげんなりしたなあ
0746デフォルトの名無しさん2016/03/30(水) 12:55:15.16ID:idf8Q5SU
Intelコンパイラに付いてくるヤツでイイじゃん

createthreadあたりのapiで漏れるのは仕方ないけどw
0747デフォルトの名無しさん2016/03/30(水) 13:31:18.66ID:CN1PPoue
ロードとライド、どっちがどっちだか未だに混乱する
0748デフォルトの名無しさん2016/03/30(水) 13:35:02.40ID:dzCSDoZX
override指定子を使い始めると混乱しなくなるよ
0749デフォルトの名無しさん2016/03/30(水) 14:01:18.71ID:qbKmn6Oy
マクロはわからんどであるべきだ。積極利用するなど病んでいる
一時回避策を常に使わねばならないなら、そもそも標準機能に取り入れてもらうよう委員会に働きかけるべきなのだ
0750デフォルトの名無しさん2016/03/30(水) 14:22:49.90ID:PF+SxQoW
気付かれないようにこっそり使ってなんぼだよな
0751デフォルトの名無しさん2016/03/30(水) 14:23:11.65ID:/Q3RGEF9
__VA_ARGS__をマクロを使わずに同等の事が出来るよう提案して
0752デフォルトの名無しさん2016/03/30(水) 20:32:04.48ID:yO7JBNvw
newもdeleteも最終的にはmalloc,freeが呼ばれるからそのライブラリを
自前実装ので横取りして呼ばれた時にコールスタックを歩いて呼び出し元を
特定して保存しておいて、リークしたらそれを表示するのが最強
つうかリーク検出ツールってそんな事してんじゃないかね

ちなみに横取りするのはOS毎にやり方が全然違う
0753デフォルトの名無しさん2016/03/30(水) 21:01:04.68ID:/Q3RGEF9
> newもdeleteも最終的にはmalloc,freeが呼ばれるから
根拠を求める
0754デフォルトの名無しさん2016/03/30(水) 21:47:32.97ID:yO7JBNvw
LinuxとWindows版の両方のg++でそうだったから。他のコンパイラは知らん
0755デフォルトの名無しさん2016/03/30(水) 21:47:58.81ID:GO4KFIif
>>753
ライブラリとOSの区別もついてない奴なのでスルーでお願いしますよ
0756デフォルトの名無しさん2016/03/30(水) 22:06:10.86ID:yO7JBNvw
>>755
> ライブラリとOSの区別もついてない奴なので
根拠を求める
0757デフォルトの名無しさん2016/03/30(水) 22:27:59.13ID:eqedEeub
>>754
馬鹿は去れ
0758デフォルトの名無しさん2016/03/30(水) 22:34:06.24ID:yO7JBNvw
まさかC++のランタイムはシステムコールとかOSのメモリ確保APIを直接呼び出してると
思ってるのかよ…
じゃあ具体的にどんなAPIを呼び出してるか調査してここに書き込んでくれ
0759デフォルトの名無しさん2016/03/30(水) 22:37:13.85ID:yO7JBNvw
当然最終的にはOSのメモリ確保APIが呼ばれてるから
newからメモリ確保APIまでのスタックトレースを貼り付けてくれ

ちなみにmallocは多めにメモリ確保してやり繰りするから
毎回OSのメモリ確保APIを呼び出すとは限らないよ
0760デフォルトの名無しさん2016/03/30(水) 22:39:12.36ID:GO4KFIif
>>756
> newもdeleteも最終的にはmalloc,freeが呼ばれるからそのライブラリ
> ちなみに横取りするのはOS毎にやり方が全然違う
0761デフォルトの名無しさん2016/03/30(水) 22:39:40.25ID:yO7JBNvw
まさかと思うけどnewのメモリ確保はどこからか魔法のようにメモリが飛んでくると思っちゃってんのか?
0762デフォルトの名無しさん2016/03/30(水) 22:42:46.29ID:yO7JBNvw
>>760
> ちなみに横取りするのはOS毎にやり方が全然違う
え…まさか共有ライブラリのプリローディングのやり方が一緒だと思ってんのかよ…
0763デフォルトの名無しさん2016/03/30(水) 22:45:13.80ID:tSFAkOFz
OSとの区別wwwバカに限ってエラそうにしゃべるよねここでは
俺もmallocを呼び出さないnewの実装なんてみたことないな
0764デフォルトの名無しさん2016/03/30(水) 22:56:42.96ID:tSFAkOFz
みたことないし、newはmallocを呼び出すように実装するのが当たり前なんだよなあバカにはこんなことも分からないようだけど
そしてmallocではプロセス内で効率的なヒープ管理をしててなるべくOSのAPIを呼び出さないようになってる
0765デフォルトの名無しさん2016/03/30(水) 23:01:15.05ID:yO7JBNvw
やれやれだぜ…
とりあえずBinary Hacksを1回は読んで欲しいもんだ
C++でmallocの差し替えについて書いてあったかは忘れたが
0766デフォルトの名無しさん2016/03/30(水) 23:06:09.88ID:GO4KFIif
>>762
スタティックライブラリも知らんのかよ...
そもそも >>703 辺りの話はソースレベルの話だぞ w
0767デフォルトの名無しさん2016/03/30(水) 23:11:22.26ID:tSFAkOFz
スタティックライブラリwwwまーたアサッテなことを言い出したよ
0768デフォルトの名無しさん2016/03/30(水) 23:12:46.33ID:yO7JBNvw
>>766
なんでわざわざスタティックライブラリにすんだ?
ちなみにWindowsの場合はmsvcrt.dll内にmallocがある

それとstrdup()とかしれっと内部でmallocを呼んでるからマクロだけだと
完全なリーク検出は厳しいよ (もちろん気をつければ不可能ではないが)
別にツールとか何も使わずにマクロだけでなんとかしたいって話なら無視してくれていいけど
0769デフォルトの名無しさん2016/03/30(水) 23:15:43.26ID:/Q3RGEF9
>>758
libcのmallocを使わなきゃいけないという決まりでもあるのか?
0770デフォルトの名無しさん2016/03/30(水) 23:22:55.87ID:yO7JBNvw
>>769
newがmallocを呼び出さないといけない決まりなんて無いけど
逆にmallocを呼び出さないで効率的なメモリ管理なんてまず無理
今もマルチコアで効率的なmallocの実装とか発明され続けてるから相当奥が深い
0771デフォルトの名無しさん2016/03/30(水) 23:26:04.37ID:dgdg37Vb
「mallocが効率的」
何かのギャグですか
0772デフォルトの名無しさん2016/03/30(水) 23:27:40.30ID:GO4KFIif
>>768
> なんでわざわざスタティックライブラリにすんだ?
そんなもん組み方で色々あるだろ
dll のみしか考えない方がアホすぎる
0773デフォルトの名無しさん2016/03/30(水) 23:28:34.84ID:tjBkUm/R
stackexchangeによれば、
windowsではdebugモードではmalloc、releaseモードではheapallocが直接呼ばれるみたいだよ
0774デフォルトの名無しさん2016/03/30(水) 23:28:36.52ID:yO7JBNvw
>>771
jemallocとかググってみ

つうかこのスレってこんなにもレベルが落ちてたのかよ…
0775デフォルトの名無しさん2016/03/30(水) 23:30:41.86ID:kpJLQt7n
mallocを使ってない実装があるなら見せてくれ
0776デフォルトの名無しさん2016/03/30(水) 23:30:48.57ID:clErjdG4
まあ確かに用途によっては最適化できるけど。
mallocの効率もそんなに馬鹿に出来ないんじゃね。
0777デフォルトの名無しさん2016/03/30(水) 23:31:36.76ID:yO7JBNvw
>>773
マジかよ…当然デバッグ中にしか意味の無い機能だからrelaseモードで
heapallocが呼ばれても問題ないけど知らなかった
ちなみにg++での話か?なんとなくVC++のような気がするけど
0778デフォルトの名無しさん2016/03/30(水) 23:39:53.55ID:kcHqUaQ/
>>777
g++でもclangでもそうだよ
0779デフォルトの名無しさん2016/03/30(水) 23:41:53.37ID:P0xSmpGr
mallocはmallocよりfreeが遅い
フリーリストの連結が遅い
一気に1万個ぐらいmalloc、freeしまくるプログラムでは問題になるよね
メモリを多少無駄遣いしてもよいのであれば、もっと早く動くアルゴリズムもあるので
常にmallocが良いとも限らないかと
mallocは汎用性を重視してあるので
0780デフォルトの名無しさん2016/03/30(水) 23:47:52.10ID:yO7JBNvw
>>778
なるほど、ありがとう

>>779
malloc,freeはメモリ確保の共通インターフェースだからmallocが速い遅い言うのはちょっと違う
場合によってjemallocみたいなのをプリロードしてmallocを差し替えるとかは他のOSSとかでやってたりする
0781デフォルトの名無しさん2016/03/30(水) 23:52:03.72ID:/Q3RGEF9
>>770
libcのmallocはスレッドセーフである事を要求されていない、c++のnewは要求されている
c++側で独自実装する理由は十分にある

>>774
まさか、jemallocが最強でそれがlibcに使われているとでも?
より高性能なメモリアロケータを独自実装していると言う考えには思い至らないのだろうか?

特にスマートポインタが一般化し、小サイズオブジェクトでの性能的が要求されてきているので、これも最適化のネタだ
0782デフォルトの名無しさん2016/03/31(木) 00:03:10.29ID:wytOYZTk
>>781
glibcのmallocは意図的に指定しない限りデフォはスレッドセーフだな
逆にスレッドセーフじゃない実装があるのか疑問だ

jemallocが最強とは一言も言ってないけどそういう状況にも対応出来るように
実装されてるはず (詳しくは知らん)
https://sploitfun.wordpress.com/2015/02/10/understanding-glibc-malloc/
ここに各OSのmallocの実装状況が出てたよ
0783デフォルトの名無しさん2016/03/31(木) 01:05:19.93ID:ckG9MVZD
newとmallocの話が、なぜOSとライブラリの話へワープするんだ?
いったいどうすれば、何を使えばそんなまねができるんだ?
0784デフォルトの名無しさん2016/03/31(木) 01:21:52.62ID:My05nsXj
Linux上のglibc のmallocはpthreadをリンクしなければ自動的にシングルスレッド版になる
他の環境は知らん
0785デフォルトの名無しさん2016/03/31(木) 04:58:38.65ID:Sejgg9vl
>>773
Releaseモードでもmallocが呼ばれてるけど?
VS2015 x86
0786デフォルトの名無しさん2016/03/31(木) 05:49:30.37ID:Sejgg9vl
>>778もホラッチョ臭いな
Windows上のg++やclangでmallocを呼ばないで直接HeapAlloc呼び出す具体例を出すんだな
環境を明示すれば俺が調べてやるよ
0787デフォルトの名無しさん2016/03/31(木) 06:08:29.49ID:Tq9AKUqv
>>783
> ちなみに横取りするのはOS毎にやり方が全然違う
とかアホなことを言う知ったか君がいるからだろ
処理系毎って言っときゃいいのに
てか、もうその話題終わったし、周回遅れすぎだろ
0788デフォルトの名無しさん2016/03/31(木) 06:11:46.11ID:4vGs+7xF
C++を学んでみたくて3冊入門書を買って全く理解できなかったのですが
C++はC言語を先にしっかり覚えておかないと身につかないものなのでしょうか?
初学者の質問ですいませんがお願いします
0789デフォルトの名無しさん2016/03/31(木) 06:13:50.68ID:RIwggV0S
実際になにか作らないと理解できないよ
0790デフォルトの名無しさん2016/03/31(木) 06:23:58.54ID:4vGs+7xF
何かを作るとはプログラムを書くということですか?
一応borlandとC言語を始めようという奴をDLして実際に書きながら読んだりはしているのですが…
0791デフォルトの名無しさん2016/03/31(木) 07:00:42.42ID:sYy1gdjM
Cを知らなくてもC++を習得することはできる、と思うけど
Cを知らない人向けの、C++の良い入門書を見たことがない。

最初にC++の基礎知識としてCの説明が載ってるような本で学ぶと
Cのクセが身についてしまう気がするんだよなぁ。
0792デフォルトの名無しさん2016/03/31(木) 07:24:48.84ID:4vGs+7xF
>>791
ありがとうございます
あのーC言語を先に勉強してたら後からC++をやる時、簡単に覚えられるとかそういったことはないんでしようか?
C言語はネットで少し調べて勉強してみた感じだと簡単な印象を受けたので意味あるならC言語から先にやろうと思ってるんですが
C言語覚えても大してC++の学習に意味が無いなら全く意味が分からないけどC++から勉強しようと思ってはいるんですが・・・
近道は無いですか
0793デフォルトの名無しさん2016/03/31(木) 08:09:26.00ID:wytOYZTk
>>787
処理系ww
ローダーとか知らないのかな
https://en.wikipedia.org/wiki/DLL_injection
↑ここを100回読めよ
0794デフォルトの名無しさん2016/03/31(木) 08:29:35.30ID:0ft4Z4zi
>>793
まだいたのか w
ライブラリを偽装する方法は DLL の差し替えだけじゃない
って何回説明しても理解できないんだろうな
0795デフォルトの名無しさん2016/03/31(木) 08:32:53.26ID:2aAx7JX6
>>792
何故意味がないと思ったのか
0796デフォルトの名無しさん2016/03/31(木) 08:36:49.75ID:wytOYZTk
>>794
いやそれだけ
それ以外はマクロハックと同じ
0797デフォルトの名無しさん2016/03/31(木) 08:38:29.43ID:nkzU0v9F
>>792
C++ は Cに上乗せして強化
自転車にエンジンつけてバイクにしたようなもの

どっちも転んだだけで死ぬので
初心者なら普通の4輪車がオススメ
0798デフォルトの名無しさん2016/03/31(木) 08:42:13.72ID:wytOYZTk
>>794
お前の言う処理系依存の方法は
strdup()が内部で呼んでるmalloc()とか
他のライブラリが呼んでるのも偽装できんだよな?
0799デフォルトの名無しさん2016/03/31(木) 08:48:43.48ID:wytOYZTk
strdup()は内部でmalloc()はするがfree()は自分でやる必要があるから
ちゃんと捕捉しないといけない
他のライブラリでそういうのがあったら全部捕捉する必要はある
0800デフォルトの名無しさん2016/03/31(木) 08:49:59.01ID:ScXuRFRf
>>796
スタティックライブラリのデバッグ版とかも知らんのか w
デバッグ用の API とか使って動的に差し替えるとかもあるし
無知すぎだろ
0801デフォルトの名無しさん2016/03/31(木) 08:50:18.69ID:2aAx7JX6
うわっ、朝から粘着してる
気持ちわる
0802デフォルトの名無しさん2016/03/31(木) 08:58:28.39ID:wytOYZTk
>>800
スタティックライブラリをリンクしたら素のmallocがそのままくっつくだけだろw
> デバッグ用の API とか使って動的に差し替えるとかもあるし
だからそれがDLL Injection
0803デフォルトの名無しさん2016/03/31(木) 09:00:26.56ID:+VywWLYK
>>786
> Windows上のg++やclangでmallocを呼ばないで直接HeapAlloc呼び出す具体例を出すんだな
ほらよ、c++ライブラリが独自のmallocを実装していた実例
http://www.doc.ic.ac.uk/lab/cplus/g++library/libg++_14.html
> Libg++ contains versions of malloc, free, realloc that were designed to be well-tuned to C++ applications.

> 環境を明示すれば俺が調べてやるよ
お前のゴミのような調査能力なんか全然期待していない。PostMessageを監視するお仕事に戻る事だ。
0804デフォルトの名無しさん2016/03/31(木) 10:12:16.22ID:lfltnis2
>>803
ソースみてないけど
mallocが、呼び出すんじゃないの、これ?
0805デフォルトの名無しさん2016/03/31(木) 10:50:23.72ID:Sejgg9vl
>>803
libg++www悪いけど俺は考古学者じゃないんでね
それにこれですらnewはmallocを呼び出すことに変わりないし
お前はやっぱりプレミアム級のバカだなあ
0806デフォルトの名無しさん2016/03/31(木) 10:56:31.42ID:Sejgg9vl
だいたい「mallocを呼び出さないでHeapAllocを直接呼び出すnew実装の具体例」
を求めてるのにlibg++を持ちだして勝ち誇ったような態度されてもね
そんなんだから(略)
0807デフォルトの名無しさん2016/03/31(木) 11:17:25.46ID:+VywWLYK
libcのmallocを使わず独自実装と言うのが元のお題
0808デフォルトの名無しさん2016/03/31(木) 11:21:17.83ID:Sejgg9vl
さあそんなお題なんて知らねーな

773 :デフォルトの名無しさん :2016/03/30(水) 23:28:34.84 ID:tjBkUm/R
stackexchangeによれば、
windowsではdebugモードではmalloc、releaseモードではheapallocが直接呼ばれるみたいだよ

778 :デフォルトの名無しさん :2016/03/30(水) 23:39:53.55 ID:kcHqUaQ/
>>777
g++でもclangでもそうだよ
0809デフォルトの名無しさん2016/03/31(木) 11:59:17.72ID:4vGs+7xF
>>795
C言とC++自分で見た感じだと全く違うもののように見えたので、自分で全く意味ないと解釈してました
とりあえず意味があるならC言語のほうが簡単そうなので先にC言語やっちゃいたいと思います。
ありがとうございます
0810デフォルトの名無しさん2016/03/31(木) 12:10:55.85ID:61JDjacR
C++の(古い部分を含めた)全てを学ぶつもりなら結局Cも覚えるのとほぼ一緒
C++の必要十分な機能を使うだけならCを勉強する必要は無い

正直言って勉強前に見当をつけるのは無理
0811デフォルトの名無しさん2016/03/31(木) 12:47:15.96ID:4vGs+7xF
>>810
具体的にありがとうございます
。C++学習の目的はゲームのプログラムを覗いたり色んなツールとか作ってみたいからとかなんですが
何が必要で何が不必要か自分じゃ全く分からないので無難にC言語の基礎くらい覚えてからやった方がいいですよね・・
0812デフォルトの名無しさん2016/03/31(木) 12:49:42.06ID:ScXuRFRf
>>802
> スタティックライブラリをリンクしたら素のmallocがそのままくっつくだけだろw
バカなの?
デバッグ版のライブラリとリンクすればいいだけだろ
ライブラリって提供された奴しかダメとか思ってるのか?

> > デバッグ用の API とか使って動的に差し替えるとかもあるし
> だからそれがDLL Injection
違う
DebugActiveProcess とか ptrace を使う話だ
0813デフォルトの名無しさん2016/03/31(木) 13:01:17.81ID:ScXuRFRf
>>806
どんなときに使うのか知らんけど
_SYSCRT を定義してライブラリを作ると new で _heap_alloc を呼び出すコードになってるな
Visual Studio Express 2013
0814デフォルトの名無しさん2016/03/31(木) 13:01:53.14ID:61JDjacR
>>811
基本だけ抑えて早々に移行するのが良いと思う

C++のどの部分がC由来かが分かるだけで
見通しもかなり良くなるはず
0815デフォルトの名無しさん2016/03/31(木) 13:10:41.88ID:wytOYZTk
>>812
デバッグ版のライブラリとリンクするとmallocがどうなるってんだよw
意味不明
> DebugActiveProcess とか ptrace を使う話だ
何言ってんの…馬鹿かよ
DLL Injectionと何の関係があんだよ
論点がずれてるようだがデバッグをするんじゃないだろ
malloc,freeを自前の実装版で捕捉してメモリリークの調査をするっていうながれをずっとしてんだろ
0816デフォルトの名無しさん2016/03/31(木) 13:14:41.51ID:wytOYZTk
>>812
とりあえずDebugActiveProcess使ってmallocを自前実装版に差し替える手順を説明しろ
https://msdn.microsoft.com/ja-jp/library/cc428926.aspx
がDebugActiveProcessのリファレンスだがそんな機能は全く無いけどなw
0817デフォルトの名無しさん2016/03/31(木) 13:46:30.55ID:+VywWLYK
>>808
PostMessageくんは本当に頭が悪いな。もとのお題はこれだよ。

752 : デフォルトの名無しさん2016/03/30(水) 20:32:04.48 ID:yO7JBNvw
newもdeleteも最終的にはmalloc,freeが呼ばれるからそのライブラリを
自前実装ので横取りして呼ばれた時にコールスタックを歩いて呼び出し元を
特定して保存しておいて、リークしたらそれを表示するのが最強
つうかリーク検出ツールってそんな事してんじゃないかね

ちなみに横取りするのはOS毎にやり方が全然違う
0818デフォルトの名無しさん2016/03/31(木) 14:03:56.09ID:Sejgg9vl
>>817
PostMessageの件がなんでお前のトラウマボタンを押しちゃったのか分からないがそろそろ落ち着け

C++のライブラリははnewもmallocも両方サポートする必要があるという状況で
newはmallocを呼び出す薄いラッパーとして実装されるのが自然なのであって
そうじゃない実装なんて見たことない
例外があるなら具体的に挙げてみろと言ってるだけなのだが?
アサッテなものを持ちだしては「証明終了!」とか実にお前らしいなあ

まあ、そういう例外があっても規格に違反してるわけじゃないし、別におかしくはないんだけどね
0819デフォルトの名無しさん2016/03/31(木) 14:45:20.35ID:yy0681Er
>>817
C++にはデストラクタがあるから、そこに何かを仕込めそう

一方、Rubyにはデストラクタが無いから、GCのファイナライザーに仕込むしかない
0820デフォルトの名無しさん2016/03/31(木) 14:50:10.53ID:Dfa8D5EM
な?PostMessageさんだっただろ?
0821デフォルトの名無しさん2016/03/31(木) 16:12:26.92ID:Sejgg9vl
>>820
だから何?わけの分からない粘着君
0822デフォルトの名無しさん2016/03/31(木) 16:34:41.88ID:7za8ruVE
>>818
free(new char); が未定義動作にならないって、どこかに書いてあるのか?
0823デフォルトの名無しさん2016/03/31(木) 18:44:40.77ID:DVM4CxPR
まとめといたから次からテンプレにいれとけ

・メモリ不足で死ねない場合はPostMessageを監視する
・早い話valgrindはリーク検出については使いものにならない
・classのデフォルトアクセス範囲をpublicにすべき
・VCでの開発時コンソールプログラムを終了時に待機させるのにCtrl+F5するのはバッドノウハウ
・newもdeleteも最終的にはmalloc,freeが呼ばれるから自前実装で横取りする
ちなみに横取りするのはOS毎にやり方が全然違う
0824デフォルトの名無しさん2016/03/31(木) 18:45:39.46ID:DVM4CxPR
あ、間違えた
誰か直しといて
0825デフォルトの名無しさん2016/03/31(木) 19:11:23.53ID:wytOYZTk
>>817
俺は
ID:yO7JBNvw
ID:wytOYZTk
だぞ。全部抽出してみ、書いてる事は全て正しいよ
0826デフォルトの名無しさん2016/03/31(木) 19:16:52.76ID:DVM4CxPR
>>825
わかってる
ぼーっとこぴぺして加工したあとに気がついた
0827デフォルトの名無しさん2016/03/31(木) 19:17:23.31ID:DVM4CxPR
また間違えた
ぼーっとしすぎや
0828デフォルトの名無しさん2016/03/31(木) 19:18:53.02ID:wytOYZTk
>>827
お前基地害だろ
0829デフォルトの名無しさん2016/03/31(木) 19:19:33.09ID:2aAx7JX6
つまらない事に熱を注ぐ奴はみんなキチガイだ
0830デフォルトの名無しさん2016/03/31(木) 19:21:10.87ID:wytOYZTk
>>827
こちは真性だろ。本物は初めて見た
0831デフォルトの名無しさん2016/03/31(木) 19:37:49.81ID:ScXuRFRf
>>815
> デバッグ版のライブラリとリンクするとmallocがどうなるってんだよ
なんでもやり放題だろ
ライブラリ作ったことないのか?
Visual Studio も GCC/clang もライブラリのソースがあるから malloc/free をラップして確保/解放情報を取得するとか簡単にできる

> > DebugActiveProcess とか ptrace を使う話だ
> DLL Injectionと何の関係があんだよ
DLL Injection と違うって書いてあるのになんの関係ガー
とかバカすぎるだろ w

> 論点がずれてるようだがデバッグをするんじゃないだろ
デバッガーでブレークかけて違う関数呼び出したりできることもご存じない?

> malloc,freeを自前の実装版で捕捉してメモリリークの調査をするっていうながれをずっとしてんだろ
ここだけは合ってるんだな w
0832デフォルトの名無しさん2016/03/31(木) 19:48:30.56ID:ScXuRFRf
>>816
ホントに応用力ないのな w
DebugActiveProcess でプロセスにアタッチして
WaitForDebugEvent でプロセス一時停止するまで待って
WriteProcessMemory でブレークポイント置いて実行継続
ブレークしたら malloc エミュレートするなりなんでもできるだろ
0833デフォルトの名無しさん2016/03/31(木) 19:51:31.05ID:wytOYZTk
>>831
> Visual Studio も GCC/clang もライブラリのソースがあるから malloc/free をラップして確保/解放情報を取得するとか簡単にできる
だからサードパーティ製のようなDLLしかないライブラリを使う場合はどうなるってんだよ
DLL Injectionでmalloc/freeを置き換えるのが不可能だと言いたいのか?
不可能ではなければそれだけで全て事足りるだろ

> DLL Injection と違うって書いてあるのになんの関係ガー
> とかバカすぎるだろ w

> > > デバッグ用の API とか使って動的に差し替えるとかもあるし ← これお前の書き込み
> > だからそれがDLL Injection
> 違う
DebugActiveProcess とか ptrace を使う話だ ← これお前の書き込み
↑デバッグ用のAPI(お前が言うにはDebugActiveProcessだが)で動的に差し替えてみろよ
基地害だからDebugActiveProcessで動的差し替えできると思ってるらしいが

> デバッガーでブレークかけて違う関数呼び出したりできることもご存じない?
お前何万回と呼ばれる可能性のあるmallocをブレークとか片腹痛いwww
お前は手動でやる事にこだわってたのかよ…そりゃ話が合わないわ
もういいよボロが出ちゃったから
0834デフォルトの名無しさん2016/03/31(木) 19:52:41.84ID:wytOYZTk
>>832
取り合えずお前らみんな手動でやる事にこだわってたんだなw
ポチポチ頑張ってくれよw
0835デフォルトの名無しさん2016/03/31(木) 19:57:15.37ID:ScXuRFRf
>>818
> 例外があるなら具体的に挙げてみろと言ってるだけなのだが?
>>813 じゃダメなのか?
0836デフォルトの名無しさん2016/03/31(木) 20:09:40.29ID:ScXuRFRf
>>833
> だからサードパーティ製のようなDLLしかないライブラリを使う場合はどうなるってんだよ
勝手な後だし条件かよ w
サードパーティの malloc ?
とりあえず参考までに具体的な名前教えて

> DLL Injectionでmalloc/freeを置き換えるのが不可能だと言いたいのか?
別にやりたきゃやればいいだけ
別の方法もあるってだけの話

> 不可能ではなければそれだけで全て事足りるだろ
スタティックライブラリの例は無視なの?

> 基地害だからDebugActiveProcessで動的差し替えできると思ってるらしいが
DebugActiveProcess「とか」って書いてあるのが見えないの?

> お前は手動でやる事にこだわってたのかよ…そりゃ話が合わないわ
はあ?
なんのために API の名前書いてあると思ってるんだ?
そう言うプログラムを作るだけの話だろ
デバッグて書くとデバッガしか思いつかないとかどんだけ頭固いんだよ...

> もういいよボロが出ちゃったから
敗北宣言ですか?
確かにお前のレスはボロボロだしな w
0837デフォルトの名無しさん2016/03/31(木) 20:11:03.13ID:X8/ytHGi
>>791
つhttp://www.amazon.co.jp/dp/4894714221
0838デフォルトの名無しさん2016/03/31(木) 20:18:26.41ID:wytOYZTk
>>836
> 勝手な後だし条件かよ w
つうかそれぐらい普通に想定しろよw
> サードパーティの malloc ?
サードパーティのmallocなんて言ってねーよw
DLL内でnewしてオブジェクトを返すライブラリがあったとして
それをdeleteするにはDLL内のmallocを捕捉する必要がある。アンダースタン?

> 別の方法もあるってだけの話
それは分かったよ
一生懸命ブレーク張って置き換えんだろwww
面白すぎるもっとやってくれ

> そう言うプログラムを作るだけの話だろ
DebugActiveProcess「とか」言ってんなら
取り合えず数行でもいいからコード書いてよマジで
とりあえず一生懸命ネットでググって得た知識だから
全然具体的な事はわかってないんだろ?
マジで書けよ、おい
0839デフォルトの名無しさん2016/03/31(木) 20:21:28.25ID:wytOYZTk
>>836
取り合えずDebugActiveProcessで一回嘘ついてんだよお前は
早く他の方法をコードつきで書けよ、ほら
次はなんだよ
0840デフォルトの名無しさん2016/03/31(木) 20:27:56.34ID:wytOYZTk
>>836
> > DLL Injectionでmalloc/freeを置き換えるのが不可能だと言いたいのか?
> 別にやりたきゃやればいいだけ
> 別の方法もあるってだけの話

DLL Injectionでいいし何も問題無い事にわざわざケチ付けて別の方法を言う意味がどこにあんだよ
マジで頭おかしいだろ
0841デフォルトの名無しさん2016/03/31(木) 20:48:29.39ID:6cajku4Z
これが C++ の闇
0842デフォルトの名無しさん2016/03/31(木) 20:56:47.61ID:WeZ5Ydwh
こういう馬鹿を組み入れないためのリーナスの判断はやっぱ正しいわ。
0843デフォルトの名無しさん2016/03/31(木) 21:00:14.44ID:ScXuRFRf
>>838
> それをdeleteするにはDLL内のmallocを捕捉する必要がある。アンダースタン?
delete ?
ちょっと頭冷やした方がよくね?
3連投とか顔真っ赤なのはわかったからさ w

> 一生懸命ブレーク張って置き換えんだろwww
ん?
一生懸命なのはコンピューターだよ?
ああ、無駄なレスしてるお前も一生懸命だったな w

> 取り合えず数行でもいいからコード書いてよマジで
>>832 で十分だろ?
あれでわかんないところがあるのか?

>>839
> 取り合えずDebugActiveProcessで一回嘘ついてんだよお前は
はあ?
どこが嘘なのか具体的によろ

>>840
> DLL Injectionでいいし何も問題無い事にわざわざケチ付けて別の方法を言う意味がどこにあんだよ
はっきり「スタティックライブラリ」って書いてあってもアホは噛みついてくるんだな
狂犬病かよ w
0844デフォルトの名無しさん2016/03/31(木) 21:13:16.81ID:wytOYZTk
>>843
> delete ?
auto a = getNewObjectFromThirdPartyLib();
... aを使う
delete a; ← これ
newはライブラリ内にあるが、deleteは自分のソースに書く
リークを検出するには、ライブラリ内のnew(malloc)を捕捉しないと
自分のソース内のdelete と釣り合いが取れなくなる
っていうか、頭悪wwwかわいそうだなお前

> あれでわかんないところがあるのか?
分かってないのはお前
取り合えずコード書けないのは分かったから流れだけでも説明してよ
それすら出来ない?
多分しないだろうけど

> どこが嘘なのか具体的によろ
https://msdn.microsoft.com/ja-jp/library/cc428926.aspx
> デバッガをアクティブなプロセスにアタッチしてデバッグできるようにします。
プロセスにアタッチするAPIだからwww残念

お前はデバッグさえ出来れば置き換えられると思って書いただろうけど
アタッチするだけのAPIだったよwww
俺は知らないけど他に必要なんだよ(手動は無しよw)
だから次はそれを教えてよ、はい頑張って
0845デフォルトの名無しさん2016/03/31(木) 21:16:35.66ID:wytOYZTk
>>843
> はっきり「スタティックライブラリ」って書いてあってもアホは噛みついてくるんだな
>>767を読め(これは俺じゃない)
0846デフォルトの名無しさん2016/03/31(木) 21:22:55.74ID:2aAx7JX6
プログラミング関連のスレっていつもこうやって過疎っていくんだよな
2chでまじめな話は無理だってことは証明された
0847デフォルトの名無しさん2016/03/31(木) 21:23:07.76ID:wytOYZTk
>>843
DebugActiveProcessって英語読めれば一目瞭然なのにここまで引っ張るとはw

DebugActiveProcess君は次も間違いなく具体的なことは書かずに
誹謗中傷に徹するだろうな
0848デフォルトの名無しさん2016/03/31(木) 21:30:04.70ID:Tq9AKUqv
>>844
だから頭冷やせよ...

> それをdeleteするにはDLL内のmallocを捕捉する必要がある。
どこがアホなのか説明した方がいいか? w

> 流れだけでも説明してよ
>>832 に流れが説明してあることも理解できないのか?
とりあえず >>832 に書いてある API をググる作業に戻れよ w
0849デフォルトの名無しさん2016/03/31(木) 21:34:51.22ID:wytOYZTk
>>848
> > それをdeleteするにはDLL内のmallocを捕捉する必要がある。
> どこがアホなのか説明した方がいいか? w

それを(リーク検出の為に釣り合いを保って)deleteするにはDLL内のmallocを捕捉する必要がある。
アホには言葉足らずだったスマン

> >>832 に流れが説明してあることも理解できないのか?
手動のやつかよ興味ねーよ
毎回アタッチされて止まるまで待つのかよ馬鹿かよw
DLL Injection
0850デフォルトの名無しさん2016/03/31(木) 21:37:31.76ID:nkzU0v9F
>>832
って自分でデバッガ自作するときのやつだろ
そこまでやるならなんか買って来て使えばいい
0851デフォルトの名無しさん2016/03/31(木) 21:37:36.59ID:wytOYZTk
>>848(続き)
DLL Injectionと比較して利点と欠点ぐらい言えよ
非効率な方法を一生懸命説明してるのがマジで切ない
0852デフォルトの名無しさん2016/03/31(木) 21:38:09.58ID:hPPCag02
>>844

DLL境界を越えてメモリブロックを渡して呼び出し側にdeleteさせるなんてライブラリは
ほとんど仕様のバグに等しいんだから、そんなの考慮外でいいだろう。
0853デフォルトの名無しさん2016/03/31(木) 21:43:46.11ID:wytOYZTk
>>852
そうとは言い切れない
auto a = getNewObjectFromThirdPartyLib();
... aを使う
releaseObjectFromThirdPartyLib(a);

みたいに直接deleteはさせないけど解放用のAPIを用意してることは考えられる
releaseObjectFromThirdPartyLib(a);を呼び忘れる事がメモリリークだから
考慮は必要だと思うよ
0854デフォルトの名無しさん2016/03/31(木) 21:51:21.59ID:lrEHU6MC
>>853
gslのワークスペースなんかはそんな仕様だよな
0855デフォルトの名無しさん2016/03/31(木) 22:00:14.98ID:hPPCag02
>>853
だから>>844は間違ってて、>>853のようにするのが正しいんだよ。しれっと修正すんなw

で、「getで取得したものはreleaseで返しましょう」ってなったらリーク検知というよりも
そのライブラリの使い方が正しいかどうかって話だな。
そもそもそのgetで動的にメモリを確保してるのかどうかすらわからんわけだし。
0856デフォルトの名無しさん2016/03/31(木) 22:06:00.43ID:wytOYZTk
>>855
修正したつもりはなかったけど、deleteだけさせる事は確かにほとんど無いかもね
でもDLL Injectionでmalloc/freeに加えてget/releaseも捕捉すればいいから
メモリ以外にも色々なリソースリークに使えるはず
0857デフォルトの名無しさん2016/03/31(木) 22:18:54.48ID:Tq9AKUqv
>>845
別にアホが複数いるのは珍しくないけど?
で、君の意見はないのか?
0858デフォルトの名無しさん2016/03/31(木) 22:24:48.34ID:Tq9AKUqv
>>849
> それを(リーク検出の為に釣り合いを保って)deleteするにはDLL内のmallocを捕捉する必要がある。
malloc を捕捉なんてしなくても delete できるけど?
まだ、恥の上塗りする? w

> 毎回アタッチされて止まるまで待つのかよ馬鹿かよw
バカすぎ笑たわ
>> WaitForDebugEvent でプロセス一時停止するまで待って
って書いてあるのも理解できてないとか w
0859デフォルトの名無しさん2016/03/31(木) 22:27:10.04ID:Tq9AKUqv
>>851
動作中のプロセスにも適用できるとかかな
もちろんスタティックライブラリでも大丈夫だし w
0860デフォルトの名無しさん2016/03/31(木) 22:30:31.37ID:Tq9AKUqv
>>850
> って自分でデバッガ自作するときのやつだろ
デバッガの作成にしか使えないと思ってるなら頭固すぎ
あるものは便利に使わなきゃね
0861デフォルトの名無しさん2016/03/31(木) 22:33:36.80ID:wytOYZTk
>>858
> malloc を捕捉なんてしなくても delete できるけど?
メモリリークの話してんのにmallocを捕捉しないとか本末転倒過ぎてもう…
色々突っこんでる奴いるけどお前が群を抜いて馬鹿だなww面白すぎww

>> WaitForDebugEvent でプロセス一時停止するまで待って
いや待ってるじゃんww
メクラかよ
サーバープログラムとか一時停止するまで待つとかありえねーよ
っていうと後出し言うんだろwww
お前が経験無いだけだからww残念

DebugActiveProcess君、はい次どうぞww待ってるよ
0862デフォルトの名無しさん2016/03/31(木) 22:39:28.58ID:wytOYZTk
>>858
> malloc を捕捉なんてしなくても delete できるけど?
これを書き込むに至った理由を頼むから教えてくれ、m(_ _)m ← このとーりwww
ちゃんと保存しとくから
0863デフォルトの名無しさん2016/03/31(木) 22:47:39.10ID:wytOYZTk
>>858
あと>>832で
> ブレークしたら malloc エミュレートするなりなんでもできるだろ
ここのAPIが書いてないからサクッと補完しといて(手動は無しよw)
見た瞬間分かるんだよね?どこかのリンクでもいいよ
0864デフォルトの名無しさん2016/03/31(木) 22:51:13.84ID:Tq9AKUqv
サーバープログラムとか言い出した w
別に数ms 程度停まっても平気なサーバーソフトはいくらでもあるぞ

>> malloc を捕捉なんてしなくても delete できるけど?
> これを書き込むに至った理由を頼むから教えてくれ

冷静なら
> DLL内でnewしてオブジェクトを返すライブラリがあったとして
> それを(きちんと)delete(したかを確認)するにはDLL内のmallocを捕捉する必要がある。
って書くわな
恥ずかしいだろうからわざと説明しなかったのに w
0865デフォルトの名無しさん2016/03/31(木) 22:55:30.35ID:wytOYZTk
>>864
> 別に数ms 程度停まっても平気なサーバーソフトはいくらでもあるぞ
とりあえず>>863に返答して完全に自動で出来る事を証明しろ
じゃなきゃ手動でやってたら数msで済むわけ無いだろ

>>849に書いたけど
> それを(リーク検出の為に釣り合いを保って)deleteするにはDLL内のmallocを捕捉する必要がある。
> アホには言葉足らずだったスマン

揚げ足取るにしても寒いツッコミだったなwww
はい次、>>863の返答を待ってるよ
0866デフォルトの名無しさん2016/03/31(木) 22:57:25.36ID:X8/ytHGi
乗り遅れたっ
0867デフォルトの名無しさん2016/03/31(木) 22:57:46.00ID:Tq9AKUqv
>>863
> ここのAPIが書いてないからサクッと補完しといて(手動は無しよw)
API?
お前本当に何もわかってないんだな w
お前が言ってる DLL Injection でも Injection されるコードは必要だろ?
さすがにそれぐらいは理解してると思ったが...
0868デフォルトの名無しさん2016/03/31(木) 22:58:20.05ID:6K07pBVr
またキチガイの片山が暴れてるの?
0869デフォルトの名無しさん2016/03/31(木) 22:59:37.41ID:wytOYZTk
>>864
ちなみにWriteProcessMemoryは関数が置いてあるコード領域は書き換えられないよ
これはグローバル変数とか書き換える用だろ
0870デフォルトの名無しさん2016/03/31(木) 23:02:06.51ID:wytOYZTk
>>867
アホか
だからmy_malloc()みたいな関数があってそれをどう使えば
>>832の後に関数の中身を書き換えられるのかコードかリンクを出せよ

さっきから文章しか書いてないぞ
そろそろコードがみたいよwww
0871デフォルトの名無しさん2016/03/31(木) 23:03:46.52ID:Tq9AKUqv
>>865
> とりあえず>>863に返答して完全に自動で出来る事を証明しろ
デバッガというソフトがやれることが自動化できない理由がないと思うんだが...
> じゃなきゃ手動でやってたら数msで済むわけ無いだろ
なんで手動にアホみたいに固執するのか意味わからん
マクロを知らないで Excel でポチポチやってるおばちゃん並みの知恵しかないのか w
0872デフォルトの名無しさん2016/03/31(木) 23:05:53.46ID:wytOYZTk
>>871
> デバッガというソフトがやれることが自動化できない理由がないと思うんだが...
ご名答ww
だからAPIを教えてっていってんだよ
なぜならお前が何も知らない馬鹿だと思ってるからそれを覆して欲しい

> なんで手動にアホみたいに固執するのか意味わからん
それがお前が手動でしかできない方法をアホみたいに支持してるからwww
0873デフォルトの名無しさん2016/03/31(木) 23:10:41.80ID:wytOYZTk
>>871
とりあえず今後はデバッガ野郎って呼ぶよw
0874デフォルトの名無しさん2016/03/31(木) 23:15:42.52ID:wytOYZTk
>>871
逆に、理論上出切るとしても>>832の流れで関数書き換えを自動化するAPIが
無かったらどうすんの?
それでも出来るから出来ると言い張るのか?
0875デフォルトの名無しさん2016/03/31(木) 23:15:55.54ID:Tq9AKUqv
>>869
> ちなみにWriteProcessMemoryは関数が置いてあるコード領域は書き換えられないよ
はあ?
まあお前には無理かもな w
ちゃんとやれば普通に書き換えられる
0876デフォルトの名無しさん2016/03/31(木) 23:17:52.72ID:wytOYZTk
>>875
ちゃんととは?
メモリの属性を書き換えるんだろ?そのAPIをちょろっと教えてよ
0877デフォルトの名無しさん2016/03/31(木) 23:19:18.82ID:wytOYZTk
>>875
で、>>832の
> ブレークしたら malloc エミュレートするなりなんでもできるだろ
これに関する話題が無いけど、こっちも早く返答しろ
0878デフォルトの名無しさん2016/03/31(木) 23:19:26.94ID:Tq9AKUqv
>>874
理論も何もデバッガが普通にやってることだぞ
デバッグ中にソースコード変更してデバッグ継続とかすらできる時代に何を言ってるんだよ...
デバッガが魔法のソフトだとでも思ってるのかよ w
0879デフォルトの名無しさん2016/03/31(木) 23:21:31.31ID:wytOYZTk
>>875
ID変わる前に
> ブレークしたら malloc エミュレートするなりなんでもできるだろ
が出来る事をコードを書くなりリンクを貼るなり早くしてくれ
0880デフォルトの名無しさん2016/03/31(木) 23:23:25.43ID:wytOYZTk
>>878
だから>>832に自動化する方法をサクッと付け加えてくれればいいよ
0881デフォルトの名無しさん2016/03/31(木) 23:24:15.22ID:wytOYZTk
>>878
さっきからコードを書いたりリンク貼ることを一生懸命回避してるなw超ウケルよww
0882デフォルトの名無しさん2016/03/31(木) 23:27:45.26ID:Tq9AKUqv
>>876
属性?
知ってる知識総動員かよ、しかも的はずれとか w
とりあえずお前はここ読んどけ
やってる内容はちょっとアレだけどコードにパッチ当てるコードが載ってる
http://peryaudo.hatenablog.com/entry/20100516/1273998518
0883デフォルトの名無しさん2016/03/31(木) 23:32:31.59ID:wytOYZTk
>>882
お!やっと来たか!
確かにこれでパッチは可能だな。これは参考になる
ただコンパイルしたコードはアドレスとか解決しないといけない
それが足りないから、はい次待ってるよ
0884デフォルトの名無しさん2016/03/31(木) 23:34:02.76ID:wytOYZTk
>>882
デバッガを作るだけじゃ飽き足らずこんどはローダーを作らないといけないな
で、完成したものはDLL Injectionのコードと同じになるというwww
0885デフォルトの名無しさん2016/03/31(木) 23:35:37.45ID:wytOYZTk
>>882
とりあえずMy DLL Injectorに半分近づいたよwww
残りを楽しみに待ってるよ
0886デフォルトの名無しさん2016/03/31(木) 23:48:41.29ID:wytOYZTk
>>882
もしかしてコンパイルしたコードをそのまま貼り付けられると思ったか?
ちょっと考えただけでもとんでもなく手間の掛かることだがな

グローバル変数の「実」アドレスとか*.oには含まれてないから全部解決しないといけない
当然別の関数のアドレスとかもね
コンパイルする時に実アドレスを想定して*.oを吐き出せるはずだが…現実的じゃないね

LoadLibraryとか使えば?DLL Injectionのコードと同じになっちゃうけどww
0887デフォルトの名無しさん2016/03/31(木) 23:50:35.80ID:Tq9AKUqv
ローダー?
実行中のプロセスにアタッチする
って言ってるのに底抜けのアホだな w
あとアドレス情報はデバッグ情報から取得すればいいだけ
アホはデバッグ情報ない場合はどうするんだ?
とか言うだろうけどそんなケースは DLL Injection でも無理だから
0888デフォルトの名無しさん2016/03/31(木) 23:55:43.08ID:lrEHU6MC
>>887
アタッチってローダーをコールする+αのことやで
0889デフォルトの名無しさん2016/03/31(木) 23:56:40.39ID:wytOYZTk
>>887
めんどくさい奴だな…
> ローダー?
> 実行中のプロセスにアタッチする
ちがうよ、書き換える元だよ
my_malloc()をコンパイルするとmy_malloc_lib.oが出来る
はいそっからどうすんの?
俺の使ってるデバッガは*.oを実行時にリンクできるよ

> とか言うだろうけどそんなケースは DLL Injection でも無理だから
はいダウトwww
DLL Injectionは単に外部シンボルを使うからロードできる
つうかDLLのローダにデバッグ情報とか関係無いぞ
0890デフォルトの名無しさん2016/03/31(木) 23:58:52.43ID:wytOYZTk
>>887
あと
> あとアドレス情報はデバッグ情報から取得すればいいだけ
もダウト
「実」アドレス情報がデバッグ情報にあるわけないwww
相対アドレス情報が外部シンボルに関連付けられてるだけだ

どうした?もう眠いか?
0891デフォルトの名無しさん2016/04/01(金) 00:11:47.22ID:ebD6jQFi
>>882
> 属性?
OpenProcess(PROCESS_ALL_ACCESS
でメモリの属性を変更してるじゃん
https://msdn.microsoft.com/ja-jp/library/cc429278.aspx
によるとPROCESS_ALL_ACCESSは
PROCESS_VM_WRITE このプロセスの仮想メモリへの書き込みを行うために、 関数がこのプロセスのハンドルを使うことを認めます。
を含んでるからこれでメモリの属性変更してる
これしないでメモリ書き換えようとすると例外が発生するはず
0892デフォルトの名無しさん2016/04/01(金) 00:17:08.75ID:ebD6jQFi
>>887
とりあえずもう日付変わったがまだまだ続けるよ
0893デフォルトの名無しさん2016/04/01(金) 00:21:12.92ID:QUj0XugJ
もうやめてやれ
postMessageさんは、実際のコードも出してこないし多分細かいことはあんまりよくわかってない
大きい企業で、俺はコードもかけますよ風のマネージャーかなんかやってんじゃないかな
0894デフォルトの名無しさん2016/04/01(金) 00:22:50.92ID:ebD6jQFi
>>893
俺は
ID:wytOYZTk
ID:ebD6jQFi
だがそれは俺に言ってんの?
0895デフォルトの名無しさん2016/04/01(金) 00:34:13.94ID:vf5GPZ8M
>>888
お前のローダーの定義って面白いな
アタッチで何を「ロード」するんだよ w

>>889
> DLL Injectionは単に外部シンボルを使うからロードできる
シンボルあるならそれ使えばいいだけ
何度も書くがスタティックライブラリだと手も足も出ないだろ?

>>891
> PROCESS_VM_WRITE
これはあくまでも権限設定
まあ、100歩譲って API 中で操作してるメモリープロテクション関連の設定を属性って言ってるって思ってやるよ

> これしないでメモリ書き換えようとすると例外が発生するはず
権限のチェックが入ってるから API が失敗するだけ
0896デフォルトの名無しさん2016/04/01(金) 00:44:59.58ID:ebD6jQFi
>>895
> アタッチで何を「ロード」するんだよ w
アタッチするのは書き換え先のプロセス
ロードするのは書き換えもとのオブジェクトファイル
なんでスッと理解できないのか…

> シンボルあるならそれ使えばいいだけ
wwwwDLLにはシンボル情報は「常に」あるよ

> 何度も書くがスタティックライブラリだと手も足も出ないだろ?
そりゃDLL Injectionだからな。ただ、スタティックリンクされた関数をDLLで上書きできる
それと手も足も出てないのはお前も一緒だろwww
まだ*.oを実行時にリンクするコードを示せてないからなw

> まあ、100歩譲って API 中で操作してるメモリープロテクション関連の設定を属性って言ってるって思ってやるよ
スゲー負け惜しみwww最高ww

> 権限のチェックが入ってるから API が失敗するだけ
そりゃそうか。逆にAPIを使わずに直接メモリを書き換えたら権限の有無でどうなるんだ?
0897デフォルトの名無しさん2016/04/01(金) 00:48:14.33ID:TWdLoFti
PostMessageくんって、視野が狭い上に思い込みが常人の1000倍あって、
極めてエンジニアには向かない性格だな
欠格事由と言っても良いくらい
0898デフォルトの名無しさん2016/04/01(金) 00:49:04.42ID:ebD6jQFi
>>895
とりあえず揚げ足取り合戦はこれぐらいにして、ローダーも理解せずに
どうやって*.oをロードするんだ?

リンクで教えてもらったのは単にメモリを書き換える方法だけだぞ

結局それらをまとめた処理をDLL Injectionって言うんだけど
理解してもらえるまで(またはお前がMy DLL Injectorを作るまで)付き合うよ
0899デフォルトの名無しさん2016/04/01(金) 00:50:13.04ID:ebD6jQFi
>>897
さっきから誰宛だ?
0900デフォルトの名無しさん2016/04/01(金) 00:53:18.83ID:6Qn82sqQ
>>899
あんま読んでねーけど、お前がpostMessageならお前宛なんじゃね?
そうじゃないなら違うだろ
0901デフォルトの名無しさん2016/04/01(金) 00:54:39.03ID:TWdLoFti
PostMessageくん以外宛てだよ
0902デフォルトの名無しさん2016/04/01(金) 00:58:25.84ID:TWdLoFti
PostMessageくん ≡ ID:yO7JBNvw
0903デフォルトの名無しさん2016/04/01(金) 01:00:10.90ID:ebD6jQFi
>>900
俺は
ID:yO7JBNvw
ID:wytOYZTk
ID:ebD6jQFi
だが、postMessageなんて一度も書き込んでないけどどういうことだ?
0904デフォルトの名無しさん2016/04/01(金) 01:03:36.92ID:6Qn82sqQ
>>902
PostMessageくん ≡ ID:yO7JBNvw
=ID:Sejgg9vl
まで読んだ
0905デフォルトの名無しさん2016/04/01(金) 01:03:55.13ID:17sn2y0Z
愛称つけられるくらい偉大な先輩に似てるって誉められてるんだよ
0906デフォルトの名無しさん2016/04/01(金) 01:06:20.68ID:ebD6jQFi
>>895
とりあえずWindowsでDLL Injectionのやり方
http://inaz2.hatenablog.com/entry/2015/08/08/223643
で、ここの最後の行で

> DLLを使わないコードインジェクション
> ここではRemoteCreateThread関数でLoadLibrary関数を呼び出したが、
> WriteProcessMemory関数で実行可能メモリを確保し、
> そこにコードをコピーして直接実行させることも可能である。
> この場合DLLが不要となる一方、利用するAPI関数一式のアドレスを事前に取得し、
> 構造体などの形でコピーしたコードに渡す必要があるため、
> 複雑なコードの実行には適さない。

ちょっとググるだけでこんなん出てきたよ
さあどうする?
0907デフォルトの名無しさん2016/04/01(金) 01:08:37.84ID:ebD6jQFi
>>904
PostMessageは上のほうでなんかやり合ってた話題か
とりあえず俺はDLL Injection君でいいよw
0908デフォルトの名無しさん2016/04/01(金) 01:08:39.14ID:vf5GPZ8M
>>890 を抜かしてたな
デバッグ情報だけって思っちゃったか w
何度も書くけどデバッガにできることができないと思う精神構造がよくわからん

>>896
> アタッチするのは書き換え先のプロセス
これはいいけど

> ロードするのは書き換えもとのオブジェクトファイル
意味わからん
書き換え元のオブジェクトファイルも意味わからんし、アタッチにどう関係するのかもさっぱりわからん
しかもローダーを作るとか
なんか壮大に勘違いしてるとしか思えん

> wwwwDLLにはシンボル情報は「常に」あるよ
うんそれは知ってる
でスタティックライブラリは?
上書きするとか言ってるけどアドレスどうやって取得するつもりなんだ?

> まだ*.oを実行時にリンクするコードを示せてないからなw
なんでそんなもんが必要なのかよくわからん
そんなもんリンクしなくてもスレッド停めて自前でエミュレートすればいいだけだし

> そりゃそうか。逆にAPIを使わずに直接メモリを書き換えたら権限の有無でどうなるんだ?
他のプロセスのメモリーをどうやって直接書き換えるつもりなんだよ...
メモリー空間すら理解してないのかよ w
0909デフォルトの名無しさん2016/04/01(金) 01:11:14.61ID:ebD6jQFi
>>908
とりあえず>>906でFA
適さないとかいてあるけど、ほとんど不可能といえる
はい終了
とりあえずお前が文系だってのは分かったよ
プログラムなんて手出して大変だったなww
0910デフォルトの名無しさん2016/04/01(金) 01:13:30.26ID:vf5GPZ8M
>>906
別にどうもする必要ないだろ
>>882 のリンク先がやってることだし
何を今更って感想しかないわ w
0911デフォルトの名無しさん2016/04/01(金) 01:16:20.40ID:vf5GPZ8M
>>909
いや >>832 はそのやり方と違ってエミュレートはターゲットではやらないから
0912デフォルトの名無しさん2016/04/01(金) 01:16:53.18ID:ebD6jQFi
>>910
お前は馬鹿か
> この場合DLLが不要となる一方、利用するAPI関数一式のアドレスを事前に取得し、
> 構造体などの形でコピーしたコードに渡す必要があるため、
> 複雑なコードの実行には適さない。
現実的に出来ないんだよ

出来ないの!

それでまだドヤ顔か?
>>882でやってるのはメモリを単に書き換える「だけ」
*.oをロードするのはとてつもなく大変なんだ?それをお前が理解できてないだけ

で、LoadLibraryを使えば簡単に出来るがそれは>>906でやってるDLL Injection
0913デフォルトの名無しさん2016/04/01(金) 01:20:38.06ID:ebD6jQFi
>>911
Windows では (プログラムから呼ぶ)ローダー = LoadLibrary だがなんでスッと出なかった?
超超基本的なAPIだけど?
0914デフォルトの名無しさん2016/04/01(金) 01:22:32.34ID:vf5GPZ8M
>>912
必死にググってるところ申し訳ないけど
そこら辺の話はすでに知ってる
だからターゲットで実行する話にはしてない
残念だったね w
0915デフォルトの名無しさん2016/04/01(金) 01:24:05.27ID:ebD6jQFi
>>914
つうかターゲットって何だ?
まずは厳密に定義しろ
0916デフォルトの名無しさん2016/04/01(金) 01:27:08.93ID:vf5GPZ8M
>>913
どこにアンカーしてるんだよ...
もう無茶苦茶だな w

で、ローダーを作る(>>884)ってどう言うことよ
0917デフォルトの名無しさん2016/04/01(金) 01:27:51.39ID:ebD6jQFi
>>911のエミュレートってなんだ?
やべーこえーwww
何言ってんだこいつww
0918デフォルトの名無しさん2016/04/01(金) 01:28:58.51ID:ebD6jQFi
>>916
LoadLibraryと同等の処理を>>832に実装する事だろ
0919デフォルトの名無しさん2016/04/01(金) 01:29:11.93ID:vf5GPZ8M
>>915
>>700 が言ってるリークをしてるかを確認したいプログラムのこと
0920デフォルトの名無しさん2016/04/01(金) 01:30:09.70ID:ebD6jQFi
>>916
そうすれば>>832はお前の望みのものが出来上がる
ただし、出来ない場合は不可能という事になる
そんな事をお前はデバッガが出来るからという曖昧な理由だけで勧めてた事になる
0921デフォルトの名無しさん2016/04/01(金) 01:32:53.41ID:ebD6jQFi
>>919
わかったよ
じゃあエミュレートって何だ?
例えばmallocと同等のコードを実装する事か?

でそれをする話ではないという事か?
0922デフォルトの名無しさん2016/04/01(金) 01:34:36.62ID:vf5GPZ8M
>>917-918
ホントに理解してないんだな
デバッガで malloc にブレークかけて引数を取得して
malloc と同じ動作(エミュレート)+ リークを検出するための情報取得 ← これはデバッガ側で行う
で呼び出し元に戻すだけ
もちろん手動じゃなくて、プログラムでな
0923デフォルトの名無しさん2016/04/01(金) 01:36:28.47ID:ebD6jQFi
>>922
だから分かったって
それを具体的にやるコードの提示がないだろ

で、LoadLibraryと同等の処理を実装しないと駄目だからほとんど不可能と言ってる
同じ事何回書かせんだよ
0924デフォルトの名無しさん2016/04/01(金) 01:37:06.93ID:vf5GPZ8M
>>918
だからそんなもんは必要ない
必要なものは >>832 の開始時点ですでにすべてメモリ上にある
もちろん標準のローダーを使ってな
0925デフォルトの名無しさん2016/04/01(金) 01:38:15.42ID:vf5GPZ8M
>>923
> 同じ事何回書かせんだよ
俺の台詞だろ w
0926デフォルトの名無しさん2016/04/01(金) 01:39:17.16ID:ebD6jQFi
>>924
ねーよwww

int counter = 0;
void* my_malloc(void *mem) {
++counter;
return 元のmalloc(mem);
}

これを動かすためにはまずコンパイルしないといけないよな?ここまではいいか?
0927デフォルトの名無しさん2016/04/01(金) 01:40:26.81ID:ebD6jQFi
>>924
で、my_malloc_lib.o が出来るだろ?

それをどうやって>>832の方法でメモリに書き込むんだ?
それをもう少し具体的に言ってみ?
そうすればお前もそのうち気付くよ
0928デフォルトの名無しさん2016/04/01(金) 01:42:17.73ID:ebD6jQFi
>>926
はmallocとfreeが混ざって変になった…

int counter = 0;
void* my_malloc(size_t len) {
++counter;
return 元のmalloc(len);
}
0929デフォルトの名無しさん2016/04/01(金) 01:43:37.56ID:vf5GPZ8M
>>927
>>832 を実行するルーチンにリンクしときゃいいだけ
メモリに書き込むとかアホなこと考えなくても、標準のローダーがロードしてくれるよ w
0930デフォルトの名無しさん2016/04/01(金) 01:45:45.29ID:ebD6jQFi
>>929
わかった
my_malloc_lib.oをリンクして起動したよ
で?
厳密に行こうぜ
0931デフォルトの名無しさん2016/04/01(金) 01:57:14.88ID:05qiQTu7
なんでこんな糞どうでも良いことに盛り上がってんだ?
0932デフォルトの名無しさん2016/04/01(金) 01:57:36.04ID:vf5GPZ8M
>>930
で?
>>832 の何がわからんと言うんだ?
本気で知りたいなら適当なデバッガでブレークかけたりして色々試せ
0933デフォルトの名無しさん2016/04/01(金) 01:59:15.25ID:ebD6jQFi
>>932
誤魔化すなよ、おい
APIの話してんだろ
0934デフォルトの名無しさん2016/04/01(金) 02:01:25.41ID:05qiQTu7
>>932
>>933
おまえら二人以外全く興味ないから別の所で1対1でチャットしてろよ
0935デフォルトの名無しさん2016/04/01(金) 02:03:51.35ID:ebD6jQFi
>>932
最後はアセンブラ(機械語)レベルできちんとmy_malloc()をコールするコードを書き込むって言えよ
一度うまく行けばずっと使えるが、お前はどうせ知らないだろ

そんな曖昧な状態でずっとこんな事を勧めてたんだよお前は…

とりあえず最後にちゃんとアセンブラを書けよ
0936デフォルトの名無しさん2016/04/01(金) 02:05:53.07ID:vf5GPZ8M
>>931
DLL Injection しか知らん知ったかが必死にいちゃもんつけてるだけ
残念なことにメモリ空間の知識がないこととか
>>793 のリンク先でも注釈に WriteProcessMemory って書いてあるのにコードは書き換えられないと思ってたとか
ボロがどんどん出てる状態 w
0937デフォルトの名無しさん2016/04/01(金) 02:07:10.25ID:ebD6jQFi
>>932
DLL Injection(WindowsだとLoadLibraryを使った一連の処理で、Linuxはdlopenを使った一連の処理)
アセンブラの知識は必要ないし俺もコードを何度も書いてるし、ググれば簡単に出てくる

お前は最後まで文系だったな
デバッガーで出来るから出来るはずでごまかし続けたな
ググっても実コードは全然出てこないし、本人も全然最後まで分かってないし
0938デフォルトの名無しさん2016/04/01(金) 02:08:07.99ID:ebD6jQFi
>>936
あげ足取りはいいから、ちゃんと動くコードを書くか提示しろよ
0939デフォルトの名無しさん2016/04/01(金) 02:09:03.03ID:vf5GPZ8M
>>935
> 最後はアセンブラ(機械語)レベルできちんとmy_malloc()をコールするコードを書き込むって言えよ
だから書く必要なんてない
my_malloc() はデバッガ側で実行するんだよ
0940デフォルトの名無しさん2016/04/01(金) 02:10:07.79ID:TWdLoFti
ID:ebD6jQFiがPostMessageくんと見間違うくらいアホな事がよくわかった
0941デフォルトの名無しさん2016/04/01(金) 02:10:26.75ID:ebD6jQFi
>>939
> my_malloc() はデバッガ側で実行するんだよ
だからそのコードを書けよ
なんで頑なにコードを書かないんだ?
0942デフォルトの名無しさん2016/04/01(金) 02:10:45.30ID:vf5GPZ8M
>>938
> あげ足取りはいいから
事実だろ
レス番示そうか? w
0943デフォルトの名無しさん2016/04/01(金) 02:13:25.75ID:ebD6jQFi
>>942
お前メモリ書き換えられるだけでドヤ顔はやめろよ
最終的にmy_malloc()を呼び出すコードを書けよ
文系のお前には一行もかけないだろうけど
0944デフォルトの名無しさん2016/04/01(金) 02:14:31.57ID:TWdLoFti
ID:vf5GPZ8Mも負けず劣らずアホだった
0945デフォルトの名無しさん2016/04/01(金) 02:14:59.46ID:ebD6jQFi
>>942
お前だってローダーって何とか言ってるし、デバッグ情報を使ってDLLロードしろとか
言っちゃってるだろwww
0946デフォルトの名無しさん2016/04/01(金) 02:16:52.93ID:vf5GPZ8M
>>944
どこがアホかを指摘してくれ
夜中まで下らん知ったかに構ってるってるところ
って言うなら納得するしかないけど w
0947デフォルトの名無しさん2016/04/01(金) 02:18:37.40ID:ebD6jQFi
>>946
>>943の
> 最終的にmy_malloc()を呼び出すコードを書けよ
を早くしろよ

お前が頑なに拒んでるのが最大の知ったかだろ
0948デフォルトの名無しさん2016/04/01(金) 02:18:39.62ID:vf5GPZ8M
>>945
> お前だってローダーって何とか言ってるし、デバッグ情報を使ってDLLロードしろとか
> 言っちゃってるだろwww
そんなことをいった記憶はないのでレス番よろしく
0949デフォルトの名無しさん2016/04/01(金) 02:20:01.00ID:ebD6jQFi
ID:vf5GPZ8Mはメモリに書き込む方法をググって見つけたってだけで
肝心の別関数を呼び出すコードをここまで書かずに、引っ張り続けてるだけ
0950デフォルトの名無しさん2016/04/01(金) 02:22:39.17ID:ebD6jQFi
>>948
>>887で今後ローダーが必要な事に気付いてない
デバッグ情報がないとDLL Injectionが無理だといっている
0951デフォルトの名無しさん2016/04/01(金) 02:26:29.54ID:vf5GPZ8M
>>950
> >>887で今後ローダーが必要な事に気付いてない
必要なかっただろ w
少なくともローダーを作るとかは

> デバッグ情報がないとDLL Injectionが無理だといっている
まあ、これはちょっと筆が滑ったな
スタティックライブラリが念頭にあったからな
0952デフォルトの名無しさん2016/04/01(金) 02:29:38.59ID:ebD6jQFi
>>951
とりあえず、俺らが有能か無能かはどうでもいい

> 最終的にmy_malloc()を呼び出すコードを書けよ

これを証明してお前の言ってるやり方が実際に出来る事をコードを書くかリンクを貼れ
手動でできそうなことはもうわかってるから (それも曖昧だがな)
0953デフォルトの名無しさん2016/04/01(金) 02:30:12.21ID:TWdLoFti
>>946
>my_malloc() はデバッガ側で実行するんだよ
ここだね。debuggerとdebugeeのアドレス空間は分離されてるので、「元のmalloc(len)」の値はdebugeeでは無効
0954デフォルトの名無しさん2016/04/01(金) 02:35:25.22ID:vf5GPZ8M
>>949
>>922 読んでもわからんなら諦めろ
デバッガ側で実行するから単純な関数コールだよ
ターゲット側の malloc と free を使う(情報はデバッガ側で取得/管理する)なら取得/管理するルーチンを呼ぶだけ
後はそのまま実行を継続すればいい
デバッガ使ったことあれば普通に理解できると思うが
0955デフォルトの名無しさん2016/04/01(金) 02:37:47.60ID:ebD6jQFi
>>954
まだコード書かないよ…
まず、デバッガ側で実行というのはどういう事だ?
普通プログラムをデバッガに読み込ませて実行させる事をいうぞ?

それと思いっきり手動に見えるが…もう手動でないと無理でFAでいいか?
0956デフォルトの名無しさん2016/04/01(金) 02:46:09.49ID:ebD6jQFi
もう遅いんでまとめるが

Windowsにべったりな方法だが…メモリに書き込む方法は具体的に分かった
mallocをmy_mallocに置き換えるのはデバッガを駆使すれば手動では可能(なはず)
ただ自動でやる方法は不明

でいいだろ?
0957デフォルトの名無しさん2016/04/01(金) 02:52:51.26ID:vf5GPZ8M
>>955
> 普通プログラムをデバッガに読み込ませて実行させる事をいうぞ?
デバッガのアタッチとか使ったことないのか?
デバッガが読み込んでるのはシンボル情報とかだよ
実行は当然だけど別プロセス(別メモリー空間)で実行される
ブレーク使って malloc が呼び出されたことと、その時の情報を取得すればいいので malloc 自体はターゲット上で普通に実行すればいい

> それと思いっきり手動に見えるが…もう手動でないと無理でFAでいいか?
Excel の例出しただろ?
手動でできることは全て自動でできるんだよ
そのための API だし
0958デフォルトの名無しさん2016/04/01(金) 02:53:43.21ID:lbbURRqO
そもそもデバッガがそんな複雑なことをしているのか?
単にブレークポイントを任意のアドレスにかますことができるだけなのでは?
0959デフォルトの名無しさん2016/04/01(金) 02:54:17.23ID:vf5GPZ8M
>>956
> mallocをmy_mallocに置き換える
全然理解できとらんやん...
0960デフォルトの名無しさん2016/04/01(金) 02:55:40.13ID:vf5GPZ8M
>>958
メモリー書き換えたり
デバッグ中にコード書き換えたりできるよ
てか、そう言う機能使ったことないの?
0961デフォルトの名無しさん2016/04/01(金) 02:58:48.13ID:ebD6jQFi
>>957
とりあえず、デバッグするんじゃないんだよ
単純にメモリリークをチェックするだけなのになんでデバッガ必須なんだよ
コードが書かれてるリンクを提示したのは何だったんだよ…
そこまではデバッガ要らないだろ…諦めるなよ

> 手動でできることは全て自動でできるんだよ
それは分かったよ…

手動でできる事は全部自動で出来る(ただし具体的な方法は知らない)

が結論でいいよな?
0962デフォルトの名無しさん2016/04/01(金) 03:02:09.19ID:ebD6jQFi
>>959
それでメモリリークのチェックをするって言ってるだろ
理解してないのはお前だろ

それとも、一旦別の場所に飛ばしてカウンターなり増やしてもとの場所に復帰させる
「手動」でって言いたいんだろ?

そして手動で出来る事は全て自動で出来るから具体的な方法は知らなくても
このスレではそういっておけばいいといいことだろ?
0963デフォルトの名無しさん2016/04/01(金) 03:07:48.16ID:ebD6jQFi
>>962の最後の2行は実に文系的な考えだな
素晴らしい推論だよ
推論さえ正しければ最終的にコードなんて書く必要ないよな、絶対出来るはずだもんな

俺も何でも出来そうな気がしてきた
0964デフォルトの名無しさん2016/04/01(金) 03:17:48.51ID:ebD6jQFi
ちなみにデバッガって専用のデバッグレジスタとか使ってブレークしたりしてる
当然「普通」のプログラムがデバッガと全く同じ動作なんて出来ないと思うけどな…
0965デフォルトの名無しさん2016/04/01(金) 03:21:34.83ID:ebD6jQFi
>>964
突っこまれそうなんで捕捉しておくと確かにWindowsのAPIにはデバッガと似たような動作をするAPIはある
それ使えば出来るって言いたいんだろ、俺は詳しくは知らんけど
0966デフォルトの名無しさん2016/04/01(金) 03:28:17.05ID:ebD6jQFi
デバッグレジスタで調べたら
http://d.hatena.ne.jp/Hossy/20071120
WindowsAPIにブレーク張るコードがあったよ
これで特定の場所でブレークさせて別の場所に飛ばして戻すとか出来そうだな
0967デフォルトの名無しさん2016/04/01(金) 06:54:22.55ID:cIUJiKQr
>>966
なかなかいいページじゃん
ごく「普通」のプログラムでいけてるし
これでデバッガが特殊なプログラムだと言う変な思い込みが無くなればいいんだが...
0968デフォルトの名無しさん2016/04/01(金) 07:16:21.80ID:lbdOT+5F
次スレはvvvvv設定で立ててくれ
0969デフォルトの名無しさん2016/04/01(金) 07:21:46.20ID:ebD6jQFi
>>967
そう言うと思って>>965で補足したんだけどなww
0970デフォルトの名無しさん2016/04/01(金) 07:44:47.94ID:mip+hcrZ
俺が必死で納品物作ってる間に何かスレが異常に伸びてると思ったらこれか
年度末だというのにお前ら暇だねえ
0971デフォルトの名無しさん2016/04/01(金) 09:12:42.75ID:TsVr6Gke
>>966
なんか見覚えがある記事だな
初っ端でやるべきファイルクローズがぬけてたような
0972デフォルトの名無しさん2016/04/01(金) 09:43:46.18ID:Ttjvs4g3
c++使いってこういう無駄なプライド高い人が多いよね。
0973デフォルトの名無しさん2016/04/01(金) 09:54:45.01ID:TsVr6Gke
>>971
思い出した
ファイルクローズするためのハンドルが最初のイベントで来るから
それを受け取る変数と処理がぬけてる

クローズ&再オープンが必要になるケースは少ないだろうけど
0974デフォルトの名無しさん2016/04/01(金) 21:54:04.46ID:lTa0iJ4H
ちょWG21でmpz_classが可決しちゃった...どーするこれ?
0975デフォルトの名無しさん2016/04/02(土) 01:15:45.58ID:d6zeFNrQ
規格のクソ仕様や気に入らない仕様に
いちいち目くじら立ててるとハゲるぞ
0976デフォルトの名無しさん2016/04/02(土) 02:17:39.05ID:nww+ZoJw
分数クラスはどうなの?
0977デフォルトの名無しさん2016/04/02(土) 03:16:09.35ID:oec87dyp
>>974
何がダメなん?
0978デフォルトの名無しさん2016/04/02(土) 10:12:42.88ID:w7dPIT5N
生のDirectXを美しくコーディング出来るデザパタってありませんか?
0979デフォルトの名無しさん2016/04/02(土) 12:40:53.53ID:XtnCgjGk
まずどのへんが現状美しくないと思ったのか
0980デフォルトの名無しさん2016/04/02(土) 13:52:31.49ID:EwvTfYNw
そもそもDirectXに最適なデザパタってなんじゃ
0981デフォルトの名無しさん2016/04/02(土) 18:53:52.73ID:nnV+XJIi
初心者が持ち出してきちゃう「美しさ」とやらに反吐が出る
なお、美しさそのもはここでは否定していない
0982デフォルトの名無しさん2016/04/02(土) 18:56:35.51ID:tgAORIfk
美しさも否定できないような初心者が一丁前に反吐だしてんなよw
0983デフォルトの名無しさん2016/04/02(土) 18:57:56.43ID:tizL1M55
>>981の考える美しさがさも普遍的であるかのように語られても
0984デフォルトの名無しさん2016/04/02(土) 23:40:25.58ID:VaLFPnjA
動けばいいだけじゃなくて自分なりの美しさを追究する姿勢は大切。
それが他人から見て稚拙であっても。
だが>>978はスレ違いの糞レスを投下した糞野郎。
0985デフォルトの名無しさん2016/04/02(土) 23:55:51.69ID:3uS6uKWS
>>981
おまえ結局、後輩を頭ごなしにdisってさ
一日の長にすがってるだけだろ
決して後進を育てられないつまらん先輩だが
心配しなさんな、おまえさんについてく後輩なんかいないから
0986デフォルトの名無しさん2016/04/03(日) 00:02:46.65ID:05TA48kb
まあ型安全のためだけに無理矢理 cout 使いたがる馬鹿には
頭ごなしに dis るに限るが。そのコードの内容にあわせろと。
0987デフォルトの名無しさん2016/04/03(日) 00:27:51.51ID:ZT/2NYWz
次スレ

C++相談室 part124
http://echo.2ch.net/test/read.cgi/tech/1459610544/
0988デフォルトの名無しさん2016/04/03(日) 06:35:37.36ID:IYDaitRx
>>986
iostreamの是非はさて置き、
このスレで頭ごなしにdisられるほど低能な発言を繰り返してるお前が言うと馬鹿っぽいぞ
0989デフォルトの名無しさん2016/04/03(日) 10:48:12.94ID:NaCJnRwM
Macで「std::wstring wstr = L
0990デフォルトの名無しさん2016/04/03(日) 10:49:24.28ID:NaCJnRwM
Macで「std::wstring wstr = L"あいう";」として
「wstr.length();」で文字数3が返るんですが、ファイルから
stringで読み込みmbstowcsで変換、又はwstringで読み込みして
length()を使うとバイト数で表示されてしまいます。
色々調べましたが、ファイル読み込みで文字数を返す方法が分かりません。
どのようにしたらよいのでしょうか?
0991デフォルトの名無しさん2016/04/03(日) 11:38:20.75ID:ZT/2NYWz
ワイド文字への変換に失敗してるんだろう
#include<cctype>
int main() {
std::setlocale(LC_CTYPE, "");

}
してもダメ?
0992デフォルトの名無しさん2016/04/03(日) 11:55:32.15ID:IjurGRr1
>学習の最初のフェーズにおいて、私たちが「コーディングスタイル」と呼んでいるものを認識するようになる。
>そうして標準的なインデントの付け方に合ってないところや、変数名の大文字/小文字が変なところに気づくようになる。
>
>この時期に典型的なことは「水ぶくれのフジツボみたいだ。一貫したコーディング規則がなきゃだめだ」みたいなことを言って、
>次の日をチームのためのコーディング規則を書くために使い、そのあと6日間で「唯一正しい括弧付けのスタイル」について議論し、
>そのあとの3週間を古いコードが「唯一正しい括弧付けのスタイル」に合うよう書き直すのに費やすが、
>それに気付いたマネージャから全然お金にならないことに時間を使っていることで怒鳴りつけられ、
>それでソースに手を入れる必要が出た時ついでにフォーマットを直すのでも別に悪くないと思い直し、>
半分だけ「正しい括弧付けスタイル」という状態になってしまうが、そんなことはすぐに忘れ、そしてすぐまた別な何か、
>1つの文字列クラスを別な文字列クラスで置き換えるというような、お金になることとは無関係なことに心を奪われるのだ。
ttp://local.joelonsoftware.com/wiki/間違ったコードは間違って見えるようにする

万古不易ってカンジ?
0993デフォルトの名無しさん2016/04/03(日) 11:57:55.84ID:NaCJnRwM
>>991
コード貼ってなくてすいません。
ダメでした。
ネットで調べた結果は、あとは1バイト目を調べて取得していくしかなさそうと思ってました。
0994デフォルトの名無しさん2016/04/03(日) 14:58:05.44ID:NaCJnRwM
>>991
中途半端に直さず、ゼロベースでコードを書き直して御指摘のコードを追加で上手くいきました。
ありがとうございました。
0995デフォルトの名無しさん2016/04/03(日) 23:58:14.05ID:dph3juVF
うめ
0996デフォルトの名無しさん2016/04/04(月) 00:08:15.79ID:hMDKrGrS
竹
0997デフォルトの名無しさん2016/04/04(月) 03:23:44.21ID:PzbFPT0/
まつ
0998デフォルトの名無しさん2016/04/04(月) 08:47:18.20ID:OJQ3obmT
さくら
0999デフォルトの名無しさん2016/04/04(月) 08:55:48.60ID:M3vqhMBk
↓どうぞ
1000デフォルトの名無しさん2016/04/04(月) 09:17:08.06ID:z/Tw9PUp
1000なら今日は一日postMessage監視作業
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 42日 16時間 40分 41秒
10021002Over 1000Thread
2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
http://premium.2ch.net/
http://pink-chan-store.myshopify.com/
レス数が1000を超えています。これ以上書き込みはできません。