エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。
【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)
前スレ
【初心者歓迎】C/C++室 Ver.99【環境依存OK】
http://echo.2ch.net/test/read.cgi/tech/1469177649/
探検
【初心者歓迎】C/C++室 Ver.100【環境依存OK】 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2016/11/06(日) 22:58:02.60ID:dU5z27As
302デフォルトの名無しさん
2017/02/01(水) 12:30:13.62ID:HL/HxBhd 直接の解はわからないけど、ぐぐって見つかったので確認
ポート開くとき "\\\\.\\COM○○" (○は数字 \はエスケープ込み)
って開いてる?
ポート番号が1桁の場合に限り "COM○"でも開けるらしいけど、
そのコードの延長で 2桁渡すとそれは開けないから
ポート開くとき "\\\\.\\COM○○" (○は数字 \はエスケープ込み)
って開いてる?
ポート番号が1桁の場合に限り "COM○"でも開けるらしいけど、
そのコードの延長で 2桁渡すとそれは開けないから
303301
2017/02/01(水) 12:49:42.61ID:RxSebrTI >>302
あ、はい。それはやってます。
今、わかったのですが、
一旦ペアリングを解除して、改めて「送信」COMポートを追加しようとすると、
先程までペアリングしていた対象PCが選択できるようになりました。
しかし今度は「選択されたデバイスでシリアルポートサービスが実行されていません。」と出て作成されません。
相手側に「受信」のCOMポートは作成済みなのですが…。
あ、はい。それはやってます。
今、わかったのですが、
一旦ペアリングを解除して、改めて「送信」COMポートを追加しようとすると、
先程までペアリングしていた対象PCが選択できるようになりました。
しかし今度は「選択されたデバイスでシリアルポートサービスが実行されていません。」と出て作成されません。
相手側に「受信」のCOMポートは作成済みなのですが…。
304デフォルトの名無しさん
2017/02/01(水) 13:25:07.55ID:HL/HxBhd ttp://kokufu.blogspot.jp/2014/02/windows-bluetooth-spp-server.html
これとかの雰囲気だと
「受信」で作った側のPCのソフトを先に立ち上げて接続待ちにして(SPPサーバー)
「送信」で作った側のPCを後追いで接続 かなぁ
力になれなくてすまん
これとかの雰囲気だと
「受信」で作った側のPCのソフトを先に立ち上げて接続待ちにして(SPPサーバー)
「送信」で作った側のPCを後追いで接続 かなぁ
力になれなくてすまん
305301
2017/02/01(水) 14:06:25.03ID:RxSebrTI >>304
いえいえ!
色々と調べていただいて参考になりました。
どうもシリアル接続サービスをサポートしていないようです。
今回の条件ではあまり好ましくないのですが、
WiFiを使ったソケット通信で妥協することにします。
ありがとうございました。
いえいえ!
色々と調べていただいて参考になりました。
どうもシリアル接続サービスをサポートしていないようです。
今回の条件ではあまり好ましくないのですが、
WiFiを使ったソケット通信で妥協することにします。
ありがとうございました。
306デフォルトの名無しさん
2017/02/01(水) 14:21:22.91ID:+8V+I8xy307デフォルトの名無しさん
2017/02/01(水) 20:39:39.90ID:3j6uP7e4 >>297
参照をメンバで持ちたい時は、コンストラクタでの初期化以外は無理。
class A {
public:
A(Param& x):m_param(x){}
private:
Param& m_param;
};
参照をメンバで持ちたい時は、コンストラクタでの初期化以外は無理。
class A {
public:
A(Param& x):m_param(x){}
private:
Param& m_param;
};
308デフォルトの名無しさん
2017/02/02(木) 01:04:42.40ID:CAgg+EtY shared_ptr,weak_ptrのことで質問なのですが
自クラス2つを引数に取る+演算子をオーバーロードしているクラスMatrixを使って
func(std::weak_ptr<Matrix> m1, std::weak_ptr<Matrix> m2){
mat = m1 * m2;
…
}
みたいにやりたいんですが、オペランドに一致する演算子がないと言われます
shared_ptr,weak_ptrに入れた場合どのようにしてオーバーロードされた演算子を利用できますか?
自クラス2つを引数に取る+演算子をオーバーロードしているクラスMatrixを使って
func(std::weak_ptr<Matrix> m1, std::weak_ptr<Matrix> m2){
mat = m1 * m2;
…
}
みたいにやりたいんですが、オペランドに一致する演算子がないと言われます
shared_ptr,weak_ptrに入れた場合どのようにしてオーバーロードされた演算子を利用できますか?
309デフォルトの名無しさん
2017/02/02(木) 01:27:35.78ID:FXYEZ0RW310デフォルトの名無しさん
2017/02/02(木) 02:04:10.33ID:CAgg+EtY >>309
ありがとうございます
weak_ptrを使っている理由は
funcはあるクラスのメンバ関数で、引数で渡されたポインタの所有権をクラスが持たないこと示すためにweak_ptrを使っているのですが
weak_ptr::expired()な場合は想定していません
ありがとうございます
weak_ptrを使っている理由は
funcはあるクラスのメンバ関数で、引数で渡されたポインタの所有権をクラスが持たないこと示すためにweak_ptrを使っているのですが
weak_ptr::expired()な場合は想定していません
311デフォルトの名無しさん
2017/02/02(木) 02:21:14.81ID:ExAPXdhA312デフォルトの名無しさん
2017/02/02(木) 02:21:18.81ID:EB2HJN86 スマートポインタはポインタのように振る舞うものだから
*や->でポインタの指す値にしなければならないよ
*や->でポインタの指す値にしなければならないよ
313デフォルトの名無しさん
2017/02/02(木) 10:51:03.92ID:335RX4F5 VS2015で.objを.libに変換してリンクできなくて悩んでいます
そういうことはできないのでしょうか?
複数のC++ファイルをビルド→.objが複数できる
新しいEXEプロジェクト作る→main()を用意→そこの.vcxprojを編集して複数の.objをincludeする→ビルドで正常な.exeできる(exeサイズ10MB)
include方法は<Object Include="abc1.obj" /> <Object Include="abc2.obj" />・・・
新しいスタティックライブラリプロジェクト作る→そこの.vcxprojを編集して複数の.objをincludeする→ビルドで.libができる(libサイズ100MB)
→新しいEXEプロジェクト作る→main()を用意→追加のライブラリで.libをリンクする→ビルドで動かない.exeできる(exeサイズ1MB)
動かない.exeのビルド時はリンカーエラーなど出ません
exeサイズが期待しているよりも小さく、実行時に例外で強制終了します
そういうことはできないのでしょうか?
複数のC++ファイルをビルド→.objが複数できる
新しいEXEプロジェクト作る→main()を用意→そこの.vcxprojを編集して複数の.objをincludeする→ビルドで正常な.exeできる(exeサイズ10MB)
include方法は<Object Include="abc1.obj" /> <Object Include="abc2.obj" />・・・
新しいスタティックライブラリプロジェクト作る→そこの.vcxprojを編集して複数の.objをincludeする→ビルドで.libができる(libサイズ100MB)
→新しいEXEプロジェクト作る→main()を用意→追加のライブラリで.libをリンクする→ビルドで動かない.exeできる(exeサイズ1MB)
動かない.exeのビルド時はリンカーエラーなど出ません
exeサイズが期待しているよりも小さく、実行時に例外で強制終了します
314デフォルトの名無しさん
2017/02/02(木) 12:49:56.83ID:cH1kwi7M 例外を具体的に
315デフォルトの名無しさん
2017/02/02(木) 13:18:13.30ID:Nq0thOwX >>314
> ハンドルされない例外がスローされました:読み取りアクセス違反。
> xxxxx が nullptr でした。
xxxxxはポインタ変数
exeサイズが小さいからリンクできてるように見えてリンクできてないのかなとは思うけど
libの追加方法を#pragma comment(lib,"")にしてもうまくいかずでどうしたらいいものか
> ハンドルされない例外がスローされました:読み取りアクセス違反。
> xxxxx が nullptr でした。
xxxxxはポインタ変数
exeサイズが小さいからリンクできてるように見えてリンクできてないのかなとは思うけど
libの追加方法を#pragma comment(lib,"")にしてもうまくいかずでどうしたらいいものか
316デフォルトの名無しさん
2017/02/02(木) 18:40:08.32ID:qO0hDPsp317デフォルトの名無しさん
2017/02/02(木) 18:48:07.72ID:S7kpFPUA318デフォルトの名無しさん
2017/02/02(木) 19:11:39.98ID:Eu4e1EaI319デフォルトの名無しさん
2017/02/02(木) 19:16:04.83ID:WkIFQVuy320デフォルトの名無しさん
2017/02/02(木) 19:18:03.73ID:qhXDtbED .c, .cpp から .lib 作るプロジェクト -(A)
そいつをリンクしつつ、 .c, .cpp から実行ファイルを作るプロジェクト -(B)
(参照設定とか依存関係とかで (A) を使うぜ俺 って指定する)
そいつをリンクしつつ、 .c, .cpp から実行ファイルを作るプロジェクト -(B)
(参照設定とか依存関係とかで (A) を使うぜ俺 って指定する)
321デフォルトの名無しさん
2017/02/02(木) 19:38:57.55ID:WkIFQVuy こんな感じだろ
ソースからobj生成: VSプロジェクトでなくていい
VSプロジェクト
1. objからexe作るVSプロジェクト (結果OK)
2. objからlib作るVSプロジェクト (3.がNGで、本当にうまくlib作れたかわからず)
3. 上のlibからexe作るVSプロジェクト (exeが例外でNG)
ソースからobj生成: VSプロジェクトでなくていい
VSプロジェクト
1. objからexe作るVSプロジェクト (結果OK)
2. objからlib作るVSプロジェクト (3.がNGで、本当にうまくlib作れたかわからず)
3. 上のlibからexe作るVSプロジェクト (exeが例外でNG)
322デフォルトの名無しさん
2017/02/02(木) 19:51:53.25ID:Eu4e1EaI323デフォルトの名無しさん
2017/02/02(木) 20:22:53.95ID:k638XiO/ そこまで行ったらDLLに分けるだろう
324313
2017/02/03(金) 13:56:09.01ID:3xPmzf3n 4番をやってみましたが結果OKでした
1. objからexe作るVSプロジェクト (結果OK)
2. objからlib作るVSプロジェクト (3.がNGで、本当にうまくlib作れたかわからないが、4がOKで作れてる可能性高い)
3. 2のlibからexe作るVSプロジェクト (exeが例外でNG)
4. 2のlibからobjを抽出して、そのobjからexe作るVSプロジェクト (結果OK)
作業の前提条件として下の2つは意味が同じと思っているのですが、違いがあるのでしょうか?
cppをコンパイルしてobjにし、objをリンクしてexeを作る
cppをコンパイルしてobjにし、objをlibに変換してからリンクしてexeを作る
1. objからexe作るVSプロジェクト (結果OK)
2. objからlib作るVSプロジェクト (3.がNGで、本当にうまくlib作れたかわからないが、4がOKで作れてる可能性高い)
3. 2のlibからexe作るVSプロジェクト (exeが例外でNG)
4. 2のlibからobjを抽出して、そのobjからexe作るVSプロジェクト (結果OK)
作業の前提条件として下の2つは意味が同じと思っているのですが、違いがあるのでしょうか?
cppをコンパイルしてobjにし、objをリンクしてexeを作る
cppをコンパイルしてobjにし、objをlibに変換してからリンクしてexeを作る
325デフォルトの名無しさん
2017/02/03(金) 13:56:30.01ID:OeN1TpCU Ubuntu16.04,gcc5.4.0で,書籍を参考に下記のプログラムを
コンパイル(gcc program.c -lalut -s -o program)したところ,
「'nullptr' was not declared in this scope」というエラーになりました
何が間違っているのか教えてください
---program---
#include<AL/al.h>
#include<AL/alc.h>
int main() {
//OpenAlの初期化
//デバイスを開く
ALCdevice* device = alcOpenDevice(nullptr);
//コンテキストを生成
ALCcontext* context = alcCreateContext(device, nullptr);
//生成したコンテキストを操作対象にする
alcMakeContextCurrent(context);
//OpenALの後始末
//操作対象のコンテキストを解除
alcMakeContextCurrent(nullptr);
//コンテキストを破棄
alcDestroyContext(context);
//デバイスを閉じる
alcCloseDevice(device);
}
コンパイル(gcc program.c -lalut -s -o program)したところ,
「'nullptr' was not declared in this scope」というエラーになりました
何が間違っているのか教えてください
---program---
#include<AL/al.h>
#include<AL/alc.h>
int main() {
//OpenAlの初期化
//デバイスを開く
ALCdevice* device = alcOpenDevice(nullptr);
//コンテキストを生成
ALCcontext* context = alcCreateContext(device, nullptr);
//生成したコンテキストを操作対象にする
alcMakeContextCurrent(context);
//OpenALの後始末
//操作対象のコンテキストを解除
alcMakeContextCurrent(nullptr);
//コンテキストを破棄
alcDestroyContext(context);
//デバイスを閉じる
alcCloseDevice(device);
}
326デフォルトの名無しさん
2017/02/03(金) 14:06:26.05ID:S9UE3yae nullptrはC++11からの機能だからですね
"gcc" -> "g++ --std=c++11"を使ってください
元のコンパイルは-lalutを指定していますが
そのプログラムならOpenALだけで大丈夫なので 下記で通ります
ライブラリをpkg-configに探させてるだけです
g++ --std=c++11 program.c `pkg-config openal --libs` -o program
"gcc" -> "g++ --std=c++11"を使ってください
元のコンパイルは-lalutを指定していますが
そのプログラムならOpenALだけで大丈夫なので 下記で通ります
ライブラリをpkg-configに探させてるだけです
g++ --std=c++11 program.c `pkg-config openal --libs` -o program
327デフォルトの名無しさん
2017/02/03(金) 14:55:43.86ID:xVLuMTde328デフォルトの名無しさん
2017/02/03(金) 15:42:48.87ID:3xPmzf3n >>327
使ってるのも使ってないのもある
libの追加方法は二通り試したけどどちらもビルドエラーはでないけど実行時NG
どちらもlibの追加を省略すると外部シンボルが見つからないエラーでビルドが通らない
プロジェクトのプロパティの「追加の依存ファイル」から→実行時NG
ソースファイル中に「#pragma comment(lib,"")」から→実行時NG
使ってるのも使ってないのもある
libの追加方法は二通り試したけどどちらもビルドエラーはでないけど実行時NG
どちらもlibの追加を省略すると外部シンボルが見つからないエラーでビルドが通らない
プロジェクトのプロパティの「追加の依存ファイル」から→実行時NG
ソースファイル中に「#pragma comment(lib,"")」から→実行時NG
329デフォルトの名無しさん
2017/02/04(土) 00:14:20.36ID:z/XsYQOx 何もしていない普通の一般人の自宅に隠しカメラを取り付け
それをネットでリアルタイム配信
仲間という人間に対する盗聴盗撮生ネット配信の会
しかけたカメラの映像
乗っ取っているPCの画像をリアルタイムで生配信中
集団で仲間の私生活を覗いて楽しんでいる
そんなことが今この国では行われています
それをネットでリアルタイム配信
仲間という人間に対する盗聴盗撮生ネット配信の会
しかけたカメラの映像
乗っ取っているPCの画像をリアルタイムで生配信中
集団で仲間の私生活を覗いて楽しんでいる
そんなことが今この国では行われています
330デフォルトの名無しさん
2017/02/04(土) 05:54:43.47ID:/r5Uxr2+ libでリンク解決してもダイナミックリンクにしてれば実行時にパス内に見つからずにエラー
スタティックリンクにしないと
スタティックリンクにしないと
331デフォルトの名無しさん
2017/02/04(土) 09:51:58.52ID:GdM1I4zb 久々にプログラミングしようと思うんですけど
USBカメラがあるからそれを使って監視カメラにしたいんだが
ピクセルデータが取れればあとは簡単だと思うんだけど、その前に
この適当に昔買ったバッファローのUSBからデータ取り出す事って可能なんですか?
USBカメラがあるからそれを使って監視カメラにしたいんだが
ピクセルデータが取れればあとは簡単だと思うんだけど、その前に
この適当に昔買ったバッファローのUSBからデータ取り出す事って可能なんですか?
332デフォルトの名無しさん
2017/02/04(土) 10:24:35.81ID:94H9RTyk333デフォルトの名無しさん
2017/02/04(土) 10:55:19.44ID:GdM1I4zb >>332
ありがとうございますだ
ありがとうございますだ
334デフォルトの名無しさん
2017/02/04(土) 21:25:32.55ID:uqEM2LY/ int a = 0;
int *b = &(1+a);
これが出来ないのはなぜですか?
1+aの計算結果というのはメモリ上のどこかにあると思うんですが
int *b = &(1+a);
これが出来ないのはなぜですか?
1+aの計算結果というのはメモリ上のどこかにあると思うんですが
336デフォルトの名無しさん
2017/02/04(土) 21:31:18.24ID:3pCbKNVT &1 を許すとややこしいことになりそうだ
337デフォルトの名無しさん
2017/02/04(土) 21:38:25.89ID:wIflvrKT >>334
計算結果はレジスタに入っててメモリには入ってないんじゃない?
計算結果はレジスタに入っててメモリには入ってないんじゃない?
338デフォルトの名無しさん
2017/02/04(土) 21:52:37.41ID:uqEM2LY/339デフォルトの名無しさん
2017/02/05(日) 19:35:43.24ID:ktep0Dpi340デフォルトの名無しさん
2017/02/05(日) 22:43:20.73ID:F2ePDpTS >337
レジスタがメモリじゃないかのようなアホレスだな
レジスタがメモリじゃないかのようなアホレスだな
341デフォルトの名無しさん
2017/02/05(日) 23:03:58.60ID:wagcFIA6 レジスタのアドレスって・・・
342デフォルトの名無しさん
2017/02/06(月) 01:31:32.48ID:DI3VdQ+9 アドレスのないレジスタはCでアクセスできないからな
アセンブリでしてねになるからね
アセンブリでしてねになるからね
343デフォルトの名無しさん
2017/02/06(月) 03:41:00.32ID:oG8S/cPb って言うかレジスタ関係なくね?
右辺値に対してアドレス取ろうとしてるから駄目なわけで。
右辺値に対してアドレス取ろうとしてるから駄目なわけで。
344デフォルトの名無しさん
2017/02/06(月) 05:58:55.21ID:GvVdGH4O >>334 の質問に対して「右辺値」を出すのは大げさじゃないかな。
もちろん正しいんだけど、詳細に踏み込みすぎというか、
その話はもっと理解が深まってから、というか。
「過去に自分がこの疑問を持ったときに、どんな説明をされたら
すっきり腑に落ちて先に進めただろうか」と思い返しながら回答してるんだろう。
もちろん正しいんだけど、詳細に踏み込みすぎというか、
その話はもっと理解が深まってから、というか。
「過去に自分がこの疑問を持ったときに、どんな説明をされたら
すっきり腑に落ちて先に進めただろうか」と思い返しながら回答してるんだろう。
345デフォルトの名無しさん
2017/02/06(月) 08:21:18.53ID:87jFG7WV346デフォルトの名無しさん
2017/02/06(月) 08:58:46.99ID:L0zP1ki7 間違った説明で相手を納得させておいて開き直りとはこれいかに
347デフォルトの名無しさん
2017/02/06(月) 13:17:28.90ID:WLH8uv6+348デフォルトの名無しさん
2017/02/06(月) 20:21:28.41ID:VJg+IRhi349デフォルトの名無しさん
2017/02/06(月) 20:22:09.67ID:VJg+IRhi350デフォルトの名無しさん
2017/02/06(月) 20:58:58.36ID:oG8S/cPb >>344
でもさ、レジスタって言語と関係ないじゃん?
でもさ、レジスタって言語と関係ないじゃん?
351デフォルトの名無しさん
2017/02/06(月) 21:52:01.05ID:w07g0Jpo registerは予約語なのに無関係は無いわ
352デフォルトの名無しさん
2017/02/06(月) 22:13:36.15ID:rtwfNknd >registerは予約語なのに無関係は無いわ
規格のどこを読んだら「register」キーワードと「レジスター」との関連が読みとれるんだか
規格のどこを読んだら「register」キーワードと「レジスター」との関連が読みとれるんだか
353デフォルトの名無しさん
2017/02/06(月) 23:29:15.59ID:w07g0Jpo 規格厨には理解しろと言っても無理だ
354デフォルトの名無しさん
2017/02/06(月) 23:45:37.66ID:+fmEnPzx >int a = 0;
>int *b = &(1+a);
っていうのが今intになってるからレジスタがどうとか言えるけど
intじゃなくて自分で定義したクラスとかだったらどうなんだって話だな
レジスタだからアドレスが取れないっていう説明はアレすぎないかい?
そもそもレジスタだけで済ませるかどうかはコンパイラの自由ってのもあるし
>int *b = &(1+a);
っていうのが今intになってるからレジスタがどうとか言えるけど
intじゃなくて自分で定義したクラスとかだったらどうなんだって話だな
レジスタだからアドレスが取れないっていう説明はアレすぎないかい?
そもそもレジスタだけで済ませるかどうかはコンパイラの自由ってのもあるし
355デフォルトの名無しさん
2017/02/06(月) 23:48:30.59ID:tIYhS76V 一生懸命だなあw
356デフォルトの名無しさん
2017/02/07(火) 00:11:08.64ID:STnejiJM 俺が思うにさ
最適化でレジスタに配置されてメモリに実体が確保されない変数ってのは
普通にありふれているわけじゃないですか
で、それらの変数のアドレスを取得するように
コードを書き換えたら、コンパイルエラーになるんですか?ってね
その場合ちゃんとコンパイラはメモリに実体を作るような動作になる
だからレジスタ云々はオプティマイズの話であって本質的に全く関係ないだろうと
レジスタに配置されているからアドレス取得できませんって意味不明で
だったらメモリに実体を作ればいくらでもアドレス取得できるだろって話なんだよ
どちらかというとこれは変数の寿命の関係でそうなっているんだよ
最適化でレジスタに配置されてメモリに実体が確保されない変数ってのは
普通にありふれているわけじゃないですか
で、それらの変数のアドレスを取得するように
コードを書き換えたら、コンパイルエラーになるんですか?ってね
その場合ちゃんとコンパイラはメモリに実体を作るような動作になる
だからレジスタ云々はオプティマイズの話であって本質的に全く関係ないだろうと
レジスタに配置されているからアドレス取得できませんって意味不明で
だったらメモリに実体を作ればいくらでもアドレス取得できるだろって話なんだよ
どちらかというとこれは変数の寿命の関係でそうなっているんだよ
357デフォルトの名無しさん
2017/02/07(火) 00:12:13.25ID:vsDAW+dO 初心者向けの簡易な説明に外野がつまらない茶々入れて大騒ぎするなよ。
358デフォルトの名無しさん
2017/02/07(火) 00:25:30.14ID:pfKer2X+ >最適化でレジスタに配置されてメモリに実体が確保されない変数ってのは
>普通にありふれているわけじゃないですか
本当にありふれてるのか?
>普通にありふれているわけじゃないですか
本当にありふれてるのか?
359デフォルトの名無しさん
2017/02/07(火) 00:48:05.62ID:PI0qtNzz winsock(UDP)を使ったプログラムを作っています。
ほぼできたのですが、数100回繰り返すと徐々に通信が
遅くなっていきます。
通信するたびに、オープンとクローズを繰り返しているのですが、
その辺に原因がありそうでしょうか・・・。
ほぼできたのですが、数100回繰り返すと徐々に通信が
遅くなっていきます。
通信するたびに、オープンとクローズを繰り返しているのですが、
その辺に原因がありそうでしょうか・・・。
360デフォルトの名無しさん
2017/02/07(火) 02:25:04.93ID:e2fTv1VF メモリを解放していないから、使用メモリがドンドン大きくなっていくとか?
プロセスの使用メモリを、チェックすれば?
プロセスの使用メモリを、チェックすれば?
361デフォルトの名無しさん
2017/02/07(火) 07:22:03.04ID:ff698yUf362デフォルトの名無しさん
2017/02/07(火) 07:23:26.33ID:ff698yUf >>359
再現性あるならどこが遅くなってるかを調べたら?
再現性あるならどこが遅くなってるかを調べたら?
363デフォルトの名無しさん
2017/02/07(火) 07:43:41.13ID:AbeSLyAt >その自由さのために言語仕様でできないようにしてるだけでしょ
根拠は俺の「こうだったらいいな」
この理屈で行くとアドレスをとれる変数は
レジスタに乗せてはいけないことになるな
根拠は俺の「こうだったらいいな」
この理屈で行くとアドレスをとれる変数は
レジスタに乗せてはいけないことになるな
364デフォルトの名無しさん
2017/02/07(火) 11:15:58.10ID:bjgueVwS register云々してるやつはCかC++か区別して書け
365デフォルトの名無しさん
2017/02/07(火) 11:47:58.10ID:+LdvU0fQ class A
{
public:
int xxx;
void yyy();
};
class B : protected A ←protectedのままにしたい
{
public:
void yyy() { __super::yyy(); }
};
B bbb;
bbb.xxx = 0; ←アクセスできない
bbb.yyy(); ←使える
xxxをclassBの内部を変えることでアクセスできるようにする方法ない?
{
public:
int xxx;
void yyy();
};
class B : protected A ←protectedのままにしたい
{
public:
void yyy() { __super::yyy(); }
};
B bbb;
bbb.xxx = 0; ←アクセスできない
bbb.yyy(); ←使える
xxxをclassBの内部を変えることでアクセスできるようにする方法ない?
366デフォルトの名無しさん
2017/02/07(火) 11:52:35.77ID:Ex9Qk6T0 public:
using A::xxx;
using A::xxx;
367デフォルトの名無しさん
2017/02/07(火) 11:57:42.37ID:+LdvU0fQ >>366
おお!yyy()もそれでいけるね。サンクス
おお!yyy()もそれでいけるね。サンクス
368デフォルトの名無しさん
2017/02/07(火) 19:45:06.55ID:R+lISOuU369デフォルトの名無しさん
2017/02/08(水) 19:54:01.02ID:zyGgo9zG 俺,register使ったことないが
register int a = 0;
int *b = &a;
とすると、b経由で割り当てられたCPUレジスタにアクセスできるのか?
register int a = 0;
int *b = &a;
とすると、b経由で割り当てられたCPUレジスタにアクセスできるのか?
370デフォルトの名無しさん
2017/02/08(水) 20:15:16.32ID:x9WXoVQQ cではregister指定された変数のアドレスは取れない
c++では取ってもいいが、取ると普通はレジスタではなくメモリ割り当てになる
そもそもregister指定しても必ずレジスタ割り当てになるわけではない
今のコンパイラの多くはregisterを無視してるらしい
c++では取ってもいいが、取ると普通はレジスタではなくメモリ割り当てになる
そもそもregister指定しても必ずレジスタ割り当てになるわけではない
今のコンパイラの多くはregisterを無視してるらしい
371デフォルトの名無しさん
2017/02/08(水) 20:21:15.44ID:6Dg3FALd >>369
それ面白いけど実装がめちゃくちゃ大変だし、そもそもメリットないだろ
それ面白いけど実装がめちゃくちゃ大変だし、そもそもメリットないだろ
372デフォルトの名無しさん
2017/02/08(水) 20:38:12.66ID:Z1e//95W C++では次のC++17(今年出る予定)から機能削除、かつ将来のためにキーワードは予約だよ
373デフォルトの名無しさん
2017/02/08(水) 20:41:11.49ID:039KZGQ+ register int a = 0;
int *b = &a;
これで b が a を格納してるCPUレジスタをポイントすると、
b++ とかした時に、どのレジスタを指すの? て話で困るんじゃないか。
int& b = a;
という具合に参照で受ければ何とか…。
int *b = &a;
これで b が a を格納してるCPUレジスタをポイントすると、
b++ とかした時に、どのレジスタを指すの? て話で困るんじゃないか。
int& b = a;
という具合に参照で受ければ何とか…。
374デフォルトの名無しさん
2017/02/08(水) 20:43:52.35ID:Z1e//95W >>373
そんなの普通の変数だって未定義動作じゃん
そんなの普通の変数だって未定義動作じゃん
375デフォルトの名無しさん
2017/02/08(水) 20:47:07.07ID:6Dg3FALd376デフォルトの名無しさん
2017/02/08(水) 21:02:48.15ID:x9WXoVQQ なんでx86前提なんだよ
実際出来ないんだから議論の意味ないが、出来たとしても実装依存だろ
実際出来ないんだから議論の意味ないが、出来たとしても実装依存だろ
377デフォルトの名無しさん
2017/02/08(水) 22:06:39.93ID:r8a3b7fC378デフォルトの名無しさん
2017/02/08(水) 22:23:33.67ID:t4XC3Oio p++ が動作未定儀か否かとは関係ない話だと思うが
ポインタの指し先を求めず、ポインタの演算と差分
int a;
int* p = &a;
int* q = p + 1;
q-p;
で 実体の要素数+1 までは正しく差分が取れることを保障している ってどっかであった記憶
ポインタの指し先を求めず、ポインタの演算と差分
int a;
int* p = &a;
int* q = p + 1;
q-p;
で 実体の要素数+1 までは正しく差分が取れることを保障している ってどっかであった記憶
379デフォルトの名無しさん
2017/02/09(木) 02:31:40.69ID:lnTHGhne380デフォルトの名無しさん
2017/02/09(木) 03:48:37.73ID:WRm++DjL int i;
int *ip=&i;
ip+1はほんとにあるんかい?
いやあるんだろうけどw
int *ip=&i;
ip+1はほんとにあるんかい?
いやあるんだろうけどw
381デフォルトの名無しさん
2017/02/09(木) 06:05:01.98ID:4sYnDBFk 同等なレジスタを32個とか内蔵してて番号で区別する
RISCチップだと不自然でもない気がしてきた。
RISCチップだと不自然でもない気がしてきた。
382デフォルトの名無しさん
2017/02/09(木) 06:22:52.94ID:ZHuRANtU383デフォルトの名無しさん
2017/02/09(木) 06:42:00.30ID:RO+sEjyT >>376
> なんでx86前提なんだよ
お前の言うように実装依存なんだから例に決まってるだろ
68k なら d0, d1, ... ってもっと分かりやすいし他のプロセッサでも適当に決めりゃいいだけ
てか、ネタに突っ込むならもっと面白い奴にしてくれ
> なんでx86前提なんだよ
お前の言うように実装依存なんだから例に決まってるだろ
68k なら d0, d1, ... ってもっと分かりやすいし他のプロセッサでも適当に決めりゃいいだけ
てか、ネタに突っ込むならもっと面白い奴にしてくれ
384デフォルトの名無しさん
2017/02/09(木) 07:01:49.92ID:RO+sEjyT >>381
for(register int* r = &_r0; r < &_r32; r++){
*r = 0;
}
で、全レジスタがクリアできるとか便利かも
で r が _r3 辺りに割り当てられててバグるところまでがセットだよな w
for(register int* r = &_r0; r < &_r32; r++){
*r = 0;
}
で、全レジスタがクリアできるとか便利かも
で r が _r3 辺りに割り当てられててバグるところまでがセットだよな w
385デフォルトの名無しさん
2017/02/09(木) 12:57:20.22ID:DuGTx+Z0 レジスタってそう多くないから別に…
SPARCのレジスタウィンドウ合わせて128個とかならまあ
SPARCのレジスタウィンドウ合わせて128個とかならまあ
386デフォルトの名無しさん
2017/02/09(木) 14:24:27.76ID:ZeoIDdik つ ゼロページレジスタ
387デフォルトの名無しさん
2017/02/09(木) 16:59:44.90ID:m9bylyVb register int a = 0;
int *b = &a;
としたとき、Cではアドレスが取れないって話だったが、C++では取れる
が、次期規格でregisterは無視されるようになる・・・って話だよね
ま、仮にアドレスを取ったとしても何も問題ないように思うが
というのも、CPUの演算は通常レジスタに対してしかできないし
一方でアドレスが取れるのはメモリにあるものだけなので
普通の変数もレジスタとメモリの間を最新の値が行ったり来たりしているのが通常で
コンパイラは矛盾が起きないようなコードを吐き出すように出来ている
だからregister指定要らないよねって話になってるだろう
そもそも、可能な限りレジスタに配置する、というのがあいまいで
レジスタは有限個なのでregister指定しても必ずしもレジスタのみに配置されるかどうか
分からないしCPUにもよる
ここで、アドレスを取ったらレジスタのみに配置することが出来ないのだから
register指定であっても、「可能な限りレジスタに配置する」が出来ないということで
普通の変数扱いということで問題ない
int *b = &a;
としたとき、Cではアドレスが取れないって話だったが、C++では取れる
が、次期規格でregisterは無視されるようになる・・・って話だよね
ま、仮にアドレスを取ったとしても何も問題ないように思うが
というのも、CPUの演算は通常レジスタに対してしかできないし
一方でアドレスが取れるのはメモリにあるものだけなので
普通の変数もレジスタとメモリの間を最新の値が行ったり来たりしているのが通常で
コンパイラは矛盾が起きないようなコードを吐き出すように出来ている
だからregister指定要らないよねって話になってるだろう
そもそも、可能な限りレジスタに配置する、というのがあいまいで
レジスタは有限個なのでregister指定しても必ずしもレジスタのみに配置されるかどうか
分からないしCPUにもよる
ここで、アドレスを取ったらレジスタのみに配置することが出来ないのだから
register指定であっても、「可能な限りレジスタに配置する」が出来ないということで
普通の変数扱いということで問題ない
388デフォルトの名無しさん
2017/02/09(木) 17:03:46.90ID:XjHAaCWU >次期規格でregisterは無視されるようになる・・・って話だよね
文盲は去れ
長文で荒らすな
文盲は去れ
長文で荒らすな
389デフォルトの名無しさん
2017/02/09(木) 17:18:48.08ID:m9bylyVb >372 名前:デフォルトの名無しさん[] 投稿日:2017/02/08(水) 20:38:12.66 ID:Z1e//95W [1/2]
>C++では次のC++17(今年出る予定)から機能削除、かつ将来のためにキーワードは予約だよ
は噓ということ?
>C++では次のC++17(今年出る予定)から機能削除、かつ将来のためにキーワードは予約だよ
は噓ということ?
390デフォルトの名無しさん
2017/02/09(木) 17:24:14.08ID:WRm++DjL registerってのを使わなきゃいんでないのw
391デフォルトの名無しさん
2017/02/09(木) 17:31:18.93ID:aUQtcCRM 規格なんて知らんがレスから想像するとこうじゃないのか?
今の規格は「可能ならレジスタに割り当てろ」で、実際のコンパイラは無視してるのが多い
事実上機能してないから次期規格では仕様変えてregister変数やめる
今の規格は「可能ならレジスタに割り当てろ」で、実際のコンパイラは無視してるのが多い
事実上機能してないから次期規格では仕様変えてregister変数やめる
392デフォルトの名無しさん
2017/02/09(木) 17:50:34.94ID:55oKC5Ju C++ではすでにregisterは無視されてて、17からはエラーになるってことだろ
393デフォルトの名無しさん
2017/02/09(木) 18:47:17.89ID:lnTHGhne C++11の時点でdeprecatedになってて
C++17で書いたらエラーになる
キーワードはいつか規格で何かに再利用するかもしれないから予約したまま(ユーザーが関数名などに使用出来ないまま)。
C++17で書いたらエラーになる
キーワードはいつか規格で何かに再利用するかもしれないから予約したまま(ユーザーが関数名などに使用出来ないまま)。
394デフォルトの名無しさん
2017/02/09(木) 19:03:26.16ID:QPpApk6a395デフォルトの名無しさん
2017/02/09(木) 20:05:28.75ID:IuYXl6Zl >>393
registerについては、再利用の可能性というより、混乱の元だから今後は誰も触れてくれるなってところかな。
registerについては、再利用の可能性というより、混乱の元だから今後は誰も触れてくれるなってところかな。
396デフォルトの名無しさん
2017/02/09(木) 20:34:41.55ID:wAatsUnZ 今、キーワードとして問題ないからそのままにしておくってことだろ
一旦キーワードでなくしてしまうと将来また使いたくなった時に大混乱するから
一旦キーワードでなくしてしまうと将来また使いたくなった時に大混乱するから
397デフォルトの名無しさん
2017/02/09(木) 20:46:05.15ID:WRm++DjL C++17なんてもあるのか。 ついてけんわぁ
398デフォルトの名無しさん
2017/02/10(金) 12:36:17.18ID:yPTk9ivW register使うなら今のうち
399デフォルトの名無しさん
2017/02/10(金) 16:29:47.71ID:gDFEqThI C++17以降のregisterは、ガチャガチャチーン!とbeep音を鳴らします
400デフォルトの名無しさん
2017/02/11(土) 17:45:33.84ID:B6KA1QDA Mingwのgccでこんなのためしたら結構はやくなるのね。C++だと速度変わらんかったけど。
#include <windows.h>
#include <stdio.h>
int main(void) {
register int i;
DWORD t;
t = GetTickCount();
for(i=0 ; i <100000000 ; i++);
printf("%d\n",(int)(GetTickCount()-t));
return 0;
}
#include <windows.h>
#include <stdio.h>
int main(void) {
register int i;
DWORD t;
t = GetTickCount();
for(i=0 ; i <100000000 ; i++);
printf("%d\n",(int)(GetTickCount()-t));
return 0;
}
401デフォルトの名無しさん
2017/02/11(土) 17:50:28.59ID:o1zrWG0U registerネタどんだけ続けるんだ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【🐼🇨🇳】「高市総理VS中国」で日本からパンダはゼロに? 上野動物園「パンダ返還期限」まであと4カ月…★2 [BFU★]
- ネット殺到「高市総理の責任」「完全に高市リスク」「負けるな」中国が水産物輸入停止→流石に総理批判の声も「どう責任取る?」 ★6 [樽悶★]
- ネット殺到「高市総理の責任」「完全に高市リスク」「負けるな」中国が水産物輸入停止→流石に総理批判の声も「どう責任取る?」 ★5 [樽悶★]
- 【裁判】山上徹也被告の妹「この人は母のふりをした旧統一教会の信者だと思いました」「でも、母の形をしているから突き放せなかった」 [1ゲットロボ★]
- 【速報】 米大使声明 「日本を支えていく」「中国が威圧的手段に訴えるのは断ち難い悪癖」 [お断り★]
- 【7リメイク】『ドラゴンクエストVII Reimagined』では「プレイヤーの時間」を尊重したい…“100時間超”だった原作をテンポ良く現代化 [おっさん友の会★]
- 小野田紀美大臣「悪いことをする外国人は日本にいない状況をつくる」 [856698234]
- 高市の台湾有事発言、日中韓の文化交流すら停止させる [931948549]
- 外国人「日本の立ちんぼガールやばすぎるwwwwwwwww [977790669]
- 珍🏡珍
- 自民党 防衛費GDP比2%超へ協議開始 強い!強いぞ! [163661708]
- もう高市政権で経済も外交も破局にならないと愚民ジャップは分からないよっていう加速主義おじさんいるでしょ [731544683]
