1 名前:デフォルトの名無しさん mailto:sage [2015/08/18(火) 07:10:18.03 ID:47QFVOwL.net] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ◆ソースのインデントについて 半角空白やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのも手ですが直接貼る場合は、 全角空白か に置換すると見栄えだけはよくなります。 【アップローダー】(質問が長い時はココ使うと便利) codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック) ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用) 前スレ 【初心者歓迎】C/C++室 Ver.96【環境依存OK】 peace.2ch.net/test/read.cgi/tech/1433514467/
438 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 17:31:35.42 ID:2Q1iapWx.net] >>436 太字のここでしょ? Every C header, each of which has a name of the form name.h, behaves as if each name placed in the standard library namespace by the corresponding cname header is placed within the global namespace scope. どこに「かも知れない」とかあるの? behavesって断定してるんじゃない?
439 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 17:33:45.85 ID:6UPbxu8z.net] RFC の MUST MAY SHULD みたいに整理してほしいわ
440 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 17:35:11.06 ID:XI3wSbIf.net] >>437 std::でアクセスできることが義務づけられているかどうかが違う >>438 それは>>425 とは関係ないstdio.hの記述 その下の It may also provide ではないのか
441 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 17:41:25.46 ID:1RubKd28.net] *.h → global空間で定義 c* → global空間とstd空間で定義 って事ですかい。
442 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 17:52:45.70 ID:R1lQnZw2.net] >>434 情報ありがとう。 確かに cstdio は シンボルをstd名前空間に入れて グローバル名前空間にも入れる「かもしれない」、と読めるね。 #include <cstdio> でstd修飾なしの printf() が使えるのは 規格通りでもあり、GCCがその挙動を選んだ、ということか。 しかしながら、グローバル名前空間に入れない環境もありうるし、 それで >>425 のコードがエラーになっても、これまた規格通りか。 うっかり std:: を書き忘れる癖があるので、 コンパイラがチェックしてくれると助かると思ったのだけれど。 >> ID:XI3wSbIf の人 有用が情報がなく挑発的なだけの投稿ばかりだね。 だからどうこうってわけじゃないよ。単なる感想として。
443 名前:425 == 442 mailto:sage [2016/02/03(水) 20:13:16.38 ID:R1lQnZw2.net] >>441 Including cstdio imports the symbol names in std namespace and possibly in Global namespace. Including stdio.h imports the symbol names in Global namespace and possibly in std namespace. cstdio をインクルードするとシンボルはstd名前空間に入る(必ず)。 グローバル名前空間にも入るかもしれない(入らないかもしれない)。 stdio.h をインクルードするとシンボルはグローバル名前空間に入る(必ず)。 std名前空間にも入るかもしれない(入らないかもしれない)。 だと思われる。
444 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 20:19:16.88 ID:pejUVpHJ.net] どちらを使うにしろ std名前空間を強要することはできないということになるのかな
445 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 21:13:49.98 ID:1RubKd28.net] >>443 Cシンボルは鬼っ子で色々議論したけどこうなった。 って事なんだろな [Stroustrup2013] に書いてあるかな? 簡単な事だけど、かなり根が深いのかも。 実際は c関数を使う場合は 衝突回避のため、独自の名前空間の中で使用する事になるだろうから 問題ないのかも namespace MyUtil{ auto aaa=strlen("wahaha"); } みたいな。
446 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 22:55:02.36 ID:XI3wSbIf.net] そうだな G++が::absのバグを十数年間放置したぐらいには根が深いだろう
447 名前:445 mailto:sage [2016/02/04(木) 01:51:05.67 ID:ZGjCmtZ8.net] 何をアホな事を書いてるのだろうと反省。失礼しました。
448 名前:デフォルトの名無しさん mailto:sage [2016/02/04(木) 19:27:08.85 ID:6dQTBxjx.net] 今日はQの自演による炎上学習法ナシ?
449 名前:デフォルトの名無しさん mailto:sage [2016/02/04(木) 20:07:26.52 ID:ZGjCmtZ8.net] 自演だったのかorz
450 名前:デフォルトの名無しさん mailto:sage [2016/02/04(木) 20:15:30.56 ID:M5WeNgYc.net] namespace org::gnu::gcc {}が書けるようになるのはC++14からだっけ? むしろ今までなんでこれが書けなかったのか、設計者に問い詰めたい。
451 名前:デフォルトの名無しさん mailto:sage [2016/02/04(木) 20:51:10.15 ID:cr9CcGXP.net] いえ、C++14では書けません
452 名前:プログラム初めてやってます mailto:sage [2016/02/05(金) 08:05:08.38 ID:0uefFKkY.net] ええっ…! それ私に向けられてるんです? なんで??そうなるんです??? Qとかって人じゃないですし… 毎日ここ見てられませんよ; 自力で勉強しないと失礼だって思ったのになんでそんな事言う人いるんです? もう来ない方がいいのでしょうか Qさんが誰かわかりませんが…
453 名前:デフォルトの名無しさん [2016/02/05(金) 08:05:39.03 ID:0uefFKkY.net] 勿論そのQさんとか言う人の自演じゃありません
454 名前:デフォルトの名無しさん mailto:sage [2016/02/05(金) 09:12:32.23 ID:40iMBEwg.net] >>452-453 ID:0ue... が Que のパチモン臭く見えるのが素敵。
455 名前:デフォルトの名無しさん mailto:sage [2016/02/05(金) 19:48:30.40 ID:7eaUpuXV.net] >もう来ない方がいいのでしょうか その通りだ 去れ
456 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 17:04:42.31 ID:nNZFJpww.net] CのコードをC++に移植しながら開発を続けようと思ってるのだが、 C++のラムダとCのブロックどちらを使うべきだろうか。
457 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 17:17:22.70 ID:9hAEzh2Z.net] ラムダ?
458 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 18:22:47.43 ID:VRPmATP2.net] このレベルだとC++を使うことを避けるのが望ましい ラムダとブロックは対比するものではないし CからC++への移行の手段でもない
459 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 23:43:46.75 ID:EbqYVSkn.net] エスパーしました。恐らく彼は初期化の話をしているのでしょう。初期化する際に何らかのリソースの確保を行う場合、初期化が済んだら即解放したいと思うことがあります。 ブロック内でリソースを確保しておけば、ブロックを抜けるときに自動的に解放されるのでこの意図を達成できます。 int i; { なにかリソースを確保したり、いっぱい一時変数を使ってこれからiの値を決める; i = 求めた値; }//用済みなった変数はここで即解放される C++ではこのアナロジーとしてλ式を当てはめられます。 const auto i { [&...]() ->int{ 何かのリソースを確保したり、いっぱい一時変数を使ってこれからiの値を決める return 求めた値; }() } これで定数を初期化でき、且つ、初期化時に用いた一時記憶域は即解放できることになります。
460 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 23:57:21.06 ID:+sMp0qjD.net] 327さん、おはようございます
461 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 23:59:35.45 ID:lc1dGjcs.net] Q「(しまった)」
462 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 00:50:30.55 ID:ECJX98k8.net] すまぬ。ここで言うブロック(Blocks)っていうのはClangの拡張の方のことだ。 C言語でクロージャーを実現するための機能なんだが、そういえばまだ標準になってなかったな。
463 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 03:25:55.80 ID:vUnRYzap.net] くっ・・・
464 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 12:22:58.36 ID:qM+VfxEi.net] 難しいわ
465 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 13:15:50.37 ID:5TnQ2D6C.net] >>459 後半使う時どうするん
466 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 15:26:10.43 ID:Ijn2TjOB.net] >>465 何を? 初期化に使用した資源? 後で使うならそれは使用済みではないということなので解放しちゃダメだから、ブロックの外のスコープで宣言するしかないのでは?
467 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 15:26:52.10 ID:Ijn2TjOB.net] ×使用済み ○用済み
468 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 15:34:20.94 ID:5TnQ2D6C.net] >>466 returnが仮に10なら const auto i { [&...]() ->int{ 何かのリソースを確保したり、いっぱい一時変数を使ってこれからiの値を決める return 求めた値; }() } int a; a = i;でaに10が入る?
469 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 17:44:59.48 ID:R5nKPKgb.net] そもそも論だけど const auto &&i = [&]()->int{ return 10; }(); と書かないのは何故?
470 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 18:03:43.29 ID:rWlIZ3EB.net] X x{init()};よりX x = init();という個人のスタイルがさも普遍的であるかのように話をされても
471 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 18:16:52.89 ID:R5nKPKgb.net] {}の数が減ってインデントが少なくて済むじゃん const auto &&i = []()->int { return 0; }(); 好みの問題であるけどね
472 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 18:28:52.25 ID:9LpCQunf.net] >>468 何故入らないと思うのか >>469 C++11から初期化は{}で囲むことがお行儀良いとされる。良い癖をつけよう。= {初期化値}も可。
473 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 20:04:31.18 ID:9LpCQunf.net] =を使わずに{}で囲むのみにしておけば、視認性抜群。一目でこれは代入でなく初期化なのだと判り脳の負担も軽くなる int i = 10; これからは int i {10}, j {1}, k {0}; の時代だ。jやkの位置が改行されたりタブで距離を取っていてもこれなら一目瞭然だ
474 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 20:45:28.76 ID:rWlIZ3EB.net] >>472 へー、ではなぜC++14のmake_uniqueには{}の初期化が使われていないのですか
475 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 22:38:27.35 ID:h5Y5qyZF.net] 推奨であって法律ではないからです
476 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 23:39:53.97 ID:rWlIZ3EB.net] へー、そうなのですか スコットメイヤーの本に別の理由が書かれていたのですが騙されていたのですね
477 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 00:00:23.89 ID:VRvtWrj2.net] すいません、全部適当言いました。許してください、何でもしますから
478 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 08:24:28.26 ID:pW7dPptS.net] >>472 アスペか
479 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 13:18:35.65 ID:3nWopzdP.net] アスペじゃありません、サイコパスです
480 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 14:18:31.86 ID:tZNW1Sh6.net] 北川景子?
481 名前:デフォルトの名無しさん mailto:sage [2016/02/15(月) 19:28:14.77 ID:qDxZgP2m.net] 悪夢ちゃん 良作ドラマやったな
482 名前:デフォルトの名無しさん mailto:sage [2016/02/16(火) 01:32:33.39 ID:iqNNo75Y.net] ideone.com/ONsNMR これがMSVC2015だとエラーになるのなんでなん? 回避方法知ってる人いる?
483 名前:デフォルトの名無しさん mailto:sage [2016/02/16(火) 07:15:41.19 ID:wJ7D3Nu/.net] true_typeのスペルミス 俺の環境では通った
484 名前:デフォルトの名無しさん mailto:sage [2016/02/16(火) 08:11:34.25 ID:nCCZDf8c.net] すぺるミスは見当たらない
485 名前:デフォルトの名無しさん mailto:sage [2016/02/16(火) 14:37:40.64 ID:WNE9IDAH.net] すべってます
486 名前:デフォルトの名無しさん mailto:sage [2016/02/16(火) 17:38:29.31 ID:nE46Ot5u.net] ラッパー関数を作成する場合、値渡しと参照渡し、どちらの方法が一般的なのでしょうか? void append(T o) { vector.push_back(o); } void append(const T& o) { vector.push_back(o); } boostのコードで値渡しの方法を見かけたのですが、 (www.boost.org/doc/libs/1_60_0/boost/assign/std/vector.hpp ) push_back内で行われるコピーを考えると二重のコピーになってしまう気がします。 参照を使わない方法にはなにか意図的な物があるのでしょうか。 またはC++では値渡しが基本ということなのでしょうか。
487 名前:デフォルトの名無しさん mailto:sage [2016/02/16(火) 17:43:40.27 ID:3V9H/1fh.net] テンプレートで、しかもinlineだから値渡しにしても良いという判断なんなんじゃないかな
488 名前:デフォルトの名無しさん mailto:sage [2016/02/16(火) 22:16:20.17 ID:eGMzofhZ.net] >>482 type_traitsヘッダを明示的にincludeしなきゃだめとかじゃないのか
489 名前:デフォルトの名無しさん mailto:sage [2016/02/17(水) 00:02:13.91 ID:BJJMKH5P.net] >>488 実際のコードではincludeしてたしそうでもないなー webcompiler.cloudapp.net/ ここでコンパイルすると通るけど 新規プロジェクトでWin32コンソールアプリケーション選んで同じコードコピペしてもエラーになるわ・・ 俺のVisual Studio 2015 Communityがおかしいのか・・・?
490 名前:デフォルトの名無しさん mailto:sage [2016/02/17(水) 00:47:09.77 ID:BJJMKH5P.net] まさかと思いUpdate 1当てたら通るようになりました。 どうもありがとうございました。
491 名前:デフォルトの名無しさん mailto:sage [2016/02/17(水) 01:24:40.77 ID:1H9n+Lj4.net] >>486 オブジェクト変更しないならconst参照でいいと思うけどなぁ
492 名前:デフォルトの名無しさん mailto:sage [2016/02/17(水) 01:37:30.39 ID:N1klTUFY.net] そのboostのやつは要素が基本形であることしか考えてないんだろ だから安易に値渡しになってる
493 名前:デフォルトの名無しさん mailto:sage [2016/02/17(水) 03:30:55.57 ID:1UNcQaMi.net] せやろか Boostに採択されるような手練れがそんな甘い設計をするのだろうか?
494 名前:デフォルトの名無しさん mailto:sage [2016/02/17(水) 07:43:08.25 ID:MVw4Ur3f.net] boost.assignの使いみち考えれば基本型しかなくても不思議はないな まぁでも、call_traitsみたいなやつくらいかましてくれても良いような気がするね forkして直すか、issueあげれば?
495 名前:デフォルトの名無しさん mailto:sage [2016/02/18(木) 12:57:49.40 ID:cxWjsl/x.net] 目的による ビットフィールドを切り捨てていいならforwarding-reference一択 そうでなければ値