C++相談室 part135

■ このスレッドは過去ログ倉庫に格納されています
2018/03/31(土) 20:20:06.25ID:o3PNwIlC0
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512

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

前スレ
C++相談室 part134
http://mevius.5ch.net/test/read.cgi/tech/1516406742/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1509780815/

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

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
2018/04/26(木) 21:06:11.37ID:HtO+dzj70
>>360
一応添削しておくと、

> 今読み込んでいるヘッダファイルがかつて読んだファイルと同じ実体かどうか、を決める方法は**基本的にない**
× 同じ実体かどうか、を決める方法は
○ 同じ実体かどうか、をパス等で決める方法は

ただし俺はそもそも「中身」を見て確認すべきで、同じ実体だったら云々、という話はしてない。
cp A.h B.h の場合にインクルードガードでBを弾くとして、
当然Bは「ファイルとしては」「読み込まれ」、「コンパイル対象としては」「読み込まれない」だろ。
#pragma once はインクルードガードの自動版なんだから、インクルードガードと同じ仕様でいいんだよ。
そして逆に、実体が異なっていてもこの場合はインクルードガードは利くのだから、#pragma once も利くべきなんだよ。
ファイルパスでの識別ではこれは実現不可能だろ。

>>369
意味不明。何も犠牲にするべき物は無いと思うが。
というかな、規格化するなら方向は自明で、

・#pragma once はインクルードガードの代わりに使われているのだから、
現行のインクルードガードを機械的に #pragma once に置き換えして問題ないように仕様化すべき

でしかないだろ。これで誰も文句ないと思うが。
2018/04/26(木) 21:07:21.99ID:OZbR3XDf0
>>374の心配があるんだったらクラスにしたって裏でthis渡すようになるだけだから一緒よ
ポインタ渡すコストが気になるならグローバル変数にするしかない

>>365のコードのままなら末尾再帰の最適化かかるだろうから問題にならんと思うけどな
379デフォルトの名無しさん (アウアウウー Sa45-luqG)
垢版 |
2018/04/26(木) 21:07:30.49ID:JC9sZU4oa
クラスを作ってそのプライベートなメンバ変数を、
ある関数内でのみ利用できるグローバル変数の
ような変数として使うというのは邪道でしょうか?
2018/04/26(木) 21:08:37.69ID:JC9sZU4oa
>>378

ありがとうございました。
2018/04/26(木) 21:51:10.65ID:HtO+dzj70
>>373
> ある特定の関数内でしか見えないグローバル変数のような変数というのはC++にありますか?
見た目だけの話ならラムダでキャプチャすればいい。(クロージャ)


ただ、今気づいたが、C++のラムダって名前付けられないから再帰できないね。
変数の直接呼び出しも試してみたが、以下は通らない。

auto f = [](int x) {return x? x+f(x-1) : x;};

なんでこんな糞仕様にしたんだ?
JavaScriptも当初はそうだったが、不便だったので名前が付けられるように変更した。
この変更を知ってて無視してるのなら頭おかしいし、
知らないのなら不勉強だし。(言語仕様に携わる奴は他言語の動向も見ておくべき)
名前を付けられて悪いことはないし、技術的に不可能って事も無いと思うが。
2018/04/26(木) 22:07:02.86ID:IAeApo/t0
ID:4xU9Va0kM=ID:HtO+dzj70

#include "X:\sandbox\aho.h"
#include "Y:\sandbox\aho.h"
これでどうなるかをC++の規格に定めるべきだと言っているのはおまえだけ

//X:\sandbox\some_app.cpp
#include "aho.h"
#include "some_lib.h"

//Y:\sandbox\some_lib.h
#include "aho.h"

おまえq文字列の解釈をまさか知らんのか?
2018/04/26(木) 22:34:27.88ID:4xU9Va0kM
>>353
反論されてぐうの音もでないのかよ
5チャンは初めてか? w
2018/04/26(木) 22:35:24.34ID:IAeApo/t0
>>383
全文そのまま返すわ
2018/04/26(木) 22:41:09.16ID:EM3O7qLA0
同じファイル
同じ中身

大きく分けて2種類あり、
それぞれ、同じの定義の詳細は色々と考えられる
2018/04/26(木) 22:45:45.22ID:4xU9Va0kM
>>382
> ID:4xU9Va0kM=ID:HtO+dzj70
勝手にアホな認定するんじゃねーよ
そもそも俺はハードリンクとかのファイルシステム依存の話は処理系依存にした方がいいって思う
2018/04/26(木) 22:46:56.42ID:4xU9Va0kM
>>384
人を嘘つき呼ばわりして謝ることもできない奴がなに言ってるんだよ w
2018/04/26(木) 23:09:17.34ID:IAeApo/t0
効いてる効いてるw
嘘つき呼ばわりじゃなく嘘つきという真実を指摘されてファビョーンかよ
おまえは考察自体を放棄した
この事実はどうにもならない
2018/04/26(木) 23:12:02.64ID:HtO+dzj70
>>381
自己レス。
すいません出来ました。以下通ります。autoは無理のようです。

std::function<int (int)> f = [&f](int x) {return x? x+f(x-1) : x;};

>>373
見た目だけなら、上記のようにラムダで再帰すれば書ける。
2018/04/26(木) 23:58:27.23ID:DklDUzVR0
またいつもの奴が暴れてるのか
相変わらず不毛な話してるな
2018/04/26(木) 23:59:44.22ID:DklDUzVR0
それで結局#pragma onceが採用されてこなかった理由はなんなん?
2018/04/27(金) 00:09:03.41ID:vLs/1v3E0
所詮 pragma だから
この部分は処理系依存が強く出るので
2018/04/27(金) 00:18:29.43ID:nldsEJyI0
>>388
>>351にまともな反論してから出直してこい w
2018/04/27(金) 00:25:32.85ID:ledFfOHm0
https://stackoverflow.com/questions/23696115/is-pragma-once-part-of-the-c11-standard
https://groups.google.com/a/isocpp.org/forum/#!topic/std-discussion/YG76sfDJ4f8
http://open-std.org/JTC1/SC22/WG21/docs/papers/2017/p0538r0.html

#pragma onceについて語りたい奴は必ず先に目を通すように
じゃないと上で騒いでる馬鹿みたいになっちゃうからな
395デフォルトの名無しさん
垢版 |
2018/04/27(金) 06:18:50.95
MSアレルギー
2018/04/27(金) 06:26:34.10ID:mlVlMuXl0
>>393
反論とは論に対して反駁することをいう
おまえは論を示していない
結果に至る思考過程をすっ飛ばしている

おまえこそ日本語を憶えてから出直して来い
もう一度言う、反論とは論に反駁することだ
2018/04/27(金) 06:41:55.40ID:O6TOHWbPM
まともに反論できないことはよくわかったよ w

事実を書いてあるだけで思考過程なんて関係ない
2018/04/27(金) 06:51:10.76ID:fIiVOejaM
天啓が下ったぞ!
2018/04/27(金) 07:38:07.75ID:ledFfOHm0
事実ってなんだよ
「アホは切り捨てろ!」とかいう標準規格として最低最悪の解決策を取れっていうのはお前のクソみたいな「意見」だろうが
お前の意見は必ず自動的に実現して事実になるの?神なの?
2018/04/27(金) 08:05:14.16ID:O6TOHWbPM
そういう意見を書いてあると言う「事実」な
マジで理解力無さすぎ w
2018/04/27(金) 10:03:10.93ID:mlVlMuXl0
>>397
それは違う
何からどう演繹した結果なのかを示さねば戯れ言に等しい
戯れ言でよければ過程は伏せたままでいいぜ
どーせそんなもんバカにはねえだろうがな
2018/04/27(金) 10:58:06.07ID:COWnkDW0d
>>400
じゃあ俺も、お前はここに二度と来ないでに全財産を福島と熊本に寄付した上で家族もろとも自殺するべきであると意見するわ
こういう意見を書いてあるという事実に反論できなければお前の負けな
2018/04/27(金) 12:28:04.63ID:O6TOHWbPM
>>401
お前が何を言っても>>339に書いた「無視」と言う文言を理解できなかった>>346がいたと言う事実は変わらない
しかも誤魔化すために話そらそうと必死な>>353がいた事実も変わらない

>>402
別に意見を言うのはいいんじゃね?
それに何の意味があるのか知らんけど w
2018/04/27(金) 12:30:27.46ID:Mg+ERRyAd
いつまでやるの?
2018/04/27(金) 12:42:19.37ID:COWnkDW0d
C/C++の規格はgets()とかいうアホな使い方しか出来ないアホ関数を30年も削除出来なかったくらいアホに気長に付き合う規格なんだよ
広く使われ続ける規格の宿命としてその方針は変えられない
だからお前の言うようなアホを無視して切り捨てるという選択肢が採用されることはないという事でこの話終わりな
2018/04/27(金) 14:52:44.93ID:mlVlMuXl0
>>403
もう一度言う
提示してねえだろ、おまえは無視つったんだよ

人をアホよばわりしようと焦るあまり
論議そのものを粗末に扱ったのが
おまえの運の尽きだ

そこでどんなに暴れようが
おまえは何も論じていない
よって論に反駁してもらえることもない
ましてや事実に反駁というシュールなことをする者もいない
2018/04/27(金) 16:36:21.86ID:j5Ya8YmN0
アホではないから残しているのでは
2018/04/27(金) 18:27:57.39ID:O6TOHWbPM
>>405
マジで言ってるの?
gets() なんてアホには使えない関数の典型だろ
バッファーオーバーフローはプログラマーの責任
って言う言語だぞ w
2018/04/27(金) 18:31:51.94ID:Q1GjkYeyr
>>376
言葉尻を捕まえて悪いが、クラスや関数を作ることをそう大仰に捕らえることはない。
単純な機能のクラスや関数など幾らでもある。
2018/04/27(金) 18:33:12.92ID:O6TOHWbPM
>>406
>>351を読み直せ
無視するのは誰で誰を無視するのかを答えてみ
まあ恥ずかしすぎて答えられないだろうからまた明後日の話に逸らそうとするんだろうけど w
2018/04/27(金) 19:01:47.01ID:mlVlMuXl0
>>410
読み直して欲しいのかよ
お願いしろよ
読み直してやるかも知んねーからw
2018/04/27(金) 20:31:10.54ID:nldsEJyI0
はい、基地害乙
2018/04/27(金) 20:33:29.96ID:HF3+Vuoyd
りかいできないならからんでくるなよダブリュー
「アホなりようしゃはあいてにしない(イコールむしする)」っていうしようを「ていじ」してるってはなしだ、ボケ
2018/04/27(金) 20:46:16.80ID:mctUhDKod
よくわからんが、糞コテの自演てこと?
2018/04/27(金) 23:50:18.78ID:mp1hh4hd0
C/C++は池沼お断りの言語なんだから、このスレも同じノリでいいと思うぞ。
指摘しても理解できないのは、日本語が出来ない=池沼だから。
慣れる慣れない以前の問題だ。
2018/04/28(土) 06:20:59.27ID:BHnoJcFn0
ていうか#pragma once規格化不能論者が言い立てる不可能ケースは
 (1) #ifdef〜#endifインクル〜ドガ〜ドでも曖昧さが残り処理系依存になるケース
 (2) #pragma onceで自動的にガード条件を設定する際の困難(#ifdef 〜の記号をうまい具合に考え出すことに相当
 (3) #ifdef〜#endifインクル〜ドガ〜ドにおける既存のアクロバティックな使い方への対応(>>361
 (4) #pragma onceで想定されるアクロバティックな使い方の解釈(>>321
のn種類しかない
(1)は#pragma once固有の問題ではないから、#pragma once規格化の障害とは言えない ハードリンクとかの件でここまで費やされた長い紙数はムダすぐる…
(2)と(3)は、#pragma onceが力量不足ならそのケースだけいつでも#ifdef〜#endifインクル〜ドガ〜ドに戻ることができる プリプロセッサの基本特性まで変えようというのではないのだから…
(4)はエラーにすればよい #pragma onceの解釈を単純な#ifdef〜#endifインクル〜ドガ〜ドの置き換えと限定するなら可能なはずや

いままで20数年にわたって規格化委員会で話題に上りながら規格化されないのは、
この件の抜本的な技術である「モジュール」の規格化が控えていると全員が錯誤していること、これにつきるだろうJK
2018/04/28(土) 06:57:19.27ID:ibkTuaSK0
>>416
とりあえず、
#pragma onceの仕様を文章にしてみて
そんなに簡単じゃないから
2018/04/28(土) 07:52:46.94ID:BHnoJcFn0
■ #pragma onceの俺様仕様
(ヘッダファイルの集合の規定)
1. インクルードされるヘッダファイルを#pragma once付きとそれ以外とする。
ただし、次のいずれかに該当する場合はエラーとする(ヘッダファイルに含めない)
(1) #pragma onceがコメントを除くファイル先頭に現れた場合
(2) #pragma onceがコメントを除くファイル先頭に現れ、かつ
ファイル内の#if〜#endifの入れ子がファイル内で完結しない

(ヘッダファイルの識別)
2. #pragma once付きのヘッダファイル同士は、ファイル名で識別する。(ディレクトリパスは無視)

(ヘッダファイルの展開)
3. #pragma once付きのヘッダファイルのうち、上記2の規則により同一と判定されるファイルは
  単一のコンパイルの中で、2回目以降の展開を無視する。

4. #pragma once付きでないヘッダファイルの展開は現行どおりとする。

いじょ
419デフォルトの名無しさん
垢版 |
2018/04/28(土) 07:55:01.29
>>418
#pragma onceってファイル先頭に置くものだと思ってた
ファイル末尾とかにおけばいいの?
2018/04/28(土) 07:56:19.92ID:zm4OWgENM
ソフトウェアが巨大化してくると、サブモジュールが各々同一のSDKを抱えてるなんてことがある。
複数のサブモジュールを読み込んでるソースコードは間接的に同一ヘッダを読み込む可能性があるが、
cvs等が異なるidを埋め込んでいたり、それぞれ微妙にバージョンが異なっていたり、エンコーディングや改行コードが異なっていたりする場合、
Includeガードならビルドできるが、pragma onceだと同一ヘッダを異なるファイルと認識してしまい、エラーになってしまったので、サブモジュールを全て自前で修正する羽目になった。


なんてことがあるかもしれない。
結局ヒューリスティックな実装しかないんでないの?
2018/04/28(土) 07:57:50.65ID:BHnoJcFn0
訂正;
誤: (1) #pragma onceがコメントを除くファイル先頭に現れた場合
正: (1) #pragma onceがコメントを除くファイル先頭以外に現れた場合
2018/04/28(土) 07:58:55.91ID:BHnoJcFn0
>>420
>>418の仕様によるヘッダファイルの展開のどこにヒューリスティック要素があるのかkwsk、
2018/04/28(土) 08:04:07.12ID:zm4OWgENM
>>418
>ファイル名で識別
過去遺産をすっぱり切り捨てる斬新な発想に目から鱗
2018/04/28(土) 08:05:18.62ID:BHnoJcFn0
>>423
藻前は>>418の仕様の項番4を理解していない
出直せ
2018/04/28(土) 08:15:15.14ID:zm4OWgENM
今後ヘッダファイル名にはドメイン名を頭につけなきゃいけないね。
メアドでもいいかな?
2018/04/28(土) 08:20:58.21ID:amQJLuCm0
>>417
適当な処理系の言語リファレンス見ればいいだけ
そんなに難しくはないぞ
2018/04/28(土) 08:24:01.11ID:WRqkde3l0
>>422
420が提起した問題に答えろ
kwskはそれからだ
428デフォルトの名無しさん
垢版 |
2018/04/28(土) 08:33:55.15
>>427
是非は置いといて、ファイル名で識別するって書いてあるじゃん
文盲なの?
2018/04/28(土) 09:13:26.88ID:clK1o5V+0
つまりfooSDK/interface.hとbarSDK/interface.hは同一として判定するんだな
たいへんだー
2018/04/28(土) 09:22:50.78ID:WRqkde3l0
結論を急ぐあまり考察が浅くなりすぎだな
2018/04/28(土) 09:23:37.16ID:ibkTuaSK0
#pragma onceの前に改行があったらエラーですかwww
2018/04/28(土) 09:27:57.75ID:amQJLuCm0
>>420
それ単に管理がなってないだけだろ
どのバージョンのヘッダーを読み込むかを管理できてないとか怖すぎる
2018/04/28(土) 09:34:33.18ID:WRqkde3l0
>>432
どう管理しろと?

混用しているライブラリに偶然同じファイル名があって
どちらもインクルードガードされているということを
「管理」で回避できるのか?
2018/04/28(土) 09:42:57.08ID:zm4OWgENM
>>432
えー、cvs keywordはどうするのー?
サブモジュールを格納してたリポジトリ毎に値が異なるよ?
自動的に改行コードを修正してくれるリポジトリの場合はー?
2018/04/28(土) 09:45:12.10ID:ibkTuaSK0
まずは世の中のプリプロセッサのpragma onceの仕様がどうなっているかを調べるべきかと
2018/04/28(土) 09:54:13.99ID:EXYGb8MJ0
具体的な話になったら一気にレベル下がったなw
2018/04/28(土) 10:21:03.59ID:amQJLuCm0
>>433
話の流れを理解せずに無駄に絡んでくるなよ...
インクルードガードならとりあえずビルドできるって言う話だぞ

>>434
同一のSDKなんだから同一のものを指すようにすればいいだけだろ
2018/04/28(土) 10:24:05.76ID:ibkTuaSK0
目的は
インクルードのループを防ぎたいのと
同じ定義を複数回行うことでエラーになるのを防ぎたい
ってことだよな

これをインテリジェントに行ってくれるのが理想

インテリジェントな物を仕様にするのは難しいし、
時代が進めばインテリジェント具合も変わる

>>418みたいなあまりにショボい仕様だと
後々不満が出ることになる
2018/04/28(土) 10:28:01.67ID:WRqkde3l0
>>437
答えになってないぞ
今 #pragma once について話しているよな
インクルードガードを #pragma once でやっていたらどうなんだ
2018/04/28(土) 10:28:57.76ID:BHnoJcFn0
>>429
>>434
現行のヘッダファイルでうまく行っているのならそのままでええ(>>418項番4はそのためにある
そうではなくて、もしも(例えば)マイクロソフトのVisual C++の#pragma onceを使って書かれた過去の遺産の尊重が大事なら
そのときは>>418の方の#pragma onceを#pragma once2とかに代えれば良いが
そりゃー(例えば)マイクロソフトのVisual C++の#pragma onceが先行して規格になった後の話なので今は無視

>>435
 >417からの流れと考え合わせるに、
「僕ちゃんの考えた理想の#pragma onceじゃないと嫌なの!!!>418のクソ単純な仕様は正しくとも認められん!!!」ってことですかそうですか…
なお>>431の指摘は評価する

>>436
抽象的な言い回しで無意味に高尚な議論に見せかけている連中の方が多数派
空っぽなのに…
2018/04/28(土) 10:29:34.95ID:ibkTuaSK0
当然互換性の問題もある
今まで動いていたものが正しく動かなくなるのであれば支持されない
だから>>435も非常に重要
2018/04/28(土) 10:33:35.22ID:BHnoJcFn0
>>441
時間差だったかもしれんが>>440の最初のパラグラフ参照

存在しない規格との互換性の問題を喚かないでいただきたい、というのはあるが
回避策も示しているのだからオール無問題
2018/04/28(土) 10:33:47.48ID:ibkTuaSK0
>>429の例で
2重インクルードを防ぎたい場合とそれぞれ別にインクルードしたい場合があるってのは書かなくてもわかるよな

中身が全く同じであれば防ぎたいし
全く別の定義であればそれそれぞれをインクルードしたい
2018/04/28(土) 10:35:03.59ID:ibkTuaSK0
>>442
#pragma onceの仕様はVisual C++しか実装してないと思ってる?
2018/04/28(土) 10:38:47.00ID:BHnoJcFn0
>>443
>>444
>2重インクルードを防ぎたい場合とそれぞれ別にインクルードしたい場合があるってのは書かなくてもわかるよな
ああ>>443の脳内にはそういう要求もあるんですねわかります
その場合は>>418項番4でドゾー

藻前ら>>418の単純さをバカにするが藻前らの論理展開のアレっぷりも相当なもんやぞ…
2018/04/28(土) 10:42:05.24ID:ibkTuaSK0
いずれにしろ>>418みたいなチープな仕様じゃ誰にも支持されない
2018/04/28(土) 10:45:00.58ID:WRqkde3l0
ツッコミ殺到でボコボコなのに勝利宣言してやがるな
つっこんだ人たち(ここのほぼ全員)にバレバレなのに滑稽な
2018/04/28(土) 11:10:27.31ID:ueAKslGb0
>>418,421はミニマムの仕様を提示しただけで、つまり、
この仕様で問題ない場合は #pragma once で手抜きが出来て、
無理な場合は従来通りインクルードガード使えってことだろ。

俺はありだと思うぜ。仕様ってのはこういう割り切り方をしないと決まらない。
C++のラムダなんて後付で仕様を拡張して行っているし。(このやり方がいいとは思わないが)
ただ、この仕様だと現行の #pragma once よりも割り切っているのがイマイチで、
「今」この仕様では却下されるだろう。
「#pragma once が全くない世界」なら、とりあえずここから出発するのもありだっただろう。

現行の #pragma once は常識的に考えて、
・ファイル実体が同じ場合(ハードリンク/シンボリックリンク)は対応可能
・コピーの場合(ローカルに xxx.h を tmp_xxx.h にしてデバッグ出力を改変したり)には対応不能
だろう。だから使用条件としては、
・全ファイルがローカルファイルシステム上にあり、ヘッダファイルの改変は行わない
であり、普通に個人レベルで開発する場合はこれで全く問題ないし、妥当だ。
会社で10-20人レベルで開発する場合、どのみちルールを子細に決めることになるし、
そういう場合は従来のインクルードガードでやれ、という割り切りも妥当だよ。
2018/04/28(土) 11:11:35.35ID:ueAKslGb0
なお俺が推す仕様は、

・#pragma once のファイル内では複数定義のエラーを無視する

というものだ。従って、
・現行の#pragma once とは違い、対象ファイルは必ず「ファイルとしては」「読み込まれる」
(これは現行のインクルードガードとも同じ)
・定義されている物のシグネチャが既に存在するものと全く同一だった場合、無視する。
・シグネチャが異なっている場合、普通に読み込む(コンパイル対象とする)
(勝手にデバッグ関数を追加されていた場合、その関数だけはコンパイルされる)
・#pragma once のファイルを全部パースし終わった際、「全部重複」「全部新規」ではなかった場合、警告を出す。
(正しく使えば「全部重複」「全部新規」のどちらかになる。
改変《追加》した場合は「一部新規」となり、警告にする。「一部欠落」は検知しない。)
というものだ。

この場合、要するに「読み込んで同じだったら無視」なので、
#ifdef 内等、かなりアクロバティックに使われても、問題なく、使用者の直感通りに動作する。
改行の追加、コメント変更等は全く問題ない。
ただし常に全部のファイルを読み込み、初段階のパースは行うことになるので、
現行の #pragma once やインクルードガードよりは速度は劣る。
とはいえ、今更ここが問題になる時代ではないし、問題になるようならインクルードガードを使えと割り切る。
つまり、面倒なら #include を使わずに、全部 #pragma once にも出来る、というもので、
実際これで問題無いと思うんだがな。
2018/04/28(土) 11:15:31.75ID:aIENMcPWd
もう書かなくて良いよ
アホだってこはみんなわかったから
2018/04/28(土) 11:18:31.52ID:aIENMcPWd
ヒント
インクルードループ
2018/04/28(土) 11:22:35.75ID:aIENMcPWd
インクルードのネストがn段
それぞれの段、m個のインクルードファイルからm個インクルードしてるとします

何パス必要でしょう
2018/04/28(土) 12:14:39.04ID:wZlaoeXA0
>(ディレクトリパスは無視)

現行の#pragma onceでこんな実装になってる処理系あるかなぁ
2018/04/28(土) 12:22:28.92ID:amQJLuCm0
>>439
日本語で桶
2018/04/28(土) 12:24:23.32ID:amQJLuCm0
>>438, >>446
> >>418みたいなあまりにショボい仕様だと
> 後々不満が出ることになる

でも具体的には指摘できない
ってか w
2018/04/28(土) 12:26:40.87ID:aIENMcPWd
具体的にたくさんあがってるのが見えないのかな
2018/04/28(土) 12:51:19.85ID:NasUyYi90
プリプロセッサが諸悪の根源
2018/04/28(土) 12:51:48.61ID:NasUyYi90
#define多いと読む気しない
2018/04/28(土) 13:09:32.49ID:amQJLuCm0
>>456
レス番も引用もできないクズ乙 w
460デフォルトの名無しさん (ワッチョイ 9391-/P+7)
垢版 |
2018/04/28(土) 14:18:44.28ID:0IOpQOT30
static変数(クラスのインスタンス)がプログラム実行時にそのメンバ関数呼び出し時にその中で、
newをすると既存のヒープ領域を破壊することはありますか?
どうもこのように解釈できる現象が起きているようなのですが、調べても分からずアドバイスを頂ければ幸いです。
環境はMacのHighSierra、コンパイラはbrewから持ってきたLLVMです。
2018/04/28(土) 16:33:32.77ID:ueAKslGb0
>>460
99%以上の確率であなたのバグです。
1行目の意味はよく分かりませんが。
2018/04/28(土) 16:51:34.89ID:ueAKslGb0
ああすまん、何となく1行目の意味は分かった。

・クラスインスタンスをstatic変数に入れ、そのメソッドを呼んだ

事をそう表現したのかな?
だったらはっきり言ってstatic云々関係ない。
GCなんて無いから「statc変数に入れたら忘れてGCされてしまう」みたいなことはそもそも無い。
ヒープを壊しているのはユーザーです。つーか、ランタイムもないし。


ガチでコンパイラのバグだと思っているのなら、
どのみち再現コード(その場合は20行程度か)を作るしかない。
その過程で君のバグだと気づけるだろうさ。
ただこのように「下から」デバッグをするのは時間がかかるから、俺は嫌いだけど、
君がそう思うのならやるしかない。
C/C++は広く長く使われて来ている言語だから、
現在もバリバリに使われているコンパイラなら、この辺の基本的な部分にバグは無いと思うよ。
static変数に確保するのはマイナーかもしれないが、滅多にやらないってほどではないし、
そもそも上記の通り、コンパイラにとって危険のある(バグに命中する可能性のある)使い方でもない。
2018/04/28(土) 16:59:13.74ID:9z8isRDe0
>>460
破壊って何?
2018/04/28(土) 17:20:06.35ID:aIENMcPWd
ふつうに、
クラスのインスタンスがstatic宣言と読んだけだ

static MyClass a;

スコープローカルかファイルローカルかはわからん
2018/04/28(土) 17:29:35.84ID:ueAKslGb0
>>450
>>464
日本語でおk
お前は半島に帰れ

>>452
それでお前は何パスだと思うのさ?

予言してやる。お前は言えない。
なぜならお前は馬鹿であり、それがばれるのが怖いから。
2018/04/28(土) 17:46:24.07ID:aIENMcPWd
おれは数学の専門家だぞ
わからないわけがない
2018/04/28(土) 17:46:53.04ID:aIENMcPWd
なぜ問題を出したのか考えてみ
2018/04/28(土) 18:39:11.84ID:ueAKslGb0
ひとまず俺の一つ目の予言は的中だな。
次に行こう。

>>467
ID:aIENMcPWd
お前の日本語の間違いをすべて訂正してみろ。

2つ目の予言をする。お前は言えない。
なぜならお前はゴキブリ韓国人であり、間違いを認識できていないから。
2018/04/29(日) 02:23:46.17ID:UY96NiMha
C++でプラットフォームに依存しない音楽再生ライブラリってある?特にlinuxで使いたいんだけど。
mpg123とかいうのもみてみたんだけどプログラムに組み込むやり方が分からない
2018/04/29(日) 02:25:23.22ID:kTR2ZRC/0
MIDAS
2018/04/29(日) 07:28:51.71ID:riHNUW7H0
Gstreamer
2018/04/29(日) 10:01:20.67ID:4Txko8z40
質問ですが
Q1.
浮動小数点型について表現しえる最小の値(負の値のうちの絶対値が最大のやつ)を取得する
環境非依存なやり方はどうすれば良いの?
-std::numeric_limits<double>::max()とか
-DBL_MAX
でおk?

Q2.
テンプレートを型引数が整数型と浮動小数点型で分けたいんですが
同じ名前のテンプレート名のまま、テンプレートの特殊化的な簡単に済ませる方法は無い?
2018/04/29(日) 10:55:07.91ID:6B047Ccs0
>Q2
template <typename T, bool = std::is_floating_point<T>::value>
struct hoge {};
template <typename T>
struct hoge<T, true> {};
2018/04/29(日) 11:05:23.85ID:iHQcqnOH0
>>472
>Q2.
こういう事?
https://ideone.com/oWzlMP
2018/04/29(日) 13:22:08.35ID:WuAwAiPA0
>>472
std::numeric_limits<double>::lowest()
2018/04/29(日) 13:56:48.76ID:4Txko8z40
まりがとうございます
>>473
>>475
すばらっし

>>474
言葉足らずでスマンカッタorz
具体的型名で特殊化する普通の特殊化ではfloatとdoubleのそれぞれについて特殊化した定義を与えねばならないので
>>473みたいなやつを求めていたのです!ヽ(>∀<)ノ!!!111!1!
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況