[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2ch.scのread.cgiへ]
Update time : 03/25 20:45 / Filesize : 142 KB / Number-of Response : 589
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part123



1 名前:デフォルトの名無しさん mailto:sage [2016/02/21(日) 16:36:27.08 ID:jZESqUY+.net]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

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

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

■長いソースを貼るときはここへ。■
 codepad.org/
 ideone.com/

461 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 06:22:04.15 ID:aVqCTfNk.net]
>>460
> 組み込みなら好きな場所にファイルを書き込める
意味わからん
今時 Linux や Windows Embedded 使ってる組み込みなんていくらでもあるのに

462 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 07:17:32.18 ID:fKG0+8Dg.net]
>>454
Windows + Visual Studio ならリソースに突っ込むのが一番簡単
でもゲーム開発とかなら別個にパックするファイルを用意した方がいい

463 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 09:27:46.68 ID:oD5CZDwR.net]
>>452
なんで operator<() だけでいいのでしょうか?

464 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 09:32:44.77 ID:i3aw7Uuy.net]
むしろless以外(同値判定など)がどうして必要なのか

465 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 09:59:57.29 ID:tKkEJPlU.net]
mapは内部で要素に順序をつけて管理しているため、strict weak orderを満たすlessが必要

順序づけ(要はsort)の条件を指定するのに==では足りないだろう。

466 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 10:18:49.25 ID:i3aw7Uuy.net]
しまったまた自演に反応してしまった

467 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 10:28:37.96 ID:/R8BseZf.net]
>>463
operator<があれば同値判定も出来るからというのが本当の答え
!(a<b) && !(b<a)ならa==b

468 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 10:42:20.95 ID:oD5CZDwR.net]
>>467
ありがとうございます.

469 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 11:56:29.54 ID:i3aw7Uuy.net]
>>467
どうしてそう息を吸ってはくような嘘をつくのか



470 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 12:07:33.31 ID:i3aw7Uuy.net]
mapのキーの話か
勘違いした失礼>>467

471 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 12:33:51.72 ID:P4VbUWO2.net]
変数名はhogeとfooとunkoのどれがいいですか?

472 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 14:29:27.12 ID:SYQTFOu+.net]
昔はhogeは通用したけど、今時の若い衆にいきなり使うと、なんなのこの人と思われることがあるらしい

473 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 14:53:53.05 ID:g1UHnDq8.net]
昔から「hoge=コミュ障」というイメージです

474 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 15:06:03.88 ID:4a76PkUY.net]
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でのエラーなのですが、
これは本来は予期している結果が得られているのでしょうか?
それともこいつが言うように実際は後者のような宣言になっているのでしょうか?

475 名前:デフォルトの名無しさん [2016/03/19(土) 15:37:01.96 ID:4a76PkUY.net]
>>474です 
すみません。ものすごい馬鹿な勘違いをしていました。__VA_ARGSは,も含めてそのまま放り込む
ためのものなんですね。

476 名前:デフォルトの名無しさん [2016/03/19(土) 15:37:46.60 ID:4a76PkUY.net]
すみませんが、>>474でやろうと思っていることを実装できるマクロは
どうやって組めばいいのでしょう?

477 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 15:54:23.67 ID:ni3uOtuZ.net]
>>476
https://www.google.co.jp/search?q=boost+preprocessor

BOOST_PP_SEQ_〜 を使えば MAKE((one)(two)(three)) でいけるはず。

478 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 15:57:26.06 ID:ni3uOtuZ.net]
SEQ にしないといけないのは昔の話だった。
いまは MAKE(one,two,three) でもいけそう。
d.hatena.ne.jp/DigitalGhost/20111205/1323052916

479 名前:デフォルトの名無しさん [2016/03/19(土) 19:11:04.92 ID:4a76PkUY.net]
>>476 ありがとうございます!
私はboostを全く知らなかったのですが、今入れてきました。

しかしいまいちよくわかったいないので、どうかboost/preprocessorを使った
プログラムをご教授願えませんでしょうか?



480 名前:デフォルトの名無しさん [2016/03/19(土) 19:48:34.76 ID:4a76PkUY.net]
調べていってはいるものの、全く理解が追い付きません…
(a ,b , c)の引数に対して、
enum{
  ENUM_a,
  ENUM_b,
  ENUM_c,
  ENUM_Num
}
が生成できれば締め切りに間に合うのです!
どなたかお願いします!

481 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 20:06:06.20 ID:SYQTFOu+.net]
あ、2ch新参の人だ!
2ch新参の人がいるぞ! 囲め!

482 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 20:13:11.30 ID:cIZsYOxL.net]
どうしてもマクロじゃないと締め切りに間に合わない状況ってなんだろうね

483 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 20:59:41.54 ID:5djHDgqa.net]
#, ##演算子

文字列化演算子・トークン連結演算子

484 名前:デフォルトの名無しさん [2016/03/19(土) 21:05:44.25 ID:4a76PkUY.net]
>>483 __VA_ARGS__で受け取った場合、引数が(a,b,c)だと
enum{
  ENUM_ ## __VA_ARGS__,
  ENUM_Num
}
としても
enum{
  ENUM_a,b,c,
  ENUM_Num
}
になっちゃいます

485 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 21:35:28.30 ID:IPOoQOnL.net]
ずいぶんレベル下がったなこのスレ

486 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 21:51:12.72 ID:VQqTJbFl.net]
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__ };

487 名前:デフォルトの名無しさん [2016/03/19(土) 22:03:39.89 ID:4a76PkUY.net]
>>486 ありがとうございます
恐らく本格的なプリプロセッサを組まれる方は任意引数でやっているだろうなぁ
とは思いますが、自分の力量にしたがいます。

488 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 01:20:47.66 ID:3h/wnv4V.net]
なにバカ言ってるんだか
プリプロセッサでループや再帰(的処理)を行うには何らかの形で
作者が想定した処理できる限界の数だけのマクロをベタ書きで用意するしかない
事前の用意不要で任意の数をループや再帰で処理するのは元より不可能

489 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 01:24:49.08 ID:YNMOH2/p.net]
なめくさりミステイクしてね?



490 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 02:24:48.46 ID:yN6fzEfa.net]
今時C++でマクロ展開のループとかしてる時点で論外だしな。

491 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 02:26:06.45 ID:yN6fzEfa.net]
いやループはマクロだけじゃ無理か。再帰のしかも一定数までだな。

492 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 04:59:40.07 ID:wXobkPts.net]
ハハワロス

493 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 09:05:43.61 ID:9j4drtjC.net]
__VA_ARGS__なんて使わないで、こういう風にすればいいだけじゃ?
www.geocities.jp/rage2050a/rEnumStr/rEnumStr.html

494 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 09:29:08.28 ID:9j4drtjC.net]
ちょっとだけ探した限りだと__VA_ARGS__使うやり方ではこのやり方が一番柔軟で良さそう
www.gamedev.net/page/resources/_/technical/apis-and-tools/maintenance-free-enum-to-string-in-pure-c-with-better-enums-r4230
数の制限はやっぱりベタ書きでなんとかしなくちゃいけないけどね

495 名前:デフォルトの名無しさん [2016/03/20(日) 14:17:44.97 ID:Q9e0J8ZE.net]
BOOST_PP_AUTO_RECってのがある。
こいつは例えばあるマクロ関数「FUNC」があったとして、
再帰の回数分だけFUNC_1 FUNC_2…と作り出す機能がある。
あなたが求める機能は、もし再帰的に書けるなら
MAKE_ENUM_ITER(key, ...) ENUM_ ## key, MAKE_ENUM_ITER(__VA_ARGS__)
のように書けばいいわけだから、

後はわかるだろ?

496 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 14:19:27.99 ID:Q9e0J8ZE.net]
sageてなかった

497 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 15:57:09.34 ID:NZgllOnE.net]
誰に向けたレスだ
> 再帰の回数分だけ
をどうマクロで処理してるかわかってる?
設計としては再帰の回数を管理するカウンタ用のマクロを例えば
COUNT_10,COUNT_9,...と必要な数だけベタ書きで用意して処理に使っているので
あらかじめ用意されてるカウンタ用マクロの数を越える任意の回数の再帰を扱えるわけではない

498 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 16:04:24.63 ID:Q9e0J8ZE.net]
再帰処理させたいマクロをFUNCとして、
FUNCを何回再帰させるかを指定してBOOST_PP系統のマクロを定義すると、
FUNC_nという形になる名前の任意のマクロのうち、まだ定義されていない
名前のマクロを探し出して再帰的にFUNC_nを命名する機能を持っているのだ
>>486のやっているベタ書きを自動的に書いてくれるのだ

499 名前:デフォルトの名無しさん [2016/03/20(日) 18:31:41.32 ID:EqMhetHD.net]
>>498
boost/preprocessor/repetition/repeat.hpp
の中身見たことある?



500 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 01:48:29.48 ID:ja7H/O1J.net]
百歩譲って
A=A+1
って式を認めよう
この場合のイコールは代入を意味するんだな

そこで質問です
A+1=A
って書いたらどーなるの?
A=A-1
と同じ結果が得られるの?
教えてー

501 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 01:49:27.42 ID:90Oe+hOc.net]
>>500
コンパイルエラーになるだけです

502 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 01:50:09.88 ID:ja7H/O1J.net]
>>501
そっか・・・
あんまり論理的ではないのねorz

503 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 02:17:41.55 ID:d4s8z5nU.net]
あーたの狭い脳内論理にフイットしないってだけで完全に論理的だから

504 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 02:24:07.46 ID:SoMbpeP6.net]
マセマティカでも使えば幸せになれるかも

505 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 02:53:49.93 ID:YLhrJ5lt.net]
>>501
おまいはエジソンかよw

506 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 03:41:34.03 ID:ti1fSBNM.net]
だから = は等価(equal, equivalence)じゃなくて割り当て(assignment)だと何度言ったら

507 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 05:12:04.79 ID:YLhrJ5lt.net]
あ、レス番間違えた
エジソンは>>500

508 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 05:55:27.03 ID:uWb5tpCC.net]
質問です。
(コンパイラ絡みの話題なので若干スレチかもしれませんが、このスレが一番詳しい人が多いと思いますのでご容赦ください)

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++でビルドしろというのはなしでお願いします

509 名前:デフォルトの名無しさん [2016/03/23(水) 06:01:35.89 ID:LEkWD+7J.net]
>>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;



510 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 10:12:52.17 ID:COygSTBI.net]
struct hoge{
std::string s;
};
hogeのムーブコンストラクタはどう書くのが正しいですか

511 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 10:29:58.57 ID:YLhrJ5lt.net]
>>509
すべてAになるとかエジソンコードかコレw

512 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 10:31:56.68 ID:LEkWD+7J.net]
メンバポインタで仮想関数を呼び出すとき、基底クラスの関数を指定ってできますか?
struct hoge { virtual void hage() { } };
struct fuga : hoge { void hage() { } };
void (hoge::*hogo)() = &hoge::hage;
fuga hege;
(hege.*hogo)(); //fuga::hageじゃなくhoge::hageにしたい

513 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 10:56:19.75 ID:GrZPafJv.net]
>>512
出来ない

514 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 11:01:24.81 ID:d4s8z5nU.net]
そもそもメンバポインタなんてものは使うな

515 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 14:32:18.80 ID:LEkWD+7J.net]
>>513
thx
情報密度の高いわずか4文字、その次の真空とは格段に違いますね。

516 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 00:36:19.09 ID:CsN4wd4t.net]
newとか書くのは老害なんですかね?
今日若いもんに指摘されたんだけども
make_hogehogeとか書いたほうがよいのでしょうか?
老害脱却してナウくてミニマルなコード書きたい

517 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 00:41:36.09 ID:9Xk0G6q+.net]
指摘したやつに聞いてこいよ
というか指摘されたときにちゃんと理由聞いとけよ

518 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 01:42:21.09 ID:019JwaRF.net]
deleteしわすれるマヌケなコードでなければ使ってもいいが

519 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 02:15:40.78 ID:lQwaLUOO.net]
>>500
上段より下段が時系列的に後
右辺より左辺が時系列的に後
そんなカスケード的概念が根底にある
BASICに行番号が有った頃と何も変わらない

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

多分、生物は前を向く、みたいな本能に根差した定義が隠れている



520 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 08:13:12.75 ID:xZz5tDVg.net]
>左辺が変数のみなら代入を意味する
>左辺が数式なら数式と扱う

という妄想でした
(c1 ? gr() : fr()) = 100 ;

521 名前:デフォルトの名無しさん [2016/03/24(木) 08:24:49.44 ID:Nz54sUCC.net]
それを言うなら
*pt = 100;
でしょ

A=100;のAもC++では左辺値という式で
変数とか数式とかいう言葉遣いは行番号BASICの話だろ

522 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 08:47:03.11 ID:RWWxbY4p.net]
>>516
スマートポインタを調べておいで

523 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 08:50:35.73 ID:4NO08lYx.net]
俺は数値型はmallocしか使わない

524 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 09:04:10.19 ID:wWfOqsS1.net]
なぜcallocを使わないのか
謎である

525 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 11:15:22.83 ID:biS/7wG3.net]
callocではポインタを初期化出来ないから

526 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 11:17:02.82 ID:biS/7wG3.net]
ああ、数値型限定か。取り下げ。

527 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 12:08:43.62 ID:ZS8UeVhQ.net]
>>516
そう書く以上ある程度は知ってるんでしょ?
まず使ってみて判断すりゃいい。

528 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 14:24:41.64 ID:aFiY6vgp.net]
スマポのデメリットって、
ちょっと記述が長いくらい?

529 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 15:53:26.47 ID:eZePobDJ.net]
そもそもC++において記述量はものの数に入らない。注意はゼロオーバーヘッドに向いている



530 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 16:10:53.13 ID:aFiY6vgp.net]
まあ、そうなんだけどね

もしC++の開発当初からスマポの概念が存在してたとしたら
もうちょっとシンプルなキーワードになってたのかなと思わなくはない

531 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 16:32:37.90 ID:5JBRPHnG.net]
スマポ使って記述量増えるか?delete書かなくていいんだし、例外安全なコード書くこと考えたらスマポ使わないと大変な記述量になるぞ

532 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 16:40:18.89 ID:YciTCaLR.net]
C++とOpenGLで大量のデータ(といっても1ファイル数MBのバイナリファイル)を表示するグラフを作ったんだが
ファイルを次々読んでいくと不正落ちするんだが
タスクマネージャを見る限りメモリリークはしてないっぽいんだが
原因はなんだろう?
エスパーさん助けて

533 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 16:47:29.18 ID:YnxOCpos.net]
>>532
フツーにVC++でデバッグしろや

534 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 16:56:15.84 ID:aFiY6vgp.net]
>>531
あくまで宣言時の話ね
安全かどうかはとりあえず置いとく

535 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 17:11:05.46 ID:YciTCaLR.net]
>>533
そういやそうやね
デバッグしたときの思い出したけどメモリのアクセスの違反とかやったかな
ただどこのメモリアクセスかだとかてんで絞り込めなかった記憶が蘇ってきた

536 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 17:11:55.85 ID:bJRa7hQW.net]
スマポは宣言したことないなあ

537 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 18:19:30.58 ID:GuX4g1Aq.net]
class POINT{
int x, y;

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

式にはクラス型が必要です。とエラー出る。
Javaだとこの書き方で来たと思うんだけどどうれば?

538 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 18:20:23.26 ID:HU0hrWcK.net]
this.x

this->x

539 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 19:05:20.17 ID:4ybpt3lE.net]
コンストラクタ内はthis未定。



540 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 19:16:58.07 ID:xZz5tDVg.net]
なにをいっているんだこのばかは

541 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 19:17:43.17 ID:CKYJRfTx.net]
>>537
class POINT{
  int x_, y_;

  POINT(int x, int y)
    : x_(x), y_(y)
  {}
};

542 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 22:26:04.65 ID:zkjgNnUp.net]
>>541はアスペ

543 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 22:39:30.65 ID:f7qbbkg+.net]
>>541
class POINT{
  int x_, y_;
public:
  POINT(int x, int y)
    : x_(x), y_(y)
  {}
};

544 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 23:04:36.81 ID:3G6+DDFH.net]
>>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)} {}
};

545 名前:デフォルトの名無しさん [2016/03/24(木) 23:49:09.31 ID:zWmpvvy2.net]
>>535
clangやgccならAddressSanitizerでバッファーオーバーフローしたタイミングで止めてコールスタックを表示できるし、
解放済みメモリへアクセスしたときもそのアドレスを解放した箇所のコールスタック表示できる。

546 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 00:38:22.72 ID:+Ze54dSh.net]
でもOpenGLのデバッグはつらいね。
OpenGLの使い方間違え落ちると呼び出し元がわからんことが多いし。

547 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 00:52:21.56 ID:UpbiIEYU.net]
>>537
class POINT{
  int x, y;
  POINT(int x_, int y_)
    : x(x_), y(y_) {}
};
だろ

548 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 00:53:38.91 ID:UpbiIEYU.net]
>>537
ていうか
class POINT{
public:
  int x, y;
  POINT(int x_, int y_)
    : x(x_), y(y_) {}
};
しておかないとコンストラクタ呼べんよ

549 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 00:58:19.08 ID:BMGk8TKa.net]
>>548 そのアンダースコア要らない。



550 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 01:05:01.92 ID:UpbiIEYU.net]
でもわかりにくいだろ?

551 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 01:09:41.99 ID:OQH/xHTw.net]
>>548であれば明確で分かりやすいから要らない

552 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 01:16:51.01 ID:ea+R8FSN.net]
後ろアンダーラインカコワルイ

553 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 02:09:13.34 ID:9WnSpcyZ.net]
だよね。引数を後ろアンダースコアにするの俺も昔やってたことあるけどカッコ悪すぎるのでもう止めた
メンバ変数は前アンダースコア、引数にはアンダースコア付けないで落ち着いた
後ろアンダースコアって何であんなにカッコ悪いんだろ?m_よりはマシだと思うが

554 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 02:58:29.24 ID:7ath5rIc.net]
変数命名で思い出したけど、いろんな様式あるよねキャメルケースとかスネークケースとかそういうの

どれが流行ってるとか一般的にどうあるべきとかいう一般論あるの?

555 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 03:08:18.87 ID:cXdBDF9l.net]
前アンダーが処理系予約と知らずに使う方がもっとカッコ悪い

556 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 03:11:49.84 ID:UodAUCRU.net]
それぞれの流儀で決まる
コーディング規約を守るために努力すんのは無駄極まりないからGoogleの規約基準にしていいと思うけど
さすがにiとかbは消えたけどm_とg_はたまに見かける

557 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 03:19:28.56 ID:9WnSpcyZ.net]
>>555
規格ちゃんと読んだか?
前アンダースコアが予約されてる条件を理解してるか?
メンバ変数の前アンダースコアは合法だってことを知ってるか?

558 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 03:58:43.82 ID:F3D1y9dC.net]
法典を示せよ

559 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 04:05:28.83 ID:cXdBDF9l.net]
>>557
マクロはCの制約を適用しなければいけない
必然的に前アンダーは使ってはいけない



560 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 04:16:26.20 ID:9WnSpcyZ.net]
何言ってるんだか
規格を見るのが一番だが、この辺りでも見て自分の頭で考えてね
https://msdn.microsoft.com/ja-jp/library/cc440188%28v=vs.71%29.aspx

_大文字始まりは主にマクロのために全てのスコープで予約されてるが、_小文字始まりはグローバルスコープ以外では合法
これくらいのルールが分からないようじゃプログラマ失格だぞ
法典を示せ?テメエで調べろよ怠け者

561 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 05:55:20.56 ID:Agsep6u6.net]
「_大文字で始まる名前、_小文字で始まる名前は
ここでは許される、ここでは許されない」みたいな部分で
規格のギリギリを突くような書き方が好ましいとは思わないけどね。

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

せいぜい複数人で開発しているときに、
「このメンバ名、_で始まってるけどいいんだっけ?」
「この場合は許されてるんですよ。予約されてるのは…
(しばらく薀蓄タイム)…というわけなのです」
「ふぅん、そうか。要するに問題ないのね」
という会話が生じる程度のネタでしょ。

562 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 06:13:55.38 ID:9WnSpcyZ.net]
ギリギリでもなんでもなく明確に合法なんだが
それにネタ程度の話なんかじゃなくて、メンバ変数を_小文字始まりに統一するとIDEで_を入力するとメンバ変数の一覧が出てきてメッチャ捗るという現実的な恩恵がある
C#では奨励されているスタイルだし、C++とC#を同じくらいやる俺にとってはもうこのスタイルで統一するのがベストという結論

563 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 06:40:08.87 ID:i3XIX2iS.net]
まったくだ

564 名前:デフォルトの名無しさん [2016/03/25(金) 06:52:38.28 ID:MISdMFxz.net]
>>562
どこで奨励されてるの?

https://msdn.microsoft.com/ja-jp/library/ms229045(v=vs.100).aspx
ここには使うなって書いてあるけど

565 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 07:06:04.17 ID:ACUGT+cL.net]
this付ける派閥には一切恩恵がないや…

566 名前:デフォルトの名無しさん [2016/03/25(金) 07:35:12.73 ID:bT5/u8Kc.net]
前アンダースコアはないわ

567 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 07:48:56.52 ID:i3XIX2iS.net]
>>564
そんな不適切なページ

568 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 08:10:52.98 ID:cXdBDF9l.net]
C++ではグローバルネームだけが前アンスコ予約となってる
Cとの共存に考えがいたらないまま、
>>557
>規格ちゃんと読んだか?
と言ってしまい、引っこみがつかなくなり発狂中

569 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 08:14:22.84 ID:+Ze54dSh.net]
スレタイ



570 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 08:16:09.34 ID:i3XIX2iS.net]
大文字と小文字の区別がつかない人間か

571 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 08:25:16.24 ID:cXdBDF9l.net]
>>569
Cのヘッダーを全くインクルードしなけりゃ良いよ
そんなの学校の宿題くらいしか無いけどね

572 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 08:29:34.02 ID:UodAUCRU.net]
動けば何をやってもいいのがC++だぞ

573 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 08:33:00.37 ID:TW5rwKlv.net]
>>541です
物議を醸すようなコードを晒してすみません
個人的には前アンスコでも後アンスコでもいいと思います
同じでプロジェクト単位で統一されていることが重要と思っていてC++としてどちらがいいとかはないと思ってます

574 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 09:11:07.81 ID:+Ze54dSh.net]
素のCヘッダなんて、どうしてもCのライブラリを使いたい場合くらいしか使わんなぁ。
C/C++共用のヘッダじゃなきゃ自分でextern "C"することになるから、そのときに
両方の規格を気にするくらいで。
そもそも、自前のcppコードでメンバにアンダースコア使う話とCヘッダのインクルードが
どう関係あるのか意味不明。

575 名前:535 mailto:sage [2016/03/25(金) 09:21:42.75 ID:qvYXoatK.net]
>>545
だいたい数十ファイル(ばらつき)を読み込んだあたりで突然落ちて
最初はメモリリークを疑ったからかなり明示的にメモリの解放を頻繁に行うようにした
でもやっぱり症状変わらなかった
解放済みメモリへのアクセスもあるかなって思ったけどようわからんかったけど
もうちょい頑張ってみる

>>546
OpenGLとかコードをパクりまくってつぎはぎだらけでなんとか表示させてるからあんまり意味わかってなくてつらい部分は確かにある
このOpenGLあたりでグラフィックメモリがパンクしてんのかとも思ってコード内でグラフィックの使用量吐き出させたりフリーソフトで監視したけどそんなにメモリが増大していってる感じじゃなかったな

576 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 09:37:39.50 ID:KBRwIVst.net]
あれ?これ合法だっけ?ってなる時点で紛らわしいので避けるかな
だったら前this か m_ の方がマシ

577 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 10:22:53.41 ID:AP4XabWz.net]
>>559
classのメンバ変数弄るならInline関数使うべきだろ。
そこ触るのにcとの互換性考慮する必要なくね?

578 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 11:19:19.06 ID:9WnSpcyZ.net]
StyleCop死ねwww
stylecop.codeplex.com/wikipage?title=A%20Brief%20History%20of%20CSharp%20Style&referringTitle=Documentation

579 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 11:27:57.09 ID:9WnSpcyZ.net]
前thisなんてルール作ったところで
this付けなくてもエラーにもなんにもならないしルール違反コード探すのだって容易じゃない
そんなの全く意味ないんだよこのクソバカStyleCop



580 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 15:47:57.54 ID:ACUGT+cL.net]
_fooでもm_barでもthis.bazでも
それを強制されるのなら、コーディング規約としては大して変わらん気がするなあ

581 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 16:01:49.59 ID:ACUGT+cL.net]
あ、ごめん。this.じゃねぇ

582 名前:片山博文MZ ◆T6xkBnTXz7B0 [2016/03/25(金) 17:02:16.92 ID:C4e13KV/.net]
アンパンマン、新しい顔ができたよ!!!

Unboost --- Time to say good-bye to Boost
https://github.com/katahiromz/unboost

583 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 17:22:36.13 ID:ZbElIMvp.net]
g_とかm_とかクッソ気持ち悪い

584 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 17:55:35.65 ID:uQE9fwFQ.net]
前アンスコが一番素敵だワ

585 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 18:09:09.53 ID:i3XIX2iS.net]
_そ_う_お_も_う_

586 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 18:12:39.86 ID:i3XIX2iS.net]
しかし_を入力するとメンバ一覧が出てきて捗るなどという考えは皆無だな

587 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 18:24:41.23 ID:uQE9fwFQ.net]
>>586
ん?便利と思うよ。mでも何でもいいけど。
逆に不便なのが、IDEのコンストラクタやsetter/getter自動生成機能で_やmが関数名や仮引数名についちゃうところ。

588 名前:デフォルトの名無しさん [2016/03/25(金) 20:17:21.95 ID:CiUv48rG.net]
アンダースコアで始まる識別子がたくさん出てくるだけじゃあ






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<142KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef