【初心者歓迎】C/C++室 Ver.101【環境依存OK】 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。
【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)
前スレ
【初心者歓迎】C/C++室 Ver.100【環境依存OK】
http://mevius.2ch.net/test/read.cgi/tech/1478440682/ よくわからなければ、
CManiac(const CManiac& cm)
{ ... }
というコピーコンストラクターを書き加えてみるとよい。 代入の
CManiac& operater=(const CManiac& cm)
{
...
return *this;
}
も追加。 unsigned intなどを使って何かいい事有るのか?普通にint使えばいいだろ? IDEのデバッグ機能を使えば、std::vector::resizeなどのソースコードも読めるよ。 >>254
符号なし整数の比較が出来る。負の場合を考えずに済む。 >new char[1]は、要素数1の動的配列へのポインター
んなこたーない 符号ありよりも大きな範囲を扱える。ビット演算やビットフィールドで便利。 この実行結果を見て>>251の回答が瞬時に出てくるのはひょっとして凄い奴なのではないか?
と一瞬でも思ってしまった自分が恥ずかしい ライブラリ仕様の変遷を理解した上で質問者に回答を合わせる
などという高度な対応がクソコテにできる筈も無かった >符号ありよりも大きな範囲を扱える
確かにそうだな
言語仕様の規格上は >>251
コピーコンストラクターじゃなくて、代入でした。すみません。 >>262
あ、コピーコンストラクターは、C++03の方で、C++11なら、ムーブコンストラクターとムーブ代入が使えるから、少し動作が違うんだった。 Youtuberヒカルが月収を明らかに!!おはよう朝日です出演
https://www.youtube.com/watch?v=RLZGrqQnnZc
第1回案件王ランキング!YouTuberで1番稼いでるのは誰だ!
https://www.youtube.com/watch?v=asF2wQ2xhjY&t=61s
ユーチューバーの儲けのカラクリを徹底検証!
https://www.youtube.com/watch?v=FUSb4erJSXE&t=504s
【給料公開】チャンネル登録者4万人突破記念!YouTuberの月収公開!
https://www.youtube.com/watch?v=Y7DAQ0RKilM&t=326s
誰も言わないなら俺がYouTuberのギャラ相場を教えます
https://www.youtube.com/watch?v=E4q-vaQh2EQ&t=118s
YouTuberになりたいのは馬鹿じゃない!YouTuberになる方法
https://www.youtube.com/watch?v=Fr0WXXZRMSQ
最高月収5000万円だとさ。年収じゃなくて「月収」な
誰でも参入可能だからおまえらもyoutubeに動画投稿したほうがいい
顔出したくないならラファエルみたいに仮面かぶればいい
手っ取り早く視聴数稼ぐには有名ユーチューバーへの物申す系動画がオススメ
ゲーム実況はニッチだから人気ユーチューバーのネタをパクればいい ってことは、C++11の場合は、
CManiac(CManiac&& cm)
{ ... }
と
CManiac& operater=(CManiac&& cm)
{
...
return *this;
}
を書くんだね。これで完璧。 あ、動的配列じゃなくてヒープのアドレスとってるだけよということかな C++11のemplace_backを忘れてた。コピーせずに、vector内部で直接構築されるんだった。 >>266
「アドレス」でなく「ポインター」という言葉を使っているので正しくない
要素数1の動的配列の先頭要素へのポインター >>248
コピーコンストラクタ無しのm_pcが同じアドレスを参照している確認取れました。
丁寧な解説ありがとうございました。 >>241
言いたいことはわかるけど
キャストしたところで何もしないぜ? 何もしないってのは吐き出されるコードが不変て意味ね
個人的にはキャストするけど intが32bitな64bit環境下だとして
printfの可変長引数で32bit整数を64bitに自動拡張するときの
拡張のされ方が変わるんじゃね?
ただし%uによって32bit分しか見に行かないから無視してよいけど
コード不変とはならないんじゃね? int が32bit なら 可変長引数部でスタックに詰むとき
暗黙で 64bit に自動拡張はやらんのじゃないの? 保証は無いね
x64の場合でもキャストしようがしまいが0拡張になるけど
差が出るとしたらどんな場合? 常に0拡張は信じがたい
負数の時おかしくなるだろ・・・ intが32bitの処理系の話ね
32bitのintを64bitに符号拡張するのはダメでしょ >>282
>負数の時おかしくなるだろ・・・
ならねーよ
printfは32bitしか取り出さねーんだから 64bit で引き出したうえで 32bit しか採用しないのか
32bit で引き出すだけなのか
後者は2個目いこう狂うわけ 64bitに自動拡張してスタックって、x64はpush eaxしたら8バイトpushされんの? int32にしてもスタックやキャッシュは倍の速度で消費されるのかよ。 キャッシュは確認してないけど
スタックはポインタ幅で消費されるね 実装依存だとは思う
VisualStudioではそうだっつーだけ 普通、引数の受け渡しはスタックじゃなくてレジスタ使うけど 呼び出し規約は実装依存ではないけどアーキテクチャ依存でもないよ
そして、引数の受け渡しにレジスタをどう使うかというのは呼び出し規約と関係なく実装依存
さらに、引数はスタックに積まれるし、それはレジスタどうのこうのとは関係のない話 引数を { 頭から 末尾から } { レジスタ スタック } につんで
つんだ引数の巻き戻しを { 呼び出し側 呼ばれた側 } で行う >>296
呼び出し規約がアーキテクチャーに依存しないなんてことはあり得ない >>296はどうしようもない低能
その低能にマジレスみっともない >>296
レジスタ少ないx86ではスタックだが、x86_64では第1引数から第7引数までキッチリどのレジスタに入れろって決まってる。
これをアーキ依存と言わずしてなんと言うのか。 その規約をやぶって、全部スタックに乗せる、という呼び出し規約を自分で実装していいですか? 規約は他のプログラムと協調するためだけのもの。
他のプログラムと絡まないんなら好きにすればいい。 >>302
別にAPI単位の規約だから好きにすれば良いけど、スタックだと32bitよりメモリ喰うし増えたレジスタ活かさずメモリとやり取りだから関数呼び出しが多いほど速度に差が出るよ。 アセンブラで書くならともかく、
既存のコンパイラで自己流の呼び出し規約を使うって可能なのかな。 レジスタとか出てる時点でアセンブラやけどね。
高級言語からは同じに見えてもアセンブラからAPI呼ぶ時に混乱の元だから規約になってるんだろう。 >>306
自己流の呼び出し規約を使うのは自己流のコンパイラだけだろ
それが既存かどうかは知らんけど アセンブラでリーフ関数を呼ぶとき位だな
自己流が役立つのは pro*cって何のために存在するの?
普通にc言語のコードにSQL埋め込めばよくね? >>301
第6引数までじゃね? 普通は rdi rsi rdx rcx r8 r9
rax も浮動小数の個数に使うが
windowsだけは rdx rcx r8 r9 だった気がする。 >>310
普通はCにSQL埋め込むなんてできないだろ。
SQL文を送ってコンパイルする関数を呼んで実行する関数を呼んで結果を取得する関数を呼ぶので
かまわないならPro*Cなんて必要ない。
それにしてもなんで今頃Pro*Cなんだろうか。とっくに廃止されたかと思ってた。 よくわからないんだけどSQLと連動できるプログラム言語ってあるの? >>314
SQL埋め込みコボルが世の中に何百万行残ってるとおもってんだ コボルかー
じゃjavaとかpythonとかC++やCで大量データを扱おうと思ったら何らかのアルゴリズムでデーターベース自作するしかないの?
それともそういう目的だとすべからくLinqとかつかってるの? 大量のデータを処理したいのならPLSQLとかのdb上で動作するやつじゃないの? DB操作用のクラスが標準ライブラリにあるから、その言語はSQLをサポートしてると思ってるのだろう。 const char ex1[] = "test";
const char ex2[] = { 't', 'e', 's', 't', '\0' };
auto ex3 = "test";
auto& ex4 = "test";
auto&& ex5 = "test";
ググってみると、ex1とex2は完全に等価、ex3はconst char*?
ex4とex5はconst char[]だけどex1、ex2と等価ではない?
どういうことッスか?なんかよー分からんです。 変数名の上にマウスポインターを持って行く
ぐらいは試したのだろうか 誰もかれもがモダンな統合開発環境を使ってると思ったら間違いやで。 >>325
その通りだ
では
http://ideone.com/GtYLLG
この結果を見てわからなければ出家するしかない
ついでにex1,2は関数が実行される度に配列が作られる using F = void () &;
struct A { void f() & {} };
F A::*const &mp = &A::f;
参照もこのぐらい複雑になるとコンパイラーですら正しく実装できないものが出てくる 初心者歓迎スレはいつから難読コードスレになったんだ? 難読禁止スレではないし
それより言語を断らずにc++限定の話すんなや おまえらは意図してドヤ顔でオナニーコード貼って理解できないなら出家しろとか言ってるからな。
初心者相手にマウンティングとか見てて恥ずかしい。 バカにマウンティングしてるお前や俺よりマシだろ w http://d.hatena.ne.jp/yupo5656/20060907/
この話ってグローバル変数の時だけと思っていいですか?
void f(){ const char g[] = "asdf"; }
だと毎回初期化する分、損になりそうに思うんですが 普通は最適化されて何の問題もないだろうけど
組み込み用の一部の糞コンパイラとかで使う可能性があるなら書き換えておいた方が良いかもね 極端に悪くなる可能性のあるコードにしない
汎用性のあるコードを書く時の基本
特定の環境だけならその環境でテストしてみればわかること >>335
だからstatic付けろって書いてあるっしょ リテラルに名前付けたいだけなら
auto&&var=リテラル
何も考えずこれでええw もしかして#defineで定数用意するよりそっちの方がかっこいい? #define A 100 ←存在が害悪の化石老人
auto &&A = 100; ←ODRを考えない短絡思考
constexpr int A = 100; // ←ふつうの人
constexpr auto &&A = 100; // ←ちょっとヘンな人 組み込みCだとdefineしか出来なかったりするんだよ >>346
ODRとはOne Definition RuleのことでC++の重要なルールである。
Cの仮定義と異なりC++ではインライン関数やテンプレートを除き
「定義」が複数あってはならない。
この多重定義の禁止と一部の例外を定めたルールがODRと呼ばれる。
例えばauto && A = 100;が記述されたヘッダファイルを
二つの翻訳単位からincludeしたとすると
二つの翻訳単位でAが定義されることになりエラーとなる。
詳細は処理系のマニュアルを見よ。 もしかしてヘッダファイルにconstexpr auto &&A = "lkjdslkjf";とか書くのって合法?
#define 名前 定数としてたやつは全部constexpr auto &&名前 = 定数で置き換えられる? >>348
内部リンケージなのでODRには違反しない
翻訳単位ごとに実体が異なるのでアドレスが異なると困る場合には使うべきでないが
これは旧来のstatic constやdefineでも変わらない #define→enum→const→constexpr
定数書くのに変わり杉です
理想論いらないです#define溢れた現実世界見よ >>350
老害の見苦しい言い訳乙
ディープラーニングとか言っても理解できないんでしょ?涙拭けよ ■ このスレッドは過去ログ倉庫に格納されています