次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part130
http://mevius.2ch.net/test/read.cgi/tech/1490917669/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.100【環境依存OK】
http://echo.2ch.net/test/read.cgi/tech/1478440682/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
-
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
C++相談室 part131 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 3b96-ov1m)
2017/07/29(土) 11:28:28.97ID:o30VDF4g051デフォルトの名無しさん (ワッチョイ 03aa-dE0h)
2017/08/06(日) 19:31:25.78ID:7dbJmn2Z0 違うだろ
それにネタ元はここじゃないし
それにネタ元はここじゃないし
52デフォルトの名無しさん (ワッチョイ 49ad-mf2b)
2017/08/06(日) 20:55:29.92ID:BHhmDaJC0 >>50
privateをpublicでdefineするやつじゃ?
privateをpublicでdefineするやつじゃ?
53デフォルトの名無しさん (オッペケ Sr93-6sbn)
2017/08/06(日) 21:20:19.11ID:/2i5R4CKr54デフォルトの名無しさん (ワッチョイ 7b6d-H6ZD)
2017/08/07(月) 16:40:58.08ID:Y4YBisBB055デフォルトの名無しさん (オッペケ Sr35-6sbn)
2017/08/07(月) 22:34:19.58ID:MakITfYKr privateをpublicでdefineするのは潔くてカッコいいが
>>54は全てが糞すぎる
>>54は全てが糞すぎる
56デフォルトの名無しさん (ワッチョイ 85e3-XDod)
2017/08/07(月) 22:43:25.92ID:qpBf+1aM0 しかも既存のクラスに普通に手入れてるしね
57デフォルトの名無しさん (ワッチョイ 7b6d-hNCA)
2017/08/08(火) 07:52:39.36ID:CWtfXRt70 >>55
具体的に
具体的に
58デフォルトの名無しさん (オッペケ Sr35-6sbn)
2017/08/08(火) 08:21:06.59ID:RV4q7wpsr59デフォルトの名無しさん (ワッチョイ 7b6d-H6ZD)
2017/08/09(水) 18:36:43.63ID:UcwPIhci060デフォルトの名無しさん (オッペケ Srd9-6sbn)
2017/08/09(水) 18:40:37.13ID:hewgQardr いやそこは無視するだろ普通
>hoge.get()->*(hoge->g2()) = 54321;
もう何が何だか…
>hoge.get()->*(hoge->g2()) = 54321;
もう何が何だか…
61C言語ますたー《ますたー軍団(常時募集)の長》 ◆oa6k//3vOQ (ラクッペ MMaf-bbbG)
2017/08/09(水) 18:43:38.11ID:s1XZJ5NhM 読んでないけどg()は関数ポインタを返す関数?
設計からしてダメだろ
設計からしてダメだろ
62デフォルトの名無しさん (ワッチョイ 0d09-zlP1)
2017/08/09(水) 18:53:35.78ID:VsUePcYe0 既存のクラスに手を入れてる時点でキモイ。
それならもっとやりようあるでしょ。
それならもっとやりようあるでしょ。
63デフォルトの名無しさん (ワッチョイ 7b6d-H6ZD)
2017/08/09(水) 19:13:08.58ID:UcwPIhci064デフォルトの名無しさん (オッペケ Srbb-iw66)
2017/08/10(木) 10:59:10.70ID:vqPWBCRZr65はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5a15-aEKd)
2017/08/10(木) 11:21:25.23ID:eseR3mB40 >>63
オフセットして実装するのが普通だと思うけど、メンバ変数へのポインタがオフセットで実装されるとは決まってないんじゃないの?
オフセットして実装するのが普通だと思うけど、メンバ変数へのポインタがオフセットで実装されるとは決まってないんじゃないの?
66デフォルトの名無しさん (ワッチョイ 9ac5-OW3C)
2017/08/11(金) 13:08:18.43ID:rA3728Ge0 C++の場合クラス(およびその基底クラス)内のメンバは全部ヘッダファイルを辿っていけばワカルのだから
まず全く同じ内容のヘッダファイルのコピーを作り、
ファイル名を適当に変えて、多重インクルード箇所もコピーしたもので閉じるように変更して、
privateやprotectedを全部publicにして、
クラスの名前をFoo→Foo2とか改変して、
仮想関数は適当に空の定義でもつけて、
((Foo2*)p)->(Fooのデータメンバ)
式にキャストしてアクセスすればデータメンバと仮想関数については問題なくアクセスできる
(ODR違反は都市伝説なので事実上これで動く
だいたいprivate破りを意図している時点で実コードレベルで影響しない規約とか気にしても仕方が無い
まず全く同じ内容のヘッダファイルのコピーを作り、
ファイル名を適当に変えて、多重インクルード箇所もコピーしたもので閉じるように変更して、
privateやprotectedを全部publicにして、
クラスの名前をFoo→Foo2とか改変して、
仮想関数は適当に空の定義でもつけて、
((Foo2*)p)->(Fooのデータメンバ)
式にキャストしてアクセスすればデータメンバと仮想関数については問題なくアクセスできる
(ODR違反は都市伝説なので事実上これで動く
だいたいprivate破りを意図している時点で実コードレベルで影響しない規約とか気にしても仕方が無い
67デフォルトの名無しさん (ワッチョイ 9ac5-OW3C)
2017/08/11(金) 13:10:51.21ID:rA3728Ge0 Foo2の仮想関数が空ではないか、というのは動作上問題にならない
vtableのしくみがわかっているならワカル以下略
一方非仮想関数の方はちょっとうまい方法が思いつかない…
private属性のメンバ関数のアドレスがとれれば勝つるのだが
vtableのしくみがわかっているならワカル以下略
一方非仮想関数の方はちょっとうまい方法が思いつかない…
private属性のメンバ関数のアドレスがとれれば勝つるのだが
68デフォルトの名無しさん (ワッチョイ 5b2b-7NHe)
2017/08/11(金) 15:28:00.96ID:CTzRRQx/0 class Base {
public:
Base() {};
virtual void func() {};
};
class Sub: public Base {
public:
Sub() {};
virtual void func() {};
};
Sub a();
std::vector<Base> b;
b.push_back(a);
b[0].func();
これだと継承前のBaseのfuncが実行されてSubのfuncが実行されないんですが
Subのfuncを実行するにはどうしたらいいですか
public:
Base() {};
virtual void func() {};
};
class Sub: public Base {
public:
Sub() {};
virtual void func() {};
};
Sub a();
std::vector<Base> b;
b.push_back(a);
b[0].func();
これだと継承前のBaseのfuncが実行されてSubのfuncが実行されないんですが
Subのfuncを実行するにはどうしたらいいですか
69デフォルトの名無しさん (ワッチョイ 9a9f-I8p5)
2017/08/11(金) 15:45:01.75ID:GPxw37uF0 そりゃpushするときにBaseへの暗黙の型変換かかるからダメっしょ
ポインタつかえよBaseの
ポインタつかえよBaseの
70デフォルトの名無しさん (ワッチョイ 1a49-d9WE)
2017/08/11(金) 15:47:46.79ID:L0uHlCp2071デフォルトの名無しさん (ワッチョイ 9a9f-I8p5)
2017/08/11(金) 15:57:28.65ID:GPxw37uF0 おかしいな、確かに
コピーコンストラクタもないのにコンパイラ通るのかコレ
コピーコンストラクタもないのにコンパイラ通るのかコレ
72デフォルトの名無しさん (ワッチョイ 1a49-d9WE)
2017/08/11(金) 16:00:31.30ID:L0uHlCp20 コピコンは省略可能だよー。
73デフォルトの名無しさん (ワッチョイ 5b2b-7NHe)
2017/08/11(金) 16:11:31.54ID:CTzRRQx/074デフォルトの名無しさん (オッペケ Srbb-iw66)
2017/08/11(金) 16:51:11.96ID:+GdUPlS/r 「本当に動く? (中略) そのまま追試出来るコードじゃないと…」
↓
「もしかしたら動かないかもしれない」
これがアスペというやつだな
↓
「もしかしたら動かないかもしれない」
これがアスペというやつだな
75デフォルトの名無しさん (ワッチョイ 9aaa-W16a)
2017/08/11(金) 16:54:58.31ID:mfxycmdp0 会話としては成り立ってる
76デフォルトの名無しさん (ワッチョイ 9a23-KsLg)
2017/08/11(金) 17:09:12.83ID:MFH9oRFs0 この言語はどこの業務で使われてるの?
組み込み・制御はC++使ってますとか言いながら大体これCじゃん!だから論外として
組み込み・制御はC++使ってますとか言いながら大体これCじゃん!だから論外として
77デフォルトの名無しさん (ワッチョイ 336d-dvNI)
2017/08/11(金) 17:11:30.49ID:Ca8C76qb0 gcc が c++ で書き直された、という話はあったな
78デフォルトの名無しさん (ワッチョイ 97e4-TVDH)
2017/08/11(金) 17:29:47.32ID:fw1fdXf30 >>76
https://github.com/search?utf8=%E2%9C%93&q=language%3AC%2B%2B+stars%3A%3E%3D1000&type=Repositories
https://github.com/search?utf8=%E2%9C%93&q=language%3AC%2B%2B+stars%3A%3E%3D1000&type=Repositories
79デフォルトの名無しさん (ワッチョイ 1ae7-b0wc)
2017/08/11(金) 18:02:24.77ID:bpB/tg4h0 Webブラウザとかゲームとか
80はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5a15-aEKd)
2017/08/11(金) 18:34:36.55ID:eZ0/1svY0 >>76
Better C として使ってもええんやで
Better C として使ってもええんやで
81デフォルトの名無しさん (ワッチョイ 9ac5-OW3C)
2017/08/11(金) 19:29:34.92ID:rA3728Ge0 >>76
Simulaの置き換え
Simulaの置き換え
82デフォルトの名無しさん (ワッチョイ 8b11-9Y42)
2017/08/11(金) 20:50:37.74ID:W25jNYVm0 C言語としてg++使ってる
83デフォルトの名無しさん (ワッチョイ dbea-fQPG)
2017/08/11(金) 21:45:37.12ID:U5fbDsCj0 ウチじゃモータ制御に使ってるな
84デフォルトの名無しさん (ワッチョイ 7665-KsLg)
2017/08/12(土) 16:56:14.99ID:srjAo6Ap0 質問です。
宣言は、全ての要素に対して必要なのですか?
n = a+b:
という行があるとすると、
#include <n>
#include <a>
#include <b>
が必要なのですか?
とても初心者なので、なにとぞ教えてください。
お願いします。
宣言は、全ての要素に対して必要なのですか?
n = a+b:
という行があるとすると、
#include <n>
#include <a>
#include <b>
が必要なのですか?
とても初心者なので、なにとぞ教えてください。
お願いします。
85デフォルトの名無しさん (ワッチョイ 9aaa-W16a)
2017/08/12(土) 17:13:58.34ID:AoA5DjYT0 意図がわかりにくいがその場合だったら#include <n> だけあればいいんじゃないの?
そうでないとしたらinclude順は#include <a>と#include <b>を先に書くべき。
そうでないとしたらinclude順は#include <a>と#include <b>を先に書くべき。
87デフォルトの名無しさん (ワッチョイ 9ab1-KsLg)
2017/08/12(土) 17:21:05.88ID:Yn7dYYpz0 >84
#include
というのは、外部にあるファイルを読み込め
という命令なので、変数の宣言ではありません。
#include <a>
というのは、aというファイルを読み込めという
命令です。
n=a+b
という場合には、この式の前に、n, a, bという
変数の型を宣言する必要があります。
全てが整数ならば、
int a, b, n;
単精度実数ならば
float a, b, n;
と、倍精度実数ならば、
double a, b, n;
と書きます。
と変数の型を宣言します。
このことは、基本の基本なので、解説書の最初に書いてあるはずです。
解説書をよく読んで、その上で分からないことを
質問しましょう
#include
というのは、外部にあるファイルを読み込め
という命令なので、変数の宣言ではありません。
#include <a>
というのは、aというファイルを読み込めという
命令です。
n=a+b
という場合には、この式の前に、n, a, bという
変数の型を宣言する必要があります。
全てが整数ならば、
int a, b, n;
単精度実数ならば
float a, b, n;
と、倍精度実数ならば、
double a, b, n;
と書きます。
と変数の型を宣言します。
このことは、基本の基本なので、解説書の最初に書いてあるはずです。
解説書をよく読んで、その上で分からないことを
質問しましょう
8884 (ワッチョイ 7665-KsLg)
2017/08/12(土) 17:27:53.44ID:srjAo6Ap089デフォルトの名無しさん (ワッチョイ 9aaa-W16a)
2017/08/12(土) 17:28:31.16ID:AoA5DjYT0 文字通りの意味だったのかよ
90デフォルトの名無しさん (オッペケ Srbb-iw66)
2017/08/12(土) 18:07:41.60ID:B05a5g6/r >#include <a>
>というのは、aというファイルを読み込めという命令です。
んなこたーない
>というのは、aというファイルを読み込めという命令です。
んなこたーない
91デフォルトの名無しさん (オッペケ Srbb-iw66)
2017/08/12(土) 18:16:01.28ID:B05a5g6/r92デフォルトの名無しさん (ワッチョイ 5b2b-7NHe)
2017/08/12(土) 19:18:12.75ID:qkSSCQjy0 DEFINEもincludeも本質的にやってることは同じだしファイルを読み込めは間違ってるな
93デフォルトの名無しさん (ワッチョイ a309-lt+t)
2017/08/12(土) 19:23:05.89ID:6XNTCj+p0 includeがファイルをその位置に展開しろっていうのはあってると思うけど、何が不満なんだ?
defineはただの文字列置換。
defineはただの文字列置換。
94デフォルトの名無しさん (オッペケ Srbb-iw66)
2017/08/12(土) 21:29:22.94ID:B05a5g6/r × #include <a>というのは、aというファイルを読み込めという命令
○ #include <a>というのは、aというヘッダーを読み込めという命令
○ #include <a>というのは、#include <a>をaというヘッダーの内容で置き換えろという命令
○ #include <a>というのは、aというヘッダーを読み込めという命令
○ #include <a>というのは、#include <a>をaというヘッダーの内容で置き換えろという命令
95デフォルトの名無しさん (ワッチョイ 9aaa-W16a)
2017/08/12(土) 22:23:06.24ID:AoA5DjYT0 またヘッダー警察が来るぞ
96デフォルトの名無しさん (アウアウカー Sac3-MZKP)
2017/08/12(土) 23:15:33.63ID:wV3c1N0ta97デフォルトの名無しさん (ワッチョイ 1a1b-8zUn)
2017/08/12(土) 23:26:56.30ID:IKUtZym1098デフォルトの名無しさん (ワッチョイ a30d-wsxY)
2017/08/13(日) 06:37:43.35ID:/9jKf3580 「C++の#includeがファイルを読み込むとは限らない」
という説明を何かで読んだ記憶がある。
例えばソースに #include <hoge.h> と書いてあっても
hoge.h というファイルの実体は存在しなくて、
コンパイラが内部的なスイッチとして使っても構わない、みたいな話。
実際にそういう動作をするコンパイラは知らんけど。
という説明を何かで読んだ記憶がある。
例えばソースに #include <hoge.h> と書いてあっても
hoge.h というファイルの実体は存在しなくて、
コンパイラが内部的なスイッチとして使っても構わない、みたいな話。
実際にそういう動作をするコンパイラは知らんけど。
99デフォルトの名無しさん (オッペケ Srbb-iw66)
2017/08/13(日) 07:15:34.96ID:CgemGkhrr100デフォルトの名無しさん (ワッチョイ 8b11-9Y42)
2017/08/13(日) 11:33:24.03ID:P6N6OiXF0 CSVファイルを読み込むときに#include使うことある
101デフォルトの名無しさん (オイコラミネオ MM06-syG+)
2017/08/13(日) 20:57:49.74ID:R0DVX6mKM てか、学ぶなら1冊くらい本買えよ
Googleで独学とか効率悪すぎる
Googleで独学とか効率悪すぎる
102はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5a15-aEKd)
2017/08/14(月) 00:14:24.38ID:N3oVMbyu0 軸がわからないと自分が何をわかってないかすらわからないからクソみてぇな思い込みで検索して見当違いの方向に突っ込んでしまうから、
そうなってから質問しても質問が見当違いすぎて回答しようがないことはよくある。
そうなってから質問しても質問が見当違いすぎて回答しようがないことはよくある。
103デフォルトの名無しさん (ワッチョイ 336d-gaVt)
2017/08/15(火) 18:55:44.72ID:Q70B1fQS0 >>102
いっちょコンパイラを書いてやろうと思っているんだが何をやっていいかわからない…
手元の教科書は必死に正規表現やらチューリングマシンやらを追求している…
これってコンパイラ本だと思って買ったのだが、どうも本を間違えてしまったらしい
軸がわからないと悲惨ですね
いっちょコンパイラを書いてやろうと思っているんだが何をやっていいかわからない…
手元の教科書は必死に正規表現やらチューリングマシンやらを追求している…
これってコンパイラ本だと思って買ったのだが、どうも本を間違えてしまったらしい
軸がわからないと悲惨ですね
104デフォルトの名無しさん (ワッチョイ 9a11-GpN3)
2017/08/15(火) 19:28:20.65ID:GzAS59pw0105デフォルトの名無しさん (ワッチョイ a309-lt+t)
2017/08/15(火) 19:38:22.48ID:AjDM7F7/0 http://ideone.com/RcWgQx
これ、C++17でできるようになるんだっけ?どうだっけ?
これ、C++17でできるようになるんだっけ?どうだっけ?
106デフォルトの名無しさん (オッペケ Srbb-iw66)
2017/08/15(火) 19:51:33.69ID:nijih07Br 少なくとも似たケースを支援する機能は追加されるがそのままでは通らない
[*this]
[*this]
107デフォルトの名無しさん (オッペケ Srbb-iw66)
2017/08/15(火) 19:53:35.30ID:nijih07Br と思ってよく読んだら関係無かったしTは生存期間内だった
つまりC++17では無理
つまりC++17では無理
108デフォルトの名無しさん (ワッチョイ a309-lt+t)
2017/08/15(火) 19:56:48.90ID:AjDM7F7/0 そうなんだ。ありがとう。
またウインドウを出せないのか。
綺麗なウインドウクラスを書く日は遠い・・・。
またウインドウを出せないのか。
綺麗なウインドウクラスを書く日は遠い・・・。
109デフォルトの名無しさん (ワッチョイ 7a79-A3l2)
2017/08/15(火) 19:59:11.57ID:vSz72Ekj0110デフォルトの名無しさん (ワッチョイ 3323-Eq/3)
2017/08/15(火) 20:03:18.47ID:BftRsONU0111デフォルトの名無しさん (ワッチョイ 5baa-ixYY)
2017/08/15(火) 21:06:58.79ID:K8T9Hr6g0 >>108
単にstd::function使えって話じゃねーの?
単にstd::function使えって話じゃねーの?
112デフォルトの名無しさん (ワッチョイ a309-lt+t)
2017/08/15(火) 21:16:01.46ID:AjDM7F7/0113デフォルトの名無しさん (ワッチョイ 5baa-ixYY)
2017/08/15(火) 21:38:42.75ID:K8T9Hr6g0 >>112
typedef bool(*Fun)();
にキャプチャしたデータを置いとく場所が無いんだからいつまでまっても実現しないよ
そういうC言語のAPIにはvoid*でユーザーデータ渡せて引数で取得できるようになってるはずなんだからそれに規則性があるのなら(例えば最初の引数がユーザーデータになってるとか)テンプレートでラッパー書くの簡単でしょ
typedef bool(*Fun)();
にキャプチャしたデータを置いとく場所が無いんだからいつまでまっても実現しないよ
そういうC言語のAPIにはvoid*でユーザーデータ渡せて引数で取得できるようになってるはずなんだからそれに規則性があるのなら(例えば最初の引数がユーザーデータになってるとか)テンプレートでラッパー書くの簡単でしょ
114デフォルトの名無しさん (ワッチョイ 1a49-d9WE)
2017/08/15(火) 21:53:17.41ID:+1mFvI7w0115デフォルトの名無しさん (ワッチョイ a309-lt+t)
2017/08/15(火) 23:43:23.71ID:AjDM7F7/0116デフォルトの名無しさん (ワッチョイ 5baa-uFAa)
2017/08/15(火) 23:55:50.09ID:K8T9Hr6g0 >>115
キャプチャしないラムダ式は関数ポインタに変換出来るだけ。束縛じゃない。
キャプチャしないラムダ式は関数ポインタに変換出来るだけ。束縛じゃない。
117デフォルトの名無しさん (ワッチョイ a309-lt+t)
2017/08/15(火) 23:58:52.92ID:AjDM7F7/0 あぁ、語弊があったね。ゴメン。
118デフォルトの名無しさん (ワッチョイ 7a79-A3l2)
2017/08/16(水) 06:02:38.98ID:1FqF77kw0 クロージャがどのように実装されているか調べてみることを勧める。
そしてそれをC言語の関数ポインタと互換性がある形で実装可能か考えてみるといい。
そしてそれをC言語の関数ポインタと互換性がある形で実装可能か考えてみるといい。
119デフォルトの名無しさん (ワッチョイ a309-lt+t)
2017/08/16(水) 06:31:25.68ID:3XX715Yb0120デフォルトの名無しさん (ブーイモ MMba-d9WE)
2017/08/16(水) 12:58:58.53ID:+9oABFYpM もういない宣言出てるけど、スレッドローカルでやられても困るだけだと思う。
121デフォルトの名無しさん (ワッチョイ 9ac5-OW3C)
2017/08/16(水) 14:20:28.94ID:5HjXxUQN0 >そしてそれをC言語の関数ポインタと互換性がある形で実装可能か考えてみるといい。
もともとC言語はλ式とか、(束縛変数がクラスのこともありえるが)クラスを構文でサポートしていないのだから
「C言語の関数ポインタと互換性がある形」と逝っただけでは何を指しているのか不明確にならざるおえない
呼び出し側がいかに煩雑な記述になろうとも、動けば互換性があるという立場をとってみるテスト、
束縛変数も毎回引数渡しすればC言語の関数ポインタと互換にできるのでは…
もはやクロージャでも何でも無いが一応動く
もともとC言語はλ式とか、(束縛変数がクラスのこともありえるが)クラスを構文でサポートしていないのだから
「C言語の関数ポインタと互換性がある形」と逝っただけでは何を指しているのか不明確にならざるおえない
呼び出し側がいかに煩雑な記述になろうとも、動けば互換性があるという立場をとってみるテスト、
束縛変数も毎回引数渡しすればC言語の関数ポインタと互換にできるのでは…
もはやクロージャでも何でも無いが一応動く
122デフォルトの名無しさん (オッペケ Srbb-iw66)
2017/08/16(水) 14:36:46.12ID:53LlWcImr123デフォルトの名無しさん (ワッチョイ 9ac5-OW3C)
2017/08/16(水) 15:18:13.19ID:5HjXxUQN0 >>122
関数ポインタ経由の関数呼び出しに関数名のマングルは関係無いのでは…
関数ポインタ経由の関数呼び出しに関数名のマングルは関係無いのでは…
124デフォルトの名無しさん (オッペケ Srbb-iw66)
2017/08/16(水) 15:34:56.89ID:53LlWcImr >>123
関数名だけではない
extern "C" using CF = void(); と
using CPPF = void(); は似て非なる関数型
この二つはオーバーロード可能で互換性も無い
恐らくマングリのみならず関数呼び出し規約の違いを許容する思想
ただこれを正しく実装したコンパイラーを見たことは無い
関数名だけではない
extern "C" using CF = void(); と
using CPPF = void(); は似て非なる関数型
この二つはオーバーロード可能で互換性も無い
恐らくマングリのみならず関数呼び出し規約の違いを許容する思想
ただこれを正しく実装したコンパイラーを見たことは無い
125デフォルトの名無しさん (ワッチョイ a37f-W16a)
2017/08/16(水) 15:57:26.34ID:07vifjzr0 「正しく実装」すると互換性がないってこと?
126デフォルトの名無しさん (ワッチョイ 4eaa-Kd4M)
2017/08/16(水) 15:59:31.27ID:CMzvSoma0 a = 0
2.times do
b = 1
3.times do
p a, b
end
end
「Rubyのしくみ」に書いてあるけど、Rubyは、Cで作ってあり、
do 〜 end のブロックは、クロージャの実装。
ラムダ・Proc も、ほとんど同じ
子のブロック内で、変数が見つからなければ、
外のスコープ(先祖の方向)へ遡って、探しに行く
2.times do
b = 1
3.times do
p a, b
end
end
「Rubyのしくみ」に書いてあるけど、Rubyは、Cで作ってあり、
do 〜 end のブロックは、クロージャの実装。
ラムダ・Proc も、ほとんど同じ
子のブロック内で、変数が見つからなければ、
外のスコープ(先祖の方向)へ遡って、探しに行く
127デフォルトの名無しさん (オッペケ Srbb-iw66)
2017/08/16(水) 16:07:27.94ID:53LlWcImr >>125
そのとおり
規格では別の型と規定されている
atexitなど関数ポインターを渡す関数ではCリンケージの関数ポインターを渡すかC++リンケージの関数ポインターを渡すかで
C版atexitとC++版atexitのオーバーロード呼び分けができることになっている
clang/G++は意図的に規格に従っていないというのが痛説
Visual C++は規格より自分が正しいという意味不明な見解
そのとおり
規格では別の型と規定されている
atexitなど関数ポインターを渡す関数ではCリンケージの関数ポインターを渡すかC++リンケージの関数ポインターを渡すかで
C版atexitとC++版atexitのオーバーロード呼び分けができることになっている
clang/G++は意図的に規格に従っていないというのが痛説
Visual C++は規格より自分が正しいという意味不明な見解
128デフォルトの名無しさん (ワッチョイ a37f-W16a)
2017/08/16(水) 16:16:58.46ID:07vifjzr0 や、互換性がない→別の型 は真でも 別の型→互換性がない はそうじゃないような。
129デフォルトの名無しさん (オッペケ Srbb-iw66)
2017/08/16(水) 16:31:53.97ID:53LlWcImr そのとおりだ
暗黙の変換は禁止されていない
ただ暗黙の変換が可能というルールも存在しないので「コンパイルが通る保証が無い」と書いた
暗黙の変換は禁止されていない
ただ暗黙の変換が可能というルールも存在しないので「コンパイルが通る保証が無い」と書いた
130デフォルトの名無しさん (ワッチョイ a37f-W16a)
2017/08/16(水) 16:48:50.64ID:07vifjzr0 なるほど。
上の方で原理的に無理みたいなことが書いてあった気がしたので念のため。
上の方で原理的に無理みたいなことが書いてあった気がしたので念のため。
131デフォルトの名無しさん (ワッチョイ b6a6-iw66)
2017/08/16(水) 18:09:49.22ID:VpF+jov/0 マングリングっていやらしいよな
132デフォルトの名無しさん (ワッチョイ b632-iGin)
2017/08/16(水) 18:35:35.31ID:lmNMFTOO0 そういうCのインタフェースにはたいてい関数ポインタの他にユーザデータを指定できるようになっててそこにthisなんかを入れておくものだが、 >>105 は関数オブジェクトを関数ポインタだけに変換したいと言っているわけか……
コードを動的に生成すれば不可能ではないだろうけど、色々トレードオフがあるから言語の機能にするのはどうだろうね。
ライブラリを作っても良いんだろうけど、おとなしく定石に従っておいた方が良いよ
コードを動的に生成すれば不可能ではないだろうけど、色々トレードオフがあるから言語の機能にするのはどうだろうね。
ライブラリを作っても良いんだろうけど、おとなしく定石に従っておいた方が良いよ
133デフォルトの名無しさん (ワッチョイ 5baa-uFAa)
2017/08/16(水) 22:53:19.96ID:VOMe5hsv0 >>132
動的にコードを生成したとしてもどこにその生成したコードを置くのか、それをどうやって解放するのかが問題になるね。だったらコード生成してもしなくても同じ事。
動的にコードを生成したとしてもどこにその生成したコードを置くのか、それをどうやって解放するのかが問題になるね。だったらコード生成してもしなくても同じ事。
134デフォルトの名無しさん (ワッチョイ b632-iGin)
2017/08/16(水) 23:14:18.00ID:lmNMFTOO0 >>133
> 動的にコードを生成したとしてもどこにその生成したコードを置くのか、それをどうやって解放するのかが問題になるね。
そうだね。
> だったらコード生成してもしなくても同じ事。
同じではないね。
> 動的にコードを生成したとしてもどこにその生成したコードを置くのか、それをどうやって解放するのかが問題になるね。
そうだね。
> だったらコード生成してもしなくても同じ事。
同じではないね。
135デフォルトの名無しさん (ワッチョイ 5baa-uFAa)
2017/08/16(水) 23:47:46.20ID:VOMe5hsv0 >>134
言い方が悪かったかな?
「どこにその生成したコードを置くのか、それをどうやって解放するのか」が解決するのであれば、コードを動的に生成しなくてもキャプチャしたデータ自体をそこに置けばいいだけ。
言い方が悪かったかな?
「どこにその生成したコードを置くのか、それをどうやって解放するのか」が解決するのであれば、コードを動的に生成しなくてもキャプチャしたデータ自体をそこに置けばいいだけ。
136デフォルトの名無しさん (ワッチョイ 5b32-eSaa)
2017/08/17(木) 02:40:17.43ID:PxJqlDv90 >>135
キャプチャしたデータ(またはそれへのポインタ)をコード以外のどこかに置くとして、それは関数ポインタ一つ(コードへのポインタをとるCのAPIにそのまま渡せる形)にはならないだろ。
何の話をしてるんだ?
キャプチャしたデータ(またはそれへのポインタ)をコード以外のどこかに置くとして、それは関数ポインタ一つ(コードへのポインタをとるCのAPIにそのまま渡せる形)にはならないだろ。
何の話をしてるんだ?
137デフォルトの名無しさん (ワッチョイ d379-IovB)
2017/08/17(木) 05:10:47.78ID:gXVZW44o0 WTL/ATLでそれっぽいことをやってるね。
http://hp.vector.co.jp/authors/VA022575/c/msgmap.html
http://hp.vector.co.jp/authors/VA022575/c/msgmap.html
138デフォルトの名無しさん (スッップ Sdb3-2DsO)
2017/08/17(木) 08:39:28.71ID:rYxoi1+/d MS は mfc の頃から動的コード生成でやってだ記憶がある。
this をロードして jmp みたいな小さいコードを生成して Window Proc として使う。
this をロードして jmp みたいな小さいコードを生成して Window Proc として使う。
139デフォルトの名無しさん (ワッチョイ 994d-jLVh)
2017/08/17(木) 09:01:01.55ID:6E9r52D/0 それ動的生成だろ。コードじゃなくてインスタンス。
140デフォルトの名無しさん (スッップ Sdb3-2DsO)
2017/08/17(木) 10:51:29.58ID:rYxoi1+/d141デフォルトの名無しさん (ドコグロ MMb3-x4Vn)
2017/08/17(木) 11:04:19.66ID:OslnP8rdM >>140
ひょっとして各インスタンスにコードが含まれてるとか思ってる? w
ひょっとして各インスタンスにコードが含まれてるとか思ってる? w
142デフォルトの名無しさん (オッペケ Sr4d-T01/)
2017/08/17(木) 14:38:16.10ID:B8c7/K0xr >>138
そのサンクらしきものはどこのセグメントに置くの?
そのサンクらしきものはどこのセグメントに置くの?
143デフォルトの名無しさん (ワッチョイ 5b32-eSaa)
2017/08/17(木) 15:30:51.11ID:PxJqlDv90 自分でソース読めば良いのに。
最近はDEPとかあるから工夫が必要そうだよね、と検索したらこんなのが出てきた。
https://support.microsoft.com/ja-jp/help/948468/applications-using-older-atl-components-may-experience-conflicts-with
最近はDEPとかあるから工夫が必要そうだよね、と検索したらこんなのが出てきた。
https://support.microsoft.com/ja-jp/help/948468/applications-using-older-atl-components-may-experience-conflicts-with
144デフォルトの名無しさん (ワッチョイ 994d-jLVh)
2017/08/17(木) 16:53:07.66ID:6E9r52D/0 >>143
MFCのどのクラスに動的コード生成の実装が書いてんの?
MFCのどのクラスに動的コード生成の実装が書いてんの?
145デフォルトの名無しさん (ワッチョイ 5b32-eSaa)
2017/08/17(木) 17:43:39.99ID:PxJqlDv90 なんか頭悪そうなのがつっかかってきた
146デフォルトの名無しさん (スップ Sdf3-kTqj)
2017/08/17(木) 17:47:21.07ID:fzzVUP+8d DOS時代は動的コード生成とか良く使ったな
147デフォルトの名無しさん (ワッチョイ 994d-jLVh)
2017/08/17(木) 18:37:40.30ID:6E9r52D/0148デフォルトの名無しさん (スッップ Sdb3-2DsO)
2017/08/17(木) 18:53:03.48ID:p6ewHhXhd 理解しようという気持ちも理解する力もないのに質問すんなよ…
mfc ではやってたっけ?やってないんじゃないの?
というツッコミならともかく、
>>141>>142なんて思考力が虫以下だろ…どこのセグメントとかアホか
Win32 は古来よりフラットなリニアアドレスモデルだろ。
VirtualAlloc も知らなそうだし。
mfc ではやってたっけ?やってないんじゃないの?
というツッコミならともかく、
>>141>>142なんて思考力が虫以下だろ…どこのセグメントとかアホか
Win32 は古来よりフラットなリニアアドレスモデルだろ。
VirtualAlloc も知らなそうだし。
149デフォルトの名無しさん (ワッチョイ 9311-x4Vn)
2017/08/17(木) 18:56:13.88ID:wL10pSGX0 質問だと思ってる時点で低能確定やん w
まあセグメントと聞いてセグメントレジスタしか頭に思い浮かばない低能はROMってろ
まあセグメントと聞いてセグメントレジスタしか頭に思い浮かばない低能はROMってろ
150デフォルトの名無しさん (オッペケ Sr4d-T01/)
2017/08/17(木) 19:26:52.61ID:KC+pdSEir >古来よりフラットなリニアアドレスモデル
まさかそっちのセグメントに反応するとは予想外だった
まさかそっちのセグメントに反応するとは予想外だった
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国軍機レーダー照射、トランプ氏沈黙突く 試される日本外交 ★4 [蚤の市★]
- 元プロ野球選手・堂上隼人(43)を20代女性2人へのわいせつ未遂容疑で8回目の逮捕…これまでの被害者は10代・20代の女性11人に [Anonymous★]
- 【速報】 米トランプ政権声明 「中国が台湾を奪おうとする、いかなる試みも阻止する」 中国「レッドラインだ」 ★2 [お断り★]
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★5 [七波羅探題★]
- 【高校野球】なぜ『7回制』は反対多数でも止まらないか… 高野連が「全員の命」守るために貫く伝統より改革の姿勢 [冬月記者★]
- JAが"政府の備蓄米買い上げ"見越して価格下げず!?「古いコメは食用向きでないなどと理由をつけ...」専門家解説 ★2 [煮卵★]
- 【高市悲報】自衛隊「実は事前に現場海域で中国軍から空母での発着訓練をすると通告がありました」え…?😨 [931948549]
- 【高市悲報】自衛隊「実は事前に現場海域で中国軍から空母での発着訓練をすると通告がありました」え…?😨😨 [931948549]
- 戦後中国「賠償金は不要。悪いのは日本軍で日本人民は無辜、戦犯が裁かれればそれでよい」 [237216734]
- 【高市画像】ビッグマック、200円🍔 [683137174]
- もう疲れたよパトラッシュ......をVIPで発言して役6年
- 【悲報】山里亮太(南海キャンディーズ)さん [329329848]
