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


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

C++相談室 part129



1 名前:デフォルトの名無しさん(ワッチョイ dfcf-HvS5) mailto:sage [2017/01/09(月) 14:49:27.56 ID:p96WJVyd0.net]
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part128
echo.2ch.net/test/read.cgi/tech/1480172629/

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

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

[C++ FAQ]
https://isocpp.org/wiki/faq/
www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured

75 名前:デフォルトの名無しさん (ワッチョイ 326c-6SG4) mailto:sage [2017/01/13(金) 21:12:36.47 ID:eTv8M5MG0.net]
>>73
明らかにfriend不要になったでしょ
比較クラスが比較対象を継承してるのも意味不明
意味わからずコード書いてる感じがするから勉強し直したほうが良い気がする

76 名前:デフォルトの名無しさん (ワッチョイ c621-q48i) [2017/01/13(金) 21:30:49.97 ID:AzvsCcDE0.net]
すごいコードだ

77 名前:デフォルトの名無しさん (ワッチョイ 7e13-dHfL) mailto:sage [2017/01/13(金) 22:09:13.50 ID:nYJUER3p0.net]
>>74
ありがとうございます.
確かに例示としては
ideone.com/Hi50Xi
で十分でした.

しかし次の場合はどうでしょうか?
不適当とは思いながら CCompare を C の継承としましたが,それでも protected がききません.
ideone.com/XJbnUo

echo.2ch.net/test/read.cgi/tech/1480579110/96
を書いている際にぶつかった問題です.
よろしくお願いいたします.

78 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/13(金) 22:20:31.99 ID:76Aeg2JY0.net]
ああ、わかって来たぞ
void func()
{
static std::mutex mtx; // ←これ
...
}
このmtxの初期化を排他制御するために、非ローカルなstd::mutex生成して使うと言うお笑い提案か
目の付けどころが鴻海過ぎる

79 名前:デフォルトの名無しさん (ワントンキン MMe2-dqLr) [2017/01/13(金) 22:34:28.85 ID:8qb1acaCM.net]
>>77
何言ってるのかわかんねえわ。

80 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/13(金) 22:51:30.29 ID:76Aeg2JY0.net]
>>78
自分で言い出したんだろ
>>65

81 名前:デフォルトの名無しさん (ワッチョイ f330-emOI) mailto:sage [2017/01/13(金) 22:59:08.33 ID:ByW8JYfQ0.net]
>>76
CCompareがアクセスできるのは自身のメンバとしてのa,bだから

概念的にいうならCCompareが持っているのはCから継承した自身のメンバ
CCompare::a,CCompare::bへのアクセス権であって
C::a,C::bへの直接のアクセス権を持っているわけではないから

82 名前:デフォルトの名無しさん (ワントンキン MMe2-dqLr) [2017/01/13(金) 23:18:01.19 ID:8qb1acaCM.net]
>>79
関数ローカルのstaticなstd::mutexをなぜmutexで保護しようとしたのかサッパリとわかんねえって言ってんの。
ランタイムライブラリとstd::mutexのデフォルトコンストラクタがconstexprである関係性の説明一つもないし相手しても出てこないって解ったから相手するのやめるよ。
最初から最後まで何が言いたいのか一ミリもわかんなかったわ。

83 名前:デフォルトの名無しさん (ワッチョイ 7e13-dHfL) mailto:sage [2017/01/13(金) 23:21:37.61 ID:nYJUER3p0.net]
>>80
map や priority_queue にあたえる比較関数オブジェクト(CCompare) の中に,
別のクラス(例では C) の private/protected をアクセスすることはできないのでしょうか
なんとかならないでしょうか



84 名前:デフォルトの名無しさん (ワッチョイ f330-emOI) mailto:sage [2017/01/13(金) 23:59:19.90 ID:ByW8JYfQ0.net]
>>82
一般的には真っ当やり方ではどうにもならない
>>76のケースならCとCCompareのunionを使って真っ当にどうにかなるのかもしれない

85 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/14(土) 00:05:54.36 ID:8QfSwFFH0.net]
>>81
関数ローカルなstatic変数の初期化は排他制御しなけりゃならない
これはOKかな?
その排他制御にstd::mutexを使えというお笑い提案が>>45

86 名前:デフォルトの名無しさん (スプッッ Sdf2-gTkB) mailto:sage [2017/01/14(土) 00:37:53.00 ID:rG4STkB+d.net]
>>84
ランタイムライブラリじゃなければならない理由を説明するつもりならコード書いて例示すればいいんじゃないの?
断片的なコメント書くよりわかりやすいと思うぞ

87 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/14(土) 00:42:02.10 ID:Q3G32+hm0.net]
>>85
関数ローカルのstatic変数の初期化を排他しなきゃいけないなんて言ってるバカを相手にしちゃいけないよ

88 名前:デフォルトの名無しさん (ワッチョイ b633-zxSj) [2017/01/14(土) 00:47:15.28 ID:/xjCjFtE0.net]
>>82
#define private public
#define protected public

異論反論は勿論認める。

89 名前:デフォルトの名無しさん (ワッチョイ b633-zxSj) [2017/01/14(土) 00:51:08.04 ID:/xjCjFtE0.net]
あ、コード見てなかった。
ネタにもなって無かったわ…ごめん。

90 名前:デフォルトの名無しさん (ワッチョイ 3290-V/2k) mailto:sage [2017/01/14(土) 01:17:03.19 ID:RBO90iTA0.net]
質問ですが、mapやunordered_mapの[]演算子が非constしか用意されていないのは
何か理由があるんですか?

91 名前:デフォルトの名無しさん (ワッチョイ f330-emOI) mailto:sage [2017/01/14(土) 01:39:44.07 ID:mg/r9n9z0.net]
>>89
指定したキーに対応する要素が存在しないときは新たに要素を作成するから

92 名前:デフォルトの名無しさん (ワッチョイ b633-zxSj) [2017/01/14(土) 01:40:54.24 ID:/xjCjFtE0.net]
>>89
そのキーが存在しなくても、自動的に追加する仕様だから、const にはできない。

93 名前:デフォルトの名無しさん (ワッチョイ 4f04-lw3D) [2017/01/14(土) 02:18:12.38 ID:kOBEZk8k0.net]
static変数の話の戻るんですけど、非ローカルstatic変数は生成/開放順序が不定
だから、使うな(googleスタイルガイド)やstaticローカルの参照にしろ(effective c++)
は言っているわけですけが、非ローカルstatic constexpr変数なら問題ないですよね?



94 名前:デフォルトの名無しさん (ワッチョイ 3290-V/2k) mailto:sage [2017/01/14(土) 02:22:43.34 ID:RBO90iTA0.net]
ありがとうです
仕様がそうなっているからですか
わざわざatが用意されているのもそれが理由なんですね

95 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/14(土) 02:59:59.47 ID:Q3G32+hm0.net]
>>92
変数にconstexpr付けたらコンパイル時定数になるから実行時の初期化とは無縁

96 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/14(土) 08:04:44.63 ID:8QfSwFFH0.net]
>>94
あーあ、はいはい

3.7
The zero-initialization (8.5) of all block-scope variables with static storage duration (3.7.1) or thread storage
duration (3.7.2) is performed before any other initialization takes place.
Constant initialization (3.6.2) of a block-scope entity with static storage duration, if applicable, is performed before its block is first entered.

97 名前:デフォルトの名無しさん (ワッチョイ 328e-U8Ig) mailto:sage [2017/01/14(土) 08:14:50.33 ID:4HVF8lbq0.net]
話の前提(規格と実装)がずれてるような気がしなくもない

98 名前:デフォルトの名無しさん (ワッチョイ 3298-los8) [2017/01/14(土) 08:16:06.74 ID:BjO/qPFR0.net]
>>91
正確にはconstにできないのではなく、
constにするのは良心が咎める、だろ
データの実体はthisに指されていないわけで

99 名前:デフォルトの名無しさん (ワッチョイ f642-SV1A) mailto:sage [2017/01/14(土) 11:01:30.33 ID:f29MAUgw0.net]
>>76
protectedなんて使うな、あんなもんpublicと一緒だ

いくつかそれっぽいの書いてみたから好きなの使え
ideone.com/GkUTFI
ideone.com/IvYKWe
ideone.com/ZrgkZM

100 名前:デフォルトの名無しさん (ワンミングク MMe2-SV1A) mailto:sage [2017/01/14(土) 13:46:51.12 ID:TZ84v9ShM.net]
心が洗われるようなコード

101 名前:デフォルトの名無しさん (ワッチョイ b2ac-vSov) mailto:sage [2017/01/14(土) 15:44:02.75 ID:SDa1ObQ20.net]
struct A {
int value;
};

auto p1 = new A;
auto p2 = new A();

cout << p1->value << endl; // <- 不定
cout << p2->value << endl; // <- ゼロ

この挙動の違いは規格のどの部分で定義されてるんじゃろ?

102 名前:デフォルトの名無しさん (ワッチョイ d3c9-U8Ig) mailto:sage [2017/01/14(土) 15:59:48.64 ID:kCGGguyq0.net]
規格を読まずに言うと8.5p11

103 名前:デフォルトの名無しさん (ワッチョイ d3c9-U8Ig) mailto:sage [2017/01/14(土) 16:00:41.57 ID:kCGGguyq0.net]
嘘を言った
8.5までわかっていて、規格を見たら段落11だった



104 名前:デフォルトの名無しさん (ワッチョイ 7e13-dHfL) mailto:sage [2017/01/14(土) 17:01:56.80 ID:pjYHXW8Q0.net]
>>98
ありがとうございます.C++11以降の新鮮な書き方ですね
個人的には3番目のラムダ式のものが分かりやすくていいと思いました
using 文を名前スペース以外に使う方法って,なんていうのですか?詳しく調べたいと思います.

105 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/15(日) 12:13:55.44 ID:OwCHVx6x0.net]
>>92 がバカに騙されてないか少しだけ心配

106 名前:デフォルトの名無しさん (オイコラミネオ MMce-mZvv) [2017/01/15(日) 12:52:42.89 ID:oZyLvSNYM.net]
>>104
何も考えんとアホみたいにstatic使ってるやつよりマシやろ

107 名前:デフォルトの名無しさん (ワッチョイ d3c9-U8Ig) mailto:sage [2017/01/15(日) 13:12:23.80 ID:n2HQszSv0.net]
マシかどうかではなく問題の有無で語るべきではないか

108 名前:デフォルトの名無しさん (オイコラミネオ MMce-mZvv) mailto:sage [2017/01/15(日) 13:19:44.69 ID:oZyLvSNYM.net]
>>94
みたいな回答がついてそれに
>>95
とツッコまれるくらいの問題はあるやろ

109 名前:デフォルトの名無しさん (ブーイモ MM8b-STcG) mailto:sage [2017/01/15(日) 13:41:07.01 ID:gYQA4gmtM.net]
「コンパイル時に定数として評価される」ことと「コンパイル時に解決される」ことを混同している人は結構いると思う。

110 名前:デフォルトの名無しさん (ワンミングク MMe2-SV1A) mailto:sage [2017/01/15(日) 13:50:38.16 ID:dIwTpKXnM.net]
>>108
どうちがうの?

111 名前:デフォルトの名無しさん (アウアウカー Sa5f-YGRn) mailto:sage [2017/01/15(日) 14:48:53.66 ID:Vh4eztBka.net]


112 名前:デフォルトの名無しさん (ワッチョイ b2cf-YL17) mailto:sage [2017/01/15(日) 16:26:13.53 ID:6tnmROhD0.net]
>>95
それ C++14 の 6.7p4 ね。で、 3.6.2 p2 にこんな規定もある。
> Together, zero-initialization and constant initialization are called
> static initialization; all other initialization is dynamic initialization.
> Static initialization shall be performed before any dynamic initialization
> takes place.
だから>94の言う「実行時の初期化とは無縁」というのは間違ってないと思う。

あと、ここらへんの文面が C++14 の後に変わってて、>95の引用した文面は消えてる。
wg21.cmeerw.net/cwg/issue2026

113 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/15(日) 20:39:17.85 ID:T6BZe6fz0.net]
>>111
3.6.2のタイトルを1000回音読してから出直してくれたまえ



114 名前:デフォルトの名無しさん (ワッチョイ b2cf-YL17) mailto:sage [2017/01/15(日) 20:51:15.65 ID:6tnmROhD0.net]
>>112
3.6.2 Static initialization [basic.start.static]
で、これ読んだら話がどう変わると思ってるの?

115 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/15(日) 21:57:06.54 ID:T6BZe6fz0.net]
>>113
なるほど、名前も変えるの見落としてた
なんか支離滅裂な提案してるなと、読み込みを本能的に拒絶してた

>>94が正しくなるということだね
>>86みたいな電波とばしてるからマグレ当たりだろうけど

116 名前:デフォルトの名無しさん (ワッチョイ b2cf-YL17) mailto:sage [2017/01/15(日) 22:22:21.32 ID:6tnmROhD0.net]
>>114
名前?提案?いったい何の話?

>46 からずっと、ほとんど何言ってるのかわかんなくてこわい。
もうちょっと伝わる文面にしてもらえないものか。


あと、「>>94が正しくなる」じゃなくて現行の C++14 でも正しいよ。

117 名前:デフォルトの名無しさん (ワッチョイ 3298-los8) [2017/01/15(日) 22:24:11.33 ID:RPIsJnBb0.net]
>>108
今現在の流れにどんな関係があるんだ?
constexprの効力は最適化と関係ないぞ

118 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/15(日) 22:39:13.98 ID:OwCHVx6x0.net]
>>115
少しでも解るなら凄いよ…
俺全く理解出来ないからスルーすると決めたもの。

119 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/15(日) 22:49:15.83 ID:OwCHVx6x0.net]
デタラメばかり言ってるから流石にもう騙される人は居ないと思うけど、一応関数ローカルなstatic変数の初期化タイミングに排他必要ないという記事張っとくよ
ググって日本語で一番上にでた記事だよ

d.hatena.ne.jp/yohhoy/touch/20120309/p1

120 名前:デフォルトの名無しさん (ワッチョイ 3298-los8) [2017/01/15(日) 22:54:49.73 ID:RPIsJnBb0.net]
ggrを最高神とあがめる信者か
採用1年目からアレをやらされるとそうなるかねえ

121 名前:デフォルトの名無しさん (ワッチョイ 0fc9-U8Ig) mailto:sage [2017/01/15(日) 23:01:04.84 ID:Ah8VE8+/0.net]
読点の前に書かれているように
読点の後を鵜呑みにするか試しているのではないか

122 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/15(日) 23:02:17.22 ID:OwCHVx6x0.net]
>>119
検索したらすぐ解ることを読めもしない規格だけ読んで間違って解釈するやつの前でそんな事言えんの?
残酷な奴だな

123 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/15(日) 23:02:52.43 ID:T6BZe6fz0.net]
>>118
そこにも日本語で解説してあるだろ

> gcc 4.0.0から既定動作でスレッドセーフなコードが出力される。(自動的に排他制御コードが埋め込まれる。)

これは最初から言っている(>>24)



124 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/15(日) 23:08:33.39 ID:OwCHVx6x0.net]
>>122
いや、そんな事十分に理解しておりますよ。
自分で排他制御を書く必要ないって書くべきだったか?

どこぞのレスで
> >>86みたいな電波とばしてるからマグレ当たりだろうけど

って書いてるからそれに騙されてる人が居ないか心配で書いただけだよ

125 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/15(日) 23:14:37.92 ID:T6BZe6fz0.net]
>>123
はあ? 自分で排他制御なんてどうやって書くんだよ
バカも休み休み言え

126 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/15(日) 23:20:48.48 ID:OwCHVx6x0.net]
それは
>>84
に言えよ
ってやべー間違ったわアンカー付けたの触ったらダメな奴だった

127 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/15(日) 23:25:26.18 ID:T6BZe6fz0.net]
>>115
>あと、「>>94が正しくなる」じゃなくて現行の C++14 でも正しいよ。

現行はこれだろ
> Constant initialization (3.6.2) of a block-scope entity with static storage duration, if applicable, is performed before its block is first entered.
つまりブロックスコープのstatic storage durationな変数はそのブロックに最初に入る時に初期化、すなわち実行時

128 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/15(日) 23:30:17.30 ID:T6BZe6fz0.net]
>>125
>>45
> gcc 4.0.0から既定動作でスレッドセーフなコードが出力される。(自動的に排他制御コードが埋め込まれる。)
こう言う自動的に埋め込まれる排他制御にstd::mutex使えなんて愉快な提案してしたんだろ

> ひんとstd::mutexのコンストラクタはconstexpr修飾されてる

129 名前:デフォルトの名無しさん (ワッチョイ b2cf-YL17) mailto:sage [2017/01/15(日) 23:35:49.06 ID:6tnmROhD0.net]
>>126
before は「前」って意味ね。ブロックに入る「時」とまでは限定されてない。

同時に、定数初期化(を含む静的初期化)はあらゆる動的初期化より前に行われる
とする規定があるのは>>111で挙げたとおり。

これにより、動的初期化(実行時の初期化)との間で順序が問題になることはない。

130 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/15(日) 23:42:21.31 ID:OwCHVx6x0.net]
>>92
の質問が

>非ローカルstatic constexpr変数なら問題ないですよね?

だからブロックスコープの話ですら無いんだけどね。

131 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/16(月) 00:16:22.26 ID:4D4bT+Tb0.net]
>>128
ブロックに入る前なので、「実行時の初期化とは無縁」じゃ無いだろ

あと、>>111に書かれてるのは現行は
3.6.2 initialization of non-local variables
の規定だね

132 名前:デフォルトの名無しさん (ワッチョイ 3298-los8) [2017/01/16(月) 00:21:18.11 ID:UB1GTfE40.net]
>>121
すぐ解ることって自分で言いながら読めもしないって
言ってる意味わかんねえぜ
検索と規格のどっちが難しいかも逆に認識してるみたいだし
まあ1年目に魔改造されたアタマっちゃそれらしいが

133 名前:デフォルトの名無しさん (ワッチョイ b2cf-YL17) mailto:sage [2017/01/16(月) 00:39:27 ]
[ここ壊れてます]



134 名前:.16 ID:5OapSwc60.net mailto: >>130
ブロックに入る前、且つ、すべての動的初期化より前、だから「無縁」でもいいんじゃないの?
ローカル static constexpr 変数について初期化順の問題が起こり得るというなら、コード例
出してみてよ。

>>114 の「名前」は 3.6.2 のタイトルのこと言ってたのか。ようやくわかった。
でも 3.6.2 のタイトルがどうあれ、>>126 で引用した箇所にある "Constant initialization" の
定義は 3.6.2 によるんだから、話は変わらないよ。

誤解を招くタイトル含め文面がマズいのは認めるけど、だからこそ本来の意図に沿うように修正
されたんだろうし。
[]
[ここ壊れてます]

135 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/16(月) 00:44:11.56 ID:4D4bT+Tb0.net]
>>129
実行時の初期化とは無縁の理由として
> 変数にconstexpr付けたらコンパイル時定数になる
をあげている(ローカルでもコンパイル時定数になる)

ところが、コンパイル時定数であってもブロックスコープのConstant initilizationは実行時初期化(ブロックに入る前)なので間違い

136 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/16(月) 01:02:26.19 ID:4D4bT+Tb0.net]
>>132
6.3.2を参照してるのはConstant initializerの定義だけ、
その初期化が行われるタイミングは6.7に書かれている通りブロックに入る前
ロード後、プログラムに制御が移る前かもしれないし、mainが呼び出された後かもしれない

137 名前:デフォルトの名無しさん (ワッチョイ b2cf-YL17) mailto:sage [2017/01/16(月) 01:17:19.08 ID:5OapSwc60.net]
>>134
Constant initializer じゃなくて

138 名前: Constant initialization の定義ね。
その Constant initialization に対する規定がローカル static の場合だけ
無視できるとする根拠が何かあるの?
[]
[ここ壊れてます]

139 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/16(月) 02:10:36.59 ID:4D4bT+Tb0.net]
> その Constant initialization に対する規定がローカル static の場合だけ
> 無視できるとする根拠が何かあるの?
6.7で参照してるConstant initializationは
3.6.2のConstant initialization is performed:の下で3つ列挙されてる部分
定義であって、初期化のタイミングは参照していない それぞれに別の記述がある

タイミングは何度も引用してるけど6.7は
> Constant initialization (3.6.2) of a block-scope entity with static storage duration, if applicable, is performed before its block is first entered.

3.6.2は
> Together, zero-initialization and constant initialization are called static initialization; all other initialization is dynamic initialization. Static initialization shall be performed before any dynamic initialization takes place.

140 名前:デフォルトの名無しさん (ワッチョイ b2cf-YL17) mailto:sage [2017/01/16(月) 02:53:47.44 ID:5OapSwc60.net]
>>136
別の記述があることが根拠?
それら2つの規定の両方が適用され得るだろうと言ってるんだけど、
なんでどっちか片方しか適用されないと思ってるの?

A ⊃ B の場合に A に対する規定が B にも及ぶってことを認めないの?
(この場合は A = "Constant initialization", B = "Constant initialization of a block-scope entity")

141 名前:デフォルトの名無しさん (オッペケ Sr37-U8Ig) mailto:sage [2017/01/16(月) 07:40:40.27 ID:a6XjHitHr.net]
>>137
>>134の主張は3.6.2, 6.7のどちらとも矛盾しないように見えるのだが

142 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/16(月) 08:43:01.09 ID:4D4bT+Tb0.net]
むしろ
3.6.2 initialization of non-local variables
と、明確に分けられてる項の規定が全部適用されると言ってるのが不思議過ぎる

wg21.cmeerw.net/cwg/issue2026もバグ指摘されてるし、前途多難だ

143 名前:デフォルトの名無しさん (ワッチョイ b2cf-YL17) mailto:sage [2017/01/16(月) 09:38:47.49 ID:5OapSwc60.net]
>>138
タイミングについての言及だけ読めばそうだけど、彼は 3.6.2 にある静的初期化一般に対する規定が
ローカル static の場合に限っては及ばない、とする主張をしている。


新しい理由付けも出なくなって平行線みたいだし、次期規格ではざっくり改定される文面の話だし、
もういいかな。



144 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/16(月) 10:48:30.43 ID:4D4bT+Tb0.net]
3.6.2のnon-localに関する規定は6.7で「そのブロックに入る前」と上書きされてるだろ
3.6.2がlocal, non-local問わずに有効なら「そのブロックに入る前」と言う規定は矛盾する

145 名前:デフォルトの名無しさん (スプッッ Sdf2-9KqD) [2017/01/16(月) 11:01:51.83 ID:ULOq3Vpcd.net]
https://cpprefjp.github.io/reference/atomic/atomic.html
atomicを使ったspinlockなるmutexの例があるのですが
これを再帰ロック可能なrecursive_spinlockにするには
どのように実装すればいいですか。

146 名前:デフォルトの名無しさん (オッペケ Sr37-U8Ig) mailto:sage [2017/01/16(月) 19:11:32.79 ID:a6XjHitHr.net]
>>141
「ブロックに入る前、且つ、すべての動的初期化より前」
規格がUNKOなのはさておき、論理的にどこも矛盾していないのでは?

147 名前:デフォルトの名無しさん (ワントンキン MMe2-dqLr) [2017/01/16(月) 19:40:06.27 ID:LWQyQSVNM.net]
仮にブロックスコープのconstexpr変数が実行時に初期化されたとして、どんな問題が発生するという主張なん?

148 名前:デフォルトの名無しさん (ワッチョイ 3298-los8) [2017/01/16(月) 22:29:50.06 ID:UB1GTfE40.net]
翻訳時に評価せよと指定したものが
実行時に評価されるようなら
コンパイラを窓から投げ捨てて
アセンブラか機械語を使うしかない

int main() { return 1; }で0を返されるのと同じで
もはや何を言っても無駄、根本的に話にならないということ

149 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/16(月) 23:04:39.73 ID:4D4bT+Tb0.net]
>>145
初期化の意味がわからない子は参戦しないように

150 名前:デフォルトの名無しさん (オッペケ Sr37-U8Ig) mailto:sage [2017/01/16(月) 23:23:13.66 ID:+uglxnZcr.net]
>>144
特に実害はなくても>>94の『実行時の初期化とは無縁』が真実でないことを問題と考える者がいるのだと思っていた

151 名前:デフォルトの名無しさん (ワントンキン MMe2-dqLr) [2017/01/17(火) 03:28:47.43 ID:tvPWGsMMM.net]
なんというか糞の役にもたたんな
今現在そんな実装のコンパイラがあるわけでもなし、今から実装するにしてもわざわざ複雑にして実行速度落とすような実装にするとも思えないし

152 名前:デフォルトの名無しさん (ワッチョイ a258-rG+u) mailto:sage [2017/01/17(火) 04:25:31.38 ID:ngprCvv90.net]
最近猫でもわかるって奴読んで独学でちょくちょく勉強してんだけど、こんまま独学でプログラミング学んでったらオセロくらいなら作れるようになる?どんくらいかかるかな

153 名前:デフォルトの名無しさん (ドコグロ MM0a-8ZdN) mailto:sage [2017/01/17(火) 07:56:18.72 ID:ueZ17iDzM.net]
>>144
組み込みじゃ、ROMになるかRAMになるか大きな違いが出るな



154 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/17(火) 13:27:45.10 ID:mkv39b380.net]
>>150
constすら付けなくても初期値が決まっていて変更する可能性のあるコードが無ければ最適化で定数に置き換えられる時代にそんな事気にするんだ?

155 名前:デフォルトの名無しさん (ワッチョイ b624-los8) [2017/01/17(火) 13:30:54.01 ID:Pbl2vPGV0.net]
>>146
おい間抜け
どこかに初期化って書いてあったか?
人を小馬鹿にしたつもりだろうがブーメラン刺さってるぞw

156 名前:デフォルトの名無しさん (ワッチョイ 3e5b-vSov) mailto:sage [2017/01/17(火) 22:57:29.19 ID:FvzokP9y0.net]
>>149
オセロくらいなら excel と vba で一週間くらい集中すればできんじゃないかね。

157 名前:デフォルトの名無しさん (ワッチョイ 4f17-0Plu) mailto:sage [2017/01/18(水) 01:28:58.03 ID:9W34sy+b0.net]
>>153
アスペ

158 名前:デフォルトの名無しさん (ワッチョイ 6296-8ZdN) mailto:sage [2017/01/18(水) 01:54:34.51 ID:an9uI7uk0.net]
>>151
定数が実行時に初期化されれば、それはROMじゃなくてRAMに配置されてるってことだろ?そりゃ組み込みなら気にならないほうがおかしい

159 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/18(水) 02:36:42.52 ID:n1DpjkbT0.net]
>>155
int f(){static int v=5;return v;}

int f(){return 5;}
が最適化後は一緒になるって言ってんの。
そして
static constexpr int v=...;
にしたらそのvの初期化値はコンパイル時に求まるし変更出来ない。ここまで言えば最適化後にどうなるか解るよね?
まぁ、constexprの場合は最適化しなくてもなんだけどさ

160 名前:デフォルトの名無しさん (ワッチョイ b2cf-YL17) mailto:sage [2017/01/18(水) 03:40:09.16 ID:2vnfhfI50.net]
>>156
>>150>>144の言った「仮に・・・」へのレスなんだから現実のコンパイラがどうなってるかは関係ないと思われ

161 名前:デフォルトの名無しさん (ドコグロ MM9f-lGK7) mailto:sage [2017/01/18(水) 07:14:44.33 ID:KfZHaLf7M.net]
定数であることと ROM に置くかどうかは別の話だし

162 名前:デフォルトの名無しさん (ワッチョイ 573c-U8Ig) mailto:sage [2017/01/18(水) 08:00:45.61 ID:+X3tak3t0.net]
>>156
>最適化後は一緒になるって言ってんの
デバッグ中の挙動を無視されると困ります

163 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/18(水) 08:42:08.41 ID:n1DpjkbT0.net]
>>157
ごもっとも。規格がどうかも関係なかったね。
>>159
なんで?



164 名前:デフォルトの名無しさん (ブーイモ MMd2-a69X) mailto:sage [2017/01/18(水) 08:52:41.79 ID:ZS0nd/enM.net]
>>158
定数であるからromにも置けるって話なんで関係ない訳がない。

165 名前:デフォルトの名無しさん (ドコグロ MM4e-lGK7) mailto:sage [2017/01/18(水) 18:41:42.82 ID:Abs9KEqJM.net]
>>161
> 定数であるからromにも置ける
だからと言ってROMに置くとは限らない
って話なんだがお前には難しすぎたか?

166 名前:デフォルトの名無しさん (アウアウカー Sa5f-YGRn) mailto:sage [2017/01/18(水) 21:27:37.78 ID:4GI0Tt+ca.net]
このスレを見て、C++って永遠に喧嘩できて寂しくない言語だと判った

167 名前:デフォルトの名無しさん (ワッチョイ 3e5b-vSov) mailto:sage [2017/01/18(水) 21:56:10.60 ID:qB5vepR/0.net]
こういうやりとり見てるとやっぱリーナスの c++観は正しいなと思う。

168 名前:デフォルトの名無しさん (ブーイモ MM8b-a69X) mailto:sage [2017/01/18(水) 23:18:53.09 ID:0GLHJE+5M.net]
>>162
置けるってのは置くこともできるって意味だが、随分日本語不自由なやつだな

169 名前:デフォルトの名無しさん (ドコグロ MM7f-j6UX) mailto:sage [2017/01/19(木) 06:46:32.74 ID:JadLiFtgM.net]
>>165
> 随分日本語不自由なやつだな
「置ける」と言う可能性の話と「置く」と言う実際の動作の区別がつかない奴に言われても...
でっかいブーメラン乙としか言いようがないわな w

170 名前:デフォルトの名無しさん (ワッチョイ 037b-rTuY) [2017/01/19(木) 06:57:37.47 ID:bO+XZlhy0.net]
何を言い争ってんのか解らん
直値でもROMに置けると言えるだけでなんの違いも無いんだが。

171 名前:デフォルトの名無しさん (ワッチョイ 637b-voKO) mailto:sage [2017/01/19(木) 08:39:21 ]
[ここ壊れてます]

172 名前:.82 ID:4Gh/dudO0.net mailto: >>152
初期化==評価と考えてなけりゃ >>145は出てこねーんだよ バーカ
[]
[ここ壊れてます]

173 名前:デフォルトの名無しさん (スプッッ Sd1f-xrkK) [2017/01/19(木) 10:16:43.40 ID:CldDY8MLd.net]
int a=100;
int&& b=std::move(static_cast<int>(a));
b=200;
aは100、bは200になるのですが
キャストすると必ず一時オブジェクトが生成されるのでしょうか
環境によってaもbも200になったりしますか。



174 名前:デフォルトの名無しさん (ワッチョイ ffcf-JQ1R) mailto:sage [2017/01/19(木) 10:39:40.20 ID:gPdsJo1i0.net]
>>169
必ず生成される。
https://timsong-cpp.github.io/cppwp/n4140/expr.static.cast#4

175 名前:デフォルトの名無しさん (スプッッ Sd1f-xrkK) [2017/01/19(木) 10:50:03.86 ID:CldDY8MLd.net]
わかりました






[ 続きを読む ] / [ 携帯版 ]

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

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