X



C++相談室 part135
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん (ワッチョイ 5fcb-q1Nq)
垢版 |
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
0808デフォルトの名無しさん (ワッチョイ 057f-Je+M)
垢版 |
2018/05/16(水) 23:25:18.23ID:cmH84vOv0
arrayはなんで[]でチェックしてくれないの
0810デフォルトの名無しさん (ワッチョイ 0db3-A9b3)
垢版 |
2018/05/17(木) 02:43:52.94ID:vEqyw0xg0
C++のコストの大部分は例外に起因するらしい。
Cでコンパイルできるコードであっても、C++としてコンパイルするとバイナリが肥大化する。
その原因は例外。
0814デフォルトの名無しさん (スップ Sdfa-D7Hy)
垢版 |
2018/05/17(木) 14:51:21.43ID:T9EnGAyld
x86-32だと割り込み発生時に対応出来るように
関数コールの度にスタックに情報を埋め込む

x86-64はこれが不要
割り込み処理がなければコストはかからない
0815デフォルトの名無しさん (ワッチョイ 0db3-A9b3)
垢版 |
2018/05/17(木) 18:56:39.80ID:vEqyw0xg0
>>813
組み込み開発の株式会社○○みたいなサイトで読んだんだけどな。
なかなかためになる内容だったしブックマークしとくんだった。
見つけたらリンクくれ。
0816デフォルトの名無しさん (ワッチョイ 0db3-A9b3)
垢版 |
2018/05/17(木) 18:58:28.25ID:vEqyw0xg0
俺の見解では、例外にコストが割かれるなら、それは必要なコストだと思うんだよな。
0818はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ae6f-HRP5)
垢版 |
2018/05/17(木) 19:46:45.63ID:oI1zc+Au0
>>816
例外を使うならコストがかかるのは当然なんだが、
例外が通過しないかもしれないのにそこかしこで情報を積まないといけないのは良くないってことなんよ。
そんでまあ例外を投げたときだけにコストが生じる方式がいいよねっていう話。
0821デフォルトの名無しさん (ワッチョイ 0db3-A9b3)
垢版 |
2018/05/17(木) 20:38:19.60ID:vEqyw0xg0
64ビット化するとサイズが1.5倍になるらしいけどな。
0823デフォルトの名無しさん (ワッチョイ 0db3-A9b3)
垢版 |
2018/05/17(木) 21:11:41.72ID:vEqyw0xg0
1.5倍って40sの可愛い少女が60sのオバはんになるってことではないだろか。
さあどっちか選ぶんだ。
0826デフォルトの名無しさん (ワッチョイ 0db3-A9b3)
垢版 |
2018/05/17(木) 21:57:59.98ID:vEqyw0xg0
60kgのオッサンになるよりはいいだろ。
0828デフォルトの名無しさん (ワッチョイ 5a68-RYnA)
垢版 |
2018/05/17(木) 22:20:15.79ID:yYAGBjqQ0
クラスのconst配列メンバをコンストラクタで初期化するにはどうしたらいいでしょうか?

class A
{
 const double array[];

 void A( double &temp[] ) : array(temp)
 {
 }
};


これはコンパイルでエラーが出てダメでした
0829デフォルトの名無しさん
垢版 |
2018/05/17(木) 22:32:37.31
>>828
できないからあきらメロン

素直にconst外してアクセサで制御するか、vector使うかしとけ

テンプレートとかを駆使して無理に実現しようと試みるのはいかにも頭が悪いし時間の無駄
0831デフォルトの名無しさん
垢版 |
2018/05/17(木) 22:34:24.00
ここ3年ほど32bitの組み込み機器に触ったことない
0837771 (ワッチョイ 95b3-NTEn)
垢版 |
2018/05/18(金) 18:57:13.66ID:jCVxhDbN0
VCもそうだけど大体のコンパイラは並列化や自動ベクタライズは強くないと思う
古くからある機能とそうでないものでは最適化に差が出るのは当然
だからこそSIMD使うときはみんなイントリンシック命令使ってるのであって
0839デフォルトの名無しさん (ワッチョイ 4623-XbkE)
垢版 |
2018/05/18(金) 21:20:25.60ID:TsUe9Yho0
>>828

template<std::size_t N>
class A {
public:
const double array[N];

template<typename ...ARGS>
A( ARGS&&... args ): array{std::forward<ARGS>(args)...} {}
};

template<typename ...ARGS>
inline auto make_A( ARGS&&... args ) -> A<sizeof...(args)>
{
return A<sizeof...(args)>(std::forward<ARGS>(args)...);
}

auto a{ make_A( 1.0, 2.0 ) };

こんな感じだろうか。
要C++11以降。

>>どんなサイズの配列が来るかはコンストラクタが呼び出されるまでわからないんでサイズは未定にしておきました
要素数が決まってないとコンパイル時に困るので、テンプレートクラスにしちゃったけれど…
0842デフォルトの名無しさん (ワッチョイ 9aa2-NEzo)
垢版 |
2018/05/19(土) 00:03:26.14ID:9PVep4LN0
>>828
C++14のinteger_sequence使ってみた

#include <iostream>
#include <utility>

template <size_t N>
class A
{
const double array[N];
public:
template <size_t... I>
A(const double (&temp)[N], std::index_sequence<I...>) : array{temp[I]...}
{
for (auto x : array) std::cout << x << std::endl;
}
A(const double (&temp)[N]) : A(temp, std::make_index_sequence<N>()){}
};

int main()
{
double t[] = {1.1, 2.2, 3.3};
A<sizeof(t)/sizeof(t[0])> a(t);
//A a(t); // C++17
}
0848デフォルトの名無しさん (ワッチョイ dacf-pX8m)
垢版 |
2018/05/19(土) 07:39:54.12ID:03NPLOb40
>>842
VS2017 15.7.1のVCのReleaseモードだとtemplateの部分が赤の下波線になるな
Debugモードにするとなぜか消える
そしてReleaseモードはエラーが出ているのにコンパイルして実行可能
バグじゃね
0866デフォルトの名無しさん (ワッチョイ 89fa-9WOx)
垢版 |
2018/05/23(水) 19:15:29.66ID:Au5e7VGg0
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

V9EWM
0869デフォルトの名無しさん (ワッチョイ daeb-yA46)
垢版 |
2018/05/23(水) 22:07:04.14ID:lbYCZF160
VisualStudioはインテリセンスとコンパイルに使うコンパイラが違う
ちょっと設定変えると、とてつもなくエラーが出るのにコンパイルは通るという事態は稀に良くある
0871デフォルトの名無しさん (ワッチョイ 5146-vwA5)
垢版 |
2018/05/24(木) 23:58:30.63ID:XccjINB00
あるコンテナaとコンテナbを連結?するようなクラス(イテレータ)を作りたいんだが

イメージとしてはa.begin()からa.end()-1までいったら次はb.begin()になるようなやつを思い浮かべてるんだけど

どんな風につくればよいかアドバイスください
0873デフォルトの名無しさん (バットンキン MM25-vADk)
垢版 |
2018/05/25(金) 10:18:09.43ID:SC+wi2VoM
C++で2Dのwindowsで動くゲーム作ろうと思っているのだけど、ライブラリって何使えばいいんだ?
0876デフォルトの名無しさん
垢版 |
2018/05/25(金) 12:11:02.95
Unity
0880デフォルトの名無しさん (ワッチョイ 39a9-vADk)
垢版 |
2018/05/25(金) 18:33:18.15ID:vSqqKkie0
いっぱいあるなー、一通り試してみようかな
0885デフォルトの名無しさん (ワッチョイ 39a9-vADk)
垢版 |
2018/05/25(金) 23:32:47.23ID:vSqqKkie0
DirectX tool kit なるものは一般的なDirectXの上位互換みたいな捉え方でおk?
0889デフォルトの名無しさん (スプッッ Sd33-PpUk)
垢版 |
2018/05/26(土) 10:01:48.35ID:KfOwUuVld
c++ならアンリアルエンジンで行こうぜ
0895デフォルトの名無しさん (ワッチョイ 7923-Y0oy)
垢版 |
2018/05/29(火) 12:33:02.70ID:WLsT9puy0
メンバ関数の引数や戻り値、メンバ変数などで使用するためにクラススコープで定義された型のこと

クラス(この場合はstd::string)を利用する側は、
実際にはその型がなんであるかを知る必要なく
文字列のサイズの型としてstring::size_type を用いることができる

参考
https://stackoverflow.com/questions/41471741/string-companion-types
0896デフォルトの名無しさん (アウアウウー Sadd-vxiR)
垢版 |
2018/05/29(火) 13:47:00.51ID:kgP2LOmLa
>>895

ありがとうございました。
0897デフォルトの名無しさん (ワッチョイ 89ab-wW0t)
垢版 |
2018/05/29(火) 23:46:46.84ID:vO9YU0hS0
std::threadでサブスレッドで処理をしているのですが、処理をキャンセルするためthreadをdetachすると
メモリを破壊しているようで全然別の箇所で色々なエラーが出てきます。system_errorは送出されていません。
サブスレッドではnewでのリソース確保もしていないので理由がわからないです。

detachする際にはjoinableである以外に条件があるのでしょうか。
0898デフォルトの名無しさん (ブーイモ MM33-wlFZ)
垢版 |
2018/05/29(火) 23:59:57.19ID:6Y/6D3P7M
>>897
スレッドローカル記憶域とか破棄されたあとにアクセスしてんじゃないの?
0900デフォルトの名無しさん (ワッチョイ c9b3-UDci)
垢版 |
2018/05/30(水) 00:33:44.46ID:D8xt/f/p0
detachしてもスレッドは動き続けますが。
0903897 (ワッチョイ 89ab-wW0t)
垢版 |
2018/05/30(水) 02:51:38.91ID:gP4Z92jH0
すみません。言葉足らずでした。
メインスレッド:GUI、サブスレッド:既存のライブラリでデータ補間の重い処理
を担当していて、途中でデータ補間パラメータを変更したくなった場合
キャンセルボタンを押してやり直す、という処理を考えています。
CPUは複数コアあるのでサブスレッドが走り続けてリソース開放が遅れるのは
構わないのですがjoinするとそこで処理終了まで待ってしまうのでdetachしたいわけです。重い処理のループの中にキャンセル用フラグでも用意できればキャンセル通知後
ループを抜けて速やかにjoinするところまで到達させる等の方法があるのですが、
既存ライブラリなのでそうはいかず諦めてdetachしようと考えています。
そのまま走り続けるだけだから結果を回収せずほっておけば良いのかと思ってましたが
甘かったみたいです。
>>898
thread_localは使っていないです。
>>899
アドバイスありがとうございます。関数オブジェクト作ってキャプチャは使っていないです。
>>901
スレッドを平和理に終了させる方法はなさそうなのでdetachできなければ諦めてjoinするしかなさそうですね…

とりあえず最小の再現例を作ってみることにします。
レス数が900を超えています。1000を超えると表示できなくなるよ。

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