エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります
コードを貼れる所
http://codepad.org/
https://ideone.com/
前スレ
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1556142878/
【初心者歓迎】C/C++室 Ver.106【環境依存OK】
レス数が900を超えています。1000を超えると表示できなくなるよ。
2020/07/13(月) 13:51:48.09ID:WBkWHxcT
804はちみつ餃子 ◆8X2XSCHEME
2021/08/13(金) 16:31:09.36ID:BE9FMbqU >>802-803
念のために仕様書を見直して見たら抽出子 (extractor) だったわ。
念のために仕様書を見直して見たら抽出子 (extractor) だったわ。
805デフォルトの名無しさん
2021/08/21(土) 20:09:51.28ID:7GAoG1Iq Rustのメモリ安全性はボローチェッカーによって担保されているが、
Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と
C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています
Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、
GC無しでView types参照の有効性を検証することによってメモリ安全性を保証しつつ
限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます
Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ
なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか?
Nimの実験的特徴
著者: アンドレアス・ルンプ
バージョン: 1.5.1
http://nim-lang.github.io/Nim/manual_experimental.html
Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し
ているにもかかわらず、Cのソースコードを吐き出せるのでC言語でリモートワークされ
ている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる
「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます
Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と
C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています
Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、
GC無しでView types参照の有効性を検証することによってメモリ安全性を保証しつつ
限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます
Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ
なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか?
Nimの実験的特徴
著者: アンドレアス・ルンプ
バージョン: 1.5.1
http://nim-lang.github.io/Nim/manual_experimental.html
Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し
ているにもかかわらず、Cのソースコードを吐き出せるのでC言語でリモートワークされ
ている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる
「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます
806デフォルトの名無しさん
2021/08/22(日) 10:20:28.75ID:0Cz6ueFz Rustのメモリ安全性はボローチェッカーによって担保されているが、
Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と
C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています
Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、
GC無しのView typesで参照の有効性を検証することによってメモリ安全性を保証しつつ
限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます
Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ
なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか?
Nimの実験的特徴
著者: アンドレアス・ルンプ
バージョン: 1.5.1
http://nim-lang.github.io/Nim/manual_experimental.html
Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し
ているにもかかわらず、高速なCのソースコードを吐き出せるのでC言語でリモートワーク
されている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる
「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます
Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と
C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています
Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、
GC無しのView typesで参照の有効性を検証することによってメモリ安全性を保証しつつ
限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます
Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ
なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか?
Nimの実験的特徴
著者: アンドレアス・ルンプ
バージョン: 1.5.1
http://nim-lang.github.io/Nim/manual_experimental.html
Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し
ているにもかかわらず、高速なCのソースコードを吐き出せるのでC言語でリモートワーク
されている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる
「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます
807デフォルトの名無しさん
2021/08/22(日) 10:29:54.67ID:0Cz6ueFz Rustのメモリ安全性はボローチェッカーによって担保されているが、
Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と
C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています
Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、
GC無しのView typesで参照の有効性を検証することによってメモリ安全性を保証しつつ
限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます
Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ
なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか?
Nimの実験的特徴 バージョン1.5.1
http://nim-lang.github.io/Nim/manual_experimental.html
第二プログラミング言語として Rust はオススメしません Nim をやるのです
https://wolfbash.hateblo.jp/entry/2017/07/30/193412
Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し
ているにもかかわらず、高速なCのソースコードを吐き出せるのでC言語でリモートワーク
されている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる
「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます
Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と
C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています
Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、
GC無しのView typesで参照の有効性を検証することによってメモリ安全性を保証しつつ
限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます
Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ
なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか?
Nimの実験的特徴 バージョン1.5.1
http://nim-lang.github.io/Nim/manual_experimental.html
第二プログラミング言語として Rust はオススメしません Nim をやるのです
https://wolfbash.hateblo.jp/entry/2017/07/30/193412
Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し
ているにもかかわらず、高速なCのソースコードを吐き出せるのでC言語でリモートワーク
されている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる
「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます
808デフォルトの名無しさん
2021/08/22(日) 12:34:32.34ID:m1rLE8Mc 怠け者が一生懸命2回書き込んじゃうのか
809デフォルトの名無しさん
2021/08/22(日) 13:21:27.56ID:cx6/dnxW unordered_map で erase(key) を実行した場合
要素のデストラクタは呼ばれるのでしょうか?
必ず自分で呼ばないとだめ?
あるいは勝手に呼んでくれるオプションとかある?
要素のデストラクタは呼ばれるのでしょうか?
必ず自分で呼ばないとだめ?
あるいは勝手に呼んでくれるオプションとかある?
810デフォルトの名無しさん
2021/08/22(日) 13:38:27.67ID:m4vhMo04 呼ばれるよ。そうじゃないと危なすぎるでしょ。
811デフォルトの名無しさん
2021/08/22(日) 13:51:18.62ID:cx6/dnxW つまり
unordered_map<hoge, fuga *>
みたいなときって
fuga *f があるとすると
delete f されるっていう認識で OK?
unordered_map<hoge, fuga *>
みたいなときって
fuga *f があるとすると
delete f されるっていう認識で OK?
812デフォルトの名無しさん
2021/08/22(日) 13:56:28.38ID:M38WAZ3o ポインタ型のデストラクタは基本的に何もしない。
デストラクタで破棄したいならunique_ptrなどスマポを使う。
デストラクタで破棄したいならunique_ptrなどスマポを使う。
813ハノン ◆QZaw55cn4c
2021/08/22(日) 15:55:44.42814ハノン ◆QZaw55cn4c
2021/08/22(日) 16:00:15.54815ハノン ◆QZaw55cn4c
2021/08/22(日) 18:24:32.36816はちみつ餃子 ◆8X2XSCHEME
2021/08/22(日) 21:31:04.10ID:YcQtKocs >>815
文字列リテラルを char* にキャストするほうがだいぶん行儀が悪いと思うよ。
文字列リテラルを char* にキャストするほうがだいぶん行儀が悪いと思うよ。
817ハノン ◆QZaw55cn4c
2021/08/22(日) 22:10:22.39 >>816
しかし、MyStr のコンストラクタの引数が std::string とか、もう何やっているのかわからなくなる‥‥
しかし、MyStr のコンストラクタの引数が std::string とか、もう何やっているのかわからなくなる‥‥
818はちみつ餃子 ◆8X2XSCHEME
2021/08/22(日) 22:21:02.88ID:YcQtKocs820デフォルトの名無しさん
2021/08/23(月) 11:12:35.74ID:PZenUrJ/ linuxのg++8.3でstd::stringのメンバ関数の
insert(const_iterator, char)を使うとコンパイルが通らないのですが、バグでしょうか?
-std=gnu++1zつけてます。
insert(const_iterator, char)を使うとコンパイルが通らないのですが、バグでしょうか?
-std=gnu++1zつけてます。
821デフォルトの名無しさん
2021/08/23(月) 12:30:44.70ID:gvYYeNdp >>820
具体的に問題を再現するコードとエラーメッセージを書いて。
具体的に問題を再現するコードとエラーメッセージを書いて。
822デフォルトの名無しさん
2021/08/23(月) 14:00:01.42ID:BEPpIG+d >>819
草生えたw
草生えたw
823デフォルトの名無しさん
2021/08/24(火) 09:47:42.50ID:HAU1OEWW >>821
こんな感じです。
g++のバージョンは8.3で-std=gnu++1z でコンパイルしています。
-- ソースファイル
#include <string>
int main(int argc, char** argv) {
std::string str="abcd";
std::string::const_iterator it = str.cend();
str.insert(it, 'a');
return 0;
}
-- エラーメッセージ
testinsert.cpp: In function ‘int main(int, char**)’:
testinsert.cpp:6:21: error: no matching function for call to ‘std::basic_string<char>::insert(std::basic_string<char>::const_iterator&, char)’
str.insert(it, 'a');
^
In file included from /opt/rh/devtoolset-8/root/usr/include/c++/8/string:52,
from testinsert.cpp:1:
/opt/rh/devtoolset-8/root/usr/include/c++/8/bits/basic_string.h:4419:7: note: candidate: ‘void std::basic_string<_CharT, _Traits, _Alloc>::insert(std::basic_string<_CharT, _Traits, _Alloc>::iterator, std::basic_string<_CharT, _Traits, _Alloc>::size_type, _CharT) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::basic_string<_CharT, _Traits, _Alloc>::iterator = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >; typename _Alloc::rebind<_CharT>::other::pointer = char*; std::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
insert(iterator __p, size_type __n, _CharT __c)
^~~~~~
こんな感じです。
g++のバージョンは8.3で-std=gnu++1z でコンパイルしています。
-- ソースファイル
#include <string>
int main(int argc, char** argv) {
std::string str="abcd";
std::string::const_iterator it = str.cend();
str.insert(it, 'a');
return 0;
}
-- エラーメッセージ
testinsert.cpp: In function ‘int main(int, char**)’:
testinsert.cpp:6:21: error: no matching function for call to ‘std::basic_string<char>::insert(std::basic_string<char>::const_iterator&, char)’
str.insert(it, 'a');
^
In file included from /opt/rh/devtoolset-8/root/usr/include/c++/8/string:52,
from testinsert.cpp:1:
/opt/rh/devtoolset-8/root/usr/include/c++/8/bits/basic_string.h:4419:7: note: candidate: ‘void std::basic_string<_CharT, _Traits, _Alloc>::insert(std::basic_string<_CharT, _Traits, _Alloc>::iterator, std::basic_string<_CharT, _Traits, _Alloc>::size_type, _CharT) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::basic_string<_CharT, _Traits, _Alloc>::iterator = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >; typename _Alloc::rebind<_CharT>::other::pointer = char*; std::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
insert(iterator __p, size_type __n, _CharT __c)
^~~~~~
824デフォルトの名無しさん
2021/08/24(火) 12:50:48.93ID:MkJE9y3A >>823
コンパイルできないのはバグだが終端イテレータの扱いについては
変遷があって有効なイテレータと見做されない時期もあった。
最後に文字をくっつけるのであれば push_back か append を使ったほうが無難。
コンパイルできないのはバグだが終端イテレータの扱いについては
変遷があって有効なイテレータと見做されない時期もあった。
最後に文字をくっつけるのであれば push_back か append を使ったほうが無難。
825デフォルトの名無しさん
2021/08/24(火) 14:09:58.40ID:+43LntiD826デフォルトの名無しさん
2021/08/25(水) 14:20:52.77ID:cqt8yWy6827デフォルトの名無しさん
2021/08/25(水) 15:38:43.16ID:9jFaPzYS コンパイラはver.4.8で対応してるよ
gnu++1zてのがないんじゃないの?
gnu++1zてのがないんじゃないの?
828デフォルトの名無しさん
2021/08/25(水) 17:29:41.65ID:+rMtuhpY const_iteratorだとダメでiteratorだと通るぽい
↓のコード、手持ちのg++ (GCC) 7.3.1で-std=gnu++1zでコンパイル、実行できたが
https://cpprefjp.github.io/reference/string/basic_string/insert.html
「(6) 指定したイテレータが指す要素の前に、文字を挿入する」の
s.insert(s.begin(), 'b');
を
s.insert(s.cbegin(), 'b');
にするとコンパイルエラーになる
↓のコード、手持ちのg++ (GCC) 7.3.1で-std=gnu++1zでコンパイル、実行できたが
https://cpprefjp.github.io/reference/string/basic_string/insert.html
「(6) 指定したイテレータが指す要素の前に、文字を挿入する」の
s.insert(s.begin(), 'b');
を
s.insert(s.cbegin(), 'b');
にするとコンパイルエラーになる
829デフォルトの名無しさん
2021/08/25(水) 19:02:32.36ID:s4ke0ECA C++を勉強しているんだけど難しすぎる。
目標は研究に使う数値計算ライブラリを作ることでそのために、
オブジェクト指向とテンプレートプログラミングとSTLを勉強しているんだけど量が多すぎて発狂しそう。
本当にC++を仕事で使っている人はこの量の仕様を覚えて使いこなしてるのか・・・
目標は研究に使う数値計算ライブラリを作ることでそのために、
オブジェクト指向とテンプレートプログラミングとSTLを勉強しているんだけど量が多すぎて発狂しそう。
本当にC++を仕事で使っている人はこの量の仕様を覚えて使いこなしてるのか・・・
830デフォルトの名無しさん
2021/08/25(水) 19:16:48.44ID:I0Do+yHA 基本的に自分がよく使う範囲だけ覚えて
必要があればそれ以外の範囲を調べて使う
膨大なようで、所詮言語だから使ってれば覚える
必要があればそれ以外の範囲を調べて使う
膨大なようで、所詮言語だから使ってれば覚える
831デフォルトの名無しさん
2021/08/25(水) 19:55:14.87ID:s4bO6YKI 生半可に上辺だけ触って判った気になって
コード描けますとかいうやつと仕事したくないわ
コード描けますとかいうやつと仕事したくないわ
832デフォルトの名無しさん
2021/08/25(水) 21:53:18.83ID:gHVAu5z0833デフォルトの名無しさん
2021/08/25(水) 23:11:46.20ID:3/bOIe3o >>829
もしEigenとかみたいなメタプログラミング使った数値計算ライブラリを考えてるならやめとけ
無駄に開発期間が数倍から10倍程度に膨れ上がるだけ
とりあえずテンプレートとか使わずに(あるいはメタじゃないレベルにおさえて)普通に書いたら?
もしEigenとかみたいなメタプログラミング使った数値計算ライブラリを考えてるならやめとけ
無駄に開発期間が数倍から10倍程度に膨れ上がるだけ
とりあえずテンプレートとか使わずに(あるいはメタじゃないレベルにおさえて)普通に書いたら?
834デフォルトの名無しさん
2021/08/26(木) 06:13:02.19ID:H9rsGF96 >>829
仕事をすると言っても、他の人がこさえたライブラリを使う場合はそこまでは求められんだろう。
反対に根っこ部分のライブラリとか、チーム内でのルールに関わると知識と経験がいるんじゃないかな?
よく理解できている方法でしっかり組み立てられるようになってから、徐々に細かい話に手を出したらいいと思う。
他の方法は解ってるし悪いわけでもないが、記述が気に入らないので延々とtemplate弄り倒す沼もあるから注意してね。
仕事をすると言っても、他の人がこさえたライブラリを使う場合はそこまでは求められんだろう。
反対に根っこ部分のライブラリとか、チーム内でのルールに関わると知識と経験がいるんじゃないかな?
よく理解できている方法でしっかり組み立てられるようになってから、徐々に細かい話に手を出したらいいと思う。
他の方法は解ってるし悪いわけでもないが、記述が気に入らないので延々とtemplate弄り倒す沼もあるから注意してね。
835デフォルトの名無しさん
2021/08/26(木) 09:00:20.61ID:b62pz5ME 数値計算に使うのならまずはSTL抑えておくだけでいいんじゃね?
C++言語自体の習得より、GPGPU、分散処理、SIMD、メモリ管理とかのノウハウ習得にまずは時間を割り当てるほうがよいと思う
C++言語自体の習得より、GPGPU、分散処理、SIMD、メモリ管理とかのノウハウ習得にまずは時間を割り当てるほうがよいと思う
836デフォルトの名無しさん
2021/08/26(木) 09:28:17.30ID:eI1EN0aq 物理の計算とか、いろんな数学的な量が出てくるけど、そういうのの演算がすべて
プログラム上では同じ形で書ければかっこいいなあと思ったり。
例えば、(スカラー)積なら、オペランドが実数、虚数、ベクトル、行列、テンソル....等々どれでも
乗算オペレーターで扱えるとか。
「普通」の数値ライブラリだとオペランド毎に積を扱う関数がうんざりするほどあってそれを適切に
選ばないといけなかったりするので。
プログラム上では同じ形で書ければかっこいいなあと思ったり。
例えば、(スカラー)積なら、オペランドが実数、虚数、ベクトル、行列、テンソル....等々どれでも
乗算オペレーターで扱えるとか。
「普通」の数値ライブラリだとオペランド毎に積を扱う関数がうんざりするほどあってそれを適切に
選ばないといけなかったりするので。
837デフォルトの名無しさん
2021/08/26(木) 12:08:14.60ID:p2DPtxMk 829です。
皆さんいろいろとアドバイスありがとうございます。
自分が作ろうと思っているのは、Eigenを用いた金融系の数値計算ライブラリなのですが、テンプレートを用いたらいろいろな型を代入できて便利かな〜くらいの感じで作ろうとしていました。
templateの使い方自体は少し勉強してみましたが、メタプログラミングの概念自体もよくわかっていないので、ひとまずtemplateは後回しにしようかと思います。
オブジェクト指向で書くかどうかは実際にコードを書いてみてから考えてみたいと思います。
皆さんいろいろとアドバイスありがとうございます。
自分が作ろうと思っているのは、Eigenを用いた金融系の数値計算ライブラリなのですが、テンプレートを用いたらいろいろな型を代入できて便利かな〜くらいの感じで作ろうとしていました。
templateの使い方自体は少し勉強してみましたが、メタプログラミングの概念自体もよくわかっていないので、ひとまずtemplateは後回しにしようかと思います。
オブジェクト指向で書くかどうかは実際にコードを書いてみてから考えてみたいと思います。
838デフォルトの名無しさん
2021/08/26(木) 16:35:43.38ID:9wBQWoih Eigen利用するだけか
それならまぁ無駄に時間かかるということも無いと思う(変なとこに拘らなければ
それならまぁ無駄に時間かかるということも無いと思う(変なとこに拘らなければ
839デフォルトの名無しさん
2021/08/26(木) 16:43:57.74ID:WPRv8+9f840デフォルトの名無しさん
2021/08/26(木) 16:45:12.60ID:WPRv8+9f ちなみに SciPy とか SymPy は良く出来てる方
841デフォルトの名無しさん
2021/08/27(金) 14:40:33.39ID:RrJjtAzF >>839
template使ったらもう型にとらわれなくていいんじゃね?はC++学習者の必ず通る道やからしゃーない
template使ったらもう型にとらわれなくていいんじゃね?はC++学習者の必ず通る道やからしゃーない
842デフォルトの名無しさん
2021/08/27(金) 15:05:57.44ID:nK81wxcE で、結局なんでできないの?
C APIのほうが汎用性が高いから?
行列やテンソルは乗算方法が複数あるから?
結果の表現形式も有理数とか複数あるから?
結果をエレベーションする必要があるから?
C APIのほうが汎用性が高いから?
行列やテンソルは乗算方法が複数あるから?
結果の表現形式も有理数とか複数あるから?
結果をエレベーションする必要があるから?
843デフォルトの名無しさん
2021/08/27(金) 17:44:56.54ID:LFMqkLz6 extern "C" 使ってる?
844デフォルトの名無しさん
2021/08/27(金) 17:53:48.43ID:nK81wxcE845デフォルトの名無しさん
2021/08/27(金) 19:22:59.35ID:ghUXxVcH >>843
32bitとはいえマイコンで-std=gnu++17とか指定するのは微妙な背徳感を感じてしまうチキンだが、
Cのライブラリも一緒に使うから、普通に使ってるな。基本ヘッダファイルでほとんど事足りるんだけど、
weak指定のCの割り込みハンドラとか再定義するときは混乱しないように明示的にextern "C"付けてる。
32bitとはいえマイコンで-std=gnu++17とか指定するのは微妙な背徳感を感じてしまうチキンだが、
Cのライブラリも一緒に使うから、普通に使ってるな。基本ヘッダファイルでほとんど事足りるんだけど、
weak指定のCの割り込みハンドラとか再定義するときは混乱しないように明示的にextern "C"付けてる。
846デフォルトの名無しさん
2021/08/29(日) 01:50:34.33ID:TPHdi4yb >>841
operator置き換えまくりとかな
operator置き換えまくりとかな
847デフォルトの名無しさん
2021/08/29(日) 10:17:41.53ID:sPGAkNt4 >>841
設定読み込みの部分でお世話になったわ
設定読み込みの部分でお世話になったわ
848デフォルトの名無しさん
2021/08/30(月) 14:54:09.69ID:a7szkEqk C++17は甘え
849デフォルトの名無しさん
2021/08/30(月) 20:54:03.52ID:i7moqIxZ 甘えてもいいぜ
850デフォルトの名無しさん
2021/09/08(水) 21:07:44.76ID:QZMwNs5W C99で良いです……
851デフォルトの名無しさん
2021/11/24(水) 18:53:15.36ID:ONXwk6fD void *q = (void*)p;
void *r = reinterpert_cast<void *>(p);
void *s = static_cast<void *>(p);
どっちが良い?
void *r = reinterpert_cast<void *>(p);
void *s = static_cast<void *>(p);
どっちが良い?
852デフォルトの名無しさん
2021/11/24(水) 22:24:01.60ID:7YsOMgZx p の型によるんじゃね?
853デフォルトの名無しさん
2021/11/25(木) 14:45:18.21ID:Ts2h3uwp >>838
Eigen の MatrixXtype と Matrix<type, Dynamic, Dynamic> が便利なのは判ったが
自分でそいつらを引数に持つテンプレート関数書こうとして
template <typename T, int R, int C>
void func(Matrix<T, R, C>&m){ ... }
で定義したら
a が Matrix3d a; とか RC 固定されてるときは func(a) で問題無いが
a が Matrix<type, Dynamic, Dynamic> a(3, 3); だと
実際に func(a) とかで呼ばれるときに
Matrix<type, -1, -1>
で呼ばれてて Row 数も Column 数も判らないので
結局呼ぶときに
func<type, 3, 3>(a)
みたいに確定して呼ぶことになるんだが
そういうもの?
Eigen の MatrixXtype と Matrix<type, Dynamic, Dynamic> が便利なのは判ったが
自分でそいつらを引数に持つテンプレート関数書こうとして
template <typename T, int R, int C>
void func(Matrix<T, R, C>&m){ ... }
で定義したら
a が Matrix3d a; とか RC 固定されてるときは func(a) で問題無いが
a が Matrix<type, Dynamic, Dynamic> a(3, 3); だと
実際に func(a) とかで呼ばれるときに
Matrix<type, -1, -1>
で呼ばれてて Row 数も Column 数も判らないので
結局呼ぶときに
func<type, 3, 3>(a)
みたいに確定して呼ぶことになるんだが
そういうもの?
854デフォルトの名無しさん
2021/11/26(金) 19:09:15.51ID:ZkEvf+9l Eigen使ったことないけど、それ多分動的なサイズ指定だよね
コンパイル時にサイズ分かってない奴じゃね
コンパイル時にサイズ分かってない奴じゃね
855デフォルトの名無しさん
2021/11/27(土) 15:14:48.94ID:dxTMcmeT fstream で open するオプションで
ios:in ios:out ios:binary とかと
ios_base:in ios_base:out ios_base:binary とかと
何が違うのでしょう?
ios:in ios:out ios:binary とかと
ios_base:in ios_base:out ios_base:binary とかと
何が違うのでしょう?
856デフォルトの名無しさん
2021/11/29(月) 16:58:44.62ID:Afxc3rI9 おなじ
:: だろうけど
:: だろうけど
857デフォルトの名無しさん
2021/12/06(月) 10:19:18.78ID:aQJDsz9k 一般的にプリプロセッサのビットシフトに制限てありますか?
#define HOGE (1<<27)
だとダメで
#define HOGE (0x8000000)
だとOKだとかありますかね?
#define HOGE (1<<27)
だとダメで
#define HOGE (0x8000000)
だとOKだとかありますかね?
858デフォルトの名無しさん
2021/12/06(月) 10:50:06.54ID:7ju/18KI >>857
プリプロセッサはその define値をその記述通りの文字列(というか文)としか見てなくて、単にその定義名の所へはめ込むだけじゃない?
あとは嵌め込まれた後の文脈でコンパイラが解釈するんじゃないかな。
プリプロセッサはその define値をその記述通りの文字列(というか文)としか見てなくて、単にその定義名の所へはめ込むだけじゃない?
あとは嵌め込まれた後の文脈でコンパイラが解釈するんじゃないかな。
859デフォルトの名無しさん
2021/12/06(月) 12:49:27.90ID:T2nrofKv860はちみつ餃子 ◆8X2XSCHEME
2021/12/06(月) 13:31:07.92ID:Fu08U5Ef >>857
定義での制限はないが、マクロの制御定数式として表れる場合、
つまり
#if HOGE > 0
みたいな前処理指令があった場合に全ての符号付整数型が intmax_t 、
全ての符号無し整数型が uintmax_t と同じ表現を持つというルールがあるので
通常の式とは解釈が違う。
(大抵の場合に intmax_t は long long int と同じ大きさだと思う。)
つまり普通の式としてならオーバーフローする場合でもプリプロセッサではオーバーフローしないこともあるので、
制限としてはむしろ緩い。
https://wandbox.org/permlink/Ns4Qt2xG3wj1WVBH
定義での制限はないが、マクロの制御定数式として表れる場合、
つまり
#if HOGE > 0
みたいな前処理指令があった場合に全ての符号付整数型が intmax_t 、
全ての符号無し整数型が uintmax_t と同じ表現を持つというルールがあるので
通常の式とは解釈が違う。
(大抵の場合に intmax_t は long long int と同じ大きさだと思う。)
つまり普通の式としてならオーバーフローする場合でもプリプロセッサではオーバーフローしないこともあるので、
制限としてはむしろ緩い。
https://wandbox.org/permlink/Ns4Qt2xG3wj1WVBH
861デフォルトの名無しさん
2021/12/08(水) 17:56:15.71ID:ouf8qdPn std::listのsortを使ってるのですが
同値だった場合の順序が維持されず困ってます。
何かよい手はないですか?
比較関数を渡してるのですがその中で何とかならないでしょうか?
同値だった場合の順序が維持されず困ってます。
何かよい手はないですか?
比較関数を渡してるのですがその中で何とかならないでしょうか?
862はちみつ餃子 ◆8X2XSCHEME
2021/12/08(水) 18:22:21.80ID:cTje1973863デフォルトの名無しさん
2021/12/08(水) 18:28:56.67ID:ouf8qdPn864デフォルトの名無しさん
2021/12/09(木) 05:48:07.42ID:4Thv0Igk 純粋仮想関数の通知メソッドの中から他所のアドレスを知りたい時C++だとどう書くのが一般的ですか?
865デフォルトの名無しさん
2021/12/09(木) 07:40:39.36ID:bGgqEdHH 日本語でおけ
866デフォルトの名無しさん
2021/12/14(火) 05:24:10.27ID:pHnakqcn 私の同僚のプログラマがC++で、あるソフトのプラグインをdll形式で作成しており
そのdllファイルは6割くらいの環境では問題なく動作しています。
しかし、ユーザーの環境次第で動かないことがあり
dllをインストールした状態でソフトウェアを起動しようとすると、ソフトウェア自体が起動しないというバグを抱えており
この問題の解決方法は数か月以上、見つかっていません。
そのdllはWindowsのみで動作するものであり、MacやLinuxには対応していません。
Windowsの何らかの設定に関係するバグなのでしょうか…?
バグの原因が一切分からず、彼の作業が進まないので私の作業も進まず、困っています。
私自身はC++でそのソフトのプラグインを作成したこともないですし、彼に何のアドバイスもできないので
このスレッドのお力をお借りしたいです。
dllを作成する際にユーザー環境でデバッグしてログを取得する方法など
何でも良いのでアドバイスがあったら教えてください。
エスパーを求めています。
そのdllファイルは6割くらいの環境では問題なく動作しています。
しかし、ユーザーの環境次第で動かないことがあり
dllをインストールした状態でソフトウェアを起動しようとすると、ソフトウェア自体が起動しないというバグを抱えており
この問題の解決方法は数か月以上、見つかっていません。
そのdllはWindowsのみで動作するものであり、MacやLinuxには対応していません。
Windowsの何らかの設定に関係するバグなのでしょうか…?
バグの原因が一切分からず、彼の作業が進まないので私の作業も進まず、困っています。
私自身はC++でそのソフトのプラグインを作成したこともないですし、彼に何のアドバイスもできないので
このスレッドのお力をお借りしたいです。
dllを作成する際にユーザー環境でデバッグしてログを取得する方法など
何でも良いのでアドバイスがあったら教えてください。
エスパーを求めています。
867デフォルトの名無しさん
2021/12/14(火) 05:56:13.12ID:6fha5luI printfデバッグをファイルに書くとか
868デフォルトの名無しさん
2021/12/14(火) 06:41:07.66ID:9Wj0xfjq 64bitと32bitの違い・・・ではないか
それかintel/amdどちらかにしかない命令使ってるとか、何か依存する部分があるとか??
それかintel/amdどちらかにしかない命令使ってるとか、何か依存する部分があるとか??
869デフォルトの名無しさん
2021/12/14(火) 08:10:32.07ID:o0cf+I8x まずはエラーメッセージをだな
でもランタイムライブラリのオプションがMTじゃなくてMDになってると予想
でもランタイムライブラリのオプションがMTじゃなくてMDになってると予想
870デフォルトの名無しさん
2021/12/14(火) 08:23:33.51ID:T7uEaOwT871デフォルトの名無しさん
2021/12/14(火) 10:16:08.28ID:e0HER7LA872デフォルトの名無しさん
2021/12/14(火) 11:09:39.54ID:RuQEsKMi そのプラグイン dll が vcのランタイムを要求してて 実行環境にvcのランタイムが入っていない
プラグインdllの性質上 ソフトが自前で LoadLibary するが、そこで失敗する
この際何が主因なのかわからないまま
静的なリンクなら ○○が見つかりませんdialog がでてすぐわかる
プラグインdll を Dependency Walker なりで そのDLLが必要としてる DLL を確認してみたら?
プラグインdllの性質上 ソフトが自前で LoadLibary するが、そこで失敗する
この際何が主因なのかわからないまま
静的なリンクなら ○○が見つかりませんdialog がでてすぐわかる
プラグインdll を Dependency Walker なりで そのDLLが必要としてる DLL を確認してみたら?
873デフォルトの名無しさん
2021/12/14(火) 11:37:46.60ID:zJGtuVBB >>872
ソフトの仕様や実装次第だけど、プラグイン読み込みに失敗して起動しないアプリもちょっと手抜き過ぎだよね
ソフトの仕様や実装次第だけど、プラグイン読み込みに失敗して起動しないアプリもちょっと手抜き過ぎだよね
874デフォルトの名無しさん
2021/12/14(火) 11:41:07.01ID:RuQEsKMi >>873
わかったとしても、「モジュール <プラグイン>.dll が見つからない」 としか書きようがなくてややこしい
※ 本当に見当たらないのは <プラグイン>.dll がさらにロードしようとしてる MSVCR○○.dll とかだから
わかったとしても、「モジュール <プラグイン>.dll が見つからない」 としか書きようがなくてややこしい
※ 本当に見当たらないのは <プラグイン>.dll がさらにロードしようとしてる MSVCR○○.dll とかだから
875デフォルトの名無しさん
2021/12/14(火) 11:43:56.15ID:RuQEsKMi プラグインのロード失敗で 即exit するのも不親切かもね
876デフォルトの名無しさん
2021/12/18(土) 10:46:11.74ID:RFbyER+p グローバル変数かstatic変数使ってないか?
昔他所のモジュールと変数の書き換え合戦が起きて正常に動作しない事があった
昔他所のモジュールと変数の書き換え合戦が起きて正常に動作しない事があった
877デフォルトの名無しさん
2021/12/19(日) 15:15:53.34ID:bLFtEsOT878デフォルトの名無しさん
2021/12/19(日) 17:40:07.63ID:150MzqYw 拡張子dllでも独自の実装してるホストプログラムあるからなぁ…
それこそホストの開発者に聞くしかない
それこそホストの開発者に聞くしかない
879デフォルトの名無しさん
2021/12/19(日) 23:17:52.32ID:mIjShW6/ 自前でできることは
1) DllMain の DLL_PROCESS_ATTACH、 DLL_PROCESS_DETACH に
printf を仕込んで 最低限 load がなされてるかを確認
2) load されてるのなら
最初に呼ばれるであろうexportしてる関数にがんがん printf を仕込んで 何処で死んでるかを確認
1) DllMain の DLL_PROCESS_ATTACH、 DLL_PROCESS_DETACH に
printf を仕込んで 最低限 load がなされてるかを確認
2) load されてるのなら
最初に呼ばれるであろうexportしてる関数にがんがん printf を仕込んで 何処で死んでるかを確認
880デフォルトの名無しさん
2021/12/24(金) 03:18:25.98ID:pnvTuQZD 規格厨ほど仕事ができなくね
どうでもいいようなことにこだわってないで
さっさと仕事終わらせろよ
どうでもいいようなことにこだわってないで
さっさと仕事終わらせろよ
881デフォルトの名無しさん
2021/12/24(金) 10:00:30.81ID:YmgFPSRd またお前か
何年立ったらルール覚えられるんだよ
つかえねーな
何年立ったらルール覚えられるんだよ
つかえねーな
882デフォルトの名無しさん
2022/01/17(月) 19:13:47.29ID:Xn5FtFWo メンバ関数へのポインタで質問なのですが
class MyClass {
public:
void (MyClass::*p)();
void func();
};
int main() {
MyClass obj;
このようなクラスがあったとして
main関数でobjのメンバの関数ポインタpへfuncのアドレスを入れる書き方と
pを使ってfuncを呼ぶ書き方を教えて下さい
class MyClass {
public:
void (MyClass::*p)();
void func();
};
int main() {
MyClass obj;
このようなクラスがあったとして
main関数でobjのメンバの関数ポインタpへfuncのアドレスを入れる書き方と
pを使ってfuncを呼ぶ書き方を教えて下さい
883デフォルトの名無しさん
2022/01/17(月) 19:29:52.39ID:pwXKfNQA884デフォルトの名無しさん
2022/01/17(月) 20:40:50.75ID:iHDNpEw/ C++でオブジェクト指向を学びたいなと思ってるのですが、みなさんはどのように学びましたか?
既存のゲームの機能追加などをサークルでやっていて、C++自体には慣れてきて次のステップに進みたいと思いました.
既存のゲームの機能追加などをサークルでやっていて、C++自体には慣れてきて次のステップに進みたいと思いました.
885デフォルトの名無しさん
2022/01/17(月) 20:47:51.30ID:h5bglXe3 ただただ自分でクラス設計考えて実際に書いて、さらにそれをあちこちで使ってみるだけ
実際に書く、利用する、をサボると机上の空論しか語れない頭でっかちになる
実際に書く、利用する、をサボると机上の空論しか語れない頭でっかちになる
886デフォルトの名無しさん
2022/01/17(月) 20:50:24.57ID:Xn5FtFWo >>883
ありがとうございます
ありがとうございます
887デフォルトの名無しさん
2022/01/26(水) 21:23:31.72ID:HoA8G4VO 初心者です。
自作クラスをVector型に押し込めようとしたのですが、そこで発生したエラーの解決方法を2時間くらい調べたのですが分かりませんでした。
class myClass
{
myClass(int A){num = A;}
void show() {
cout << "" << "="<<num<<endl;}
~myClass(){}
int num;
};
int main() {
myClass a1(1), a2(2), a3(3), a4(4), a5(5);
vector<myClass> myClassList;
myClassList.push_back(a1);
//中略
//削除するオブジェのインデックス番号を記録
vector<int> delList;
for (int i = 0; i < myClassList.size(); ++i)
{
if (myClassList[i].num == 2 || myClassList[i].num == 4) {
cout << "i" << "=" << i << endl;
delList.push_back(i);
}
}
cout << "削除開始" << endl;
for (int i = 0; i < delList.size(); ++i)
{
std::erase(myClassList, delList[i]);//コイツでエラー
}
return 0;
}
二項演算子 '==': 'myClass' は、この演算子または定義済の演算子に適切な型への変換の定義を行いません。
自作クラスをVector型に押し込めようとしたのですが、そこで発生したエラーの解決方法を2時間くらい調べたのですが分かりませんでした。
class myClass
{
myClass(int A){num = A;}
void show() {
cout << "" << "="<<num<<endl;}
~myClass(){}
int num;
};
int main() {
myClass a1(1), a2(2), a3(3), a4(4), a5(5);
vector<myClass> myClassList;
myClassList.push_back(a1);
//中略
//削除するオブジェのインデックス番号を記録
vector<int> delList;
for (int i = 0; i < myClassList.size(); ++i)
{
if (myClassList[i].num == 2 || myClassList[i].num == 4) {
cout << "i" << "=" << i << endl;
delList.push_back(i);
}
}
cout << "削除開始" << endl;
for (int i = 0; i < delList.size(); ++i)
{
std::erase(myClassList, delList[i]);//コイツでエラー
}
return 0;
}
二項演算子 '==': 'myClass' は、この演算子または定義済の演算子に適切な型への変換の定義を行いません。
889デフォルトの名無しさん
2022/01/26(水) 22:43:54.69ID:HoA8G4VO >>888
オペレータに何を定義すれば良いか分かりません
オペレータに何を定義すれば良いか分かりません
890蟻人間 ◆T6xkBnTXz7B0
2022/01/26(水) 22:53:20.32ID:bGQQ0+uk >>889
eraseの仕様を見れば内部で要素を比較していることがわかる。
そこでmyClassとintの比較を定義する必要がある。
bool operator==(int n) const
{
return n == num;
}
eraseの仕様を見れば内部で要素を比較していることがわかる。
そこでmyClassとintの比較を定義する必要がある。
bool operator==(int n) const
{
return n == num;
}
891蟻人間 ◆T6xkBnTXz7B0
2022/01/26(水) 22:55:52.03ID:bGQQ0+uk あるいは
friend bool operator==(const myClass& my, int n)
{
return my.num == n;
}
friend bool operator==(const myClass& my, int n)
{
return my.num == n;
}
892デフォルトの名無しさん
2022/01/26(水) 23:02:17.85ID:HoA8G4VO 蟻人間さん、ご丁寧に教えてくださり、本当にありがとうございます。
無事問題が解決しました
無事問題が解決しました
893デフォルトの名無しさん
2022/01/27(木) 07:58:45.49ID:Fon8EKoL delListはインデックスだからvector::eraseではなかろーか
https://ideone.com/jnELhK
https://ideone.com/jnELhK
894デフォルトの名無しさん
2022/01/28(金) 15:24:34.96ID:HENDwGdD msvcのコンパイルが遅いのとメモリ大量に使うのとで大変辛いのですが、コンパイルだけ別の端末で出来たりしませんか?
896デフォルトの名無しさん
2022/01/28(金) 16:19:19.11ID:gre2uKRK VARIANT型をログ出力したいときはどうしたらよいでしょうか?
897はちみつ餃子 ◆8X2XSCHEME
2022/01/28(金) 16:23:28.54ID:hT9TavA0898デフォルトの名無しさん
2022/01/28(金) 16:59:31.61ID:gre2uKRK >>897
Comのです
Comのです
899はちみつ餃子 ◆8X2XSCHEME
2022/01/28(金) 17:44:30.90ID:hT9TavA0 何がわからないの?
基本的な数値型や配列以外の場合にどう文字列化すればいいかわからないってこと?
基本的な数値型や配列以外の場合にどう文字列化すればいいかわからないってこと?
900デフォルトの名無しさん
2022/01/28(金) 17:57:24.82ID:gre2uKRK VARIANT.ToString的なのないかな?的な
みんな自分で作ってるの?
みんな自分で作ってるの?
901はちみつ餃子 ◆8X2XSCHEME
2022/01/28(金) 23:10:21.87ID:hT9TavA0 >>900
VARIANT は基本的な型だけでなく COM のオブジェクト (を指すポインタ) を含むこともある。
COM におけるオブジェクトは「少なくとも IUnknown インターフェイスは実装されている」という保証 (規約) があるだけで、
それをどのように表示できるのかは汎用的には決めようがない。
基本的な型だけでも簡易的に文字列化するものがあるとちょっとしたデバッグ用途などでありがたいというのはわからんでもないけど。
VARIANT は基本的な型だけでなく COM のオブジェクト (を指すポインタ) を含むこともある。
COM におけるオブジェクトは「少なくとも IUnknown インターフェイスは実装されている」という保証 (規約) があるだけで、
それをどのように表示できるのかは汎用的には決めようがない。
基本的な型だけでも簡易的に文字列化するものがあるとちょっとしたデバッグ用途などでありがたいというのはわからんでもないけど。
902デフォルトの名無しさん
2022/01/28(金) 23:24:19.57ID:A8Zj7Ozq >>901
オブジェクトはそのポインタ値を表示とかよくある
オブジェクトはそのポインタ値を表示とかよくある
903はちみつ餃子 ◆8X2XSCHEME
2022/01/28(金) 23:39:29.92ID:hT9TavA0 ログ用途だとアドレスだけでは意味が薄そうに思うけど……
(実行のたびに値は変わるだろうし、検証に使えない。)
少なくとも整数などではないという区別が出来れば十分ということはあり得るかな。
タイプライブラリがちゃんと用意されているなら型名などが取得できる場合もあるので可能ならそういう情報も欲しいけど、
いずれにしても「文字列にする」という要求はユースケースが多用すぎて標準的な機能として決め打ちはしづらい。
(実行のたびに値は変わるだろうし、検証に使えない。)
少なくとも整数などではないという区別が出来れば十分ということはあり得るかな。
タイプライブラリがちゃんと用意されているなら型名などが取得できる場合もあるので可能ならそういう情報も欲しいけど、
いずれにしても「文字列にする」という要求はユースケースが多用すぎて標準的な機能として決め打ちはしづらい。
レス数が900を超えています。1000を超えると表示できなくなるよ。
ニュース
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 ★2 [Hitzeschleier★]
- 【中国局長】両国関係に「深刻な影響」 首相発言の撤回要求 [蚤の市★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★3 [BFU★]
- 【維新】吉村知事「中国人観光客だけに頼るビジネスモデル変えていかないといけない」「高市総理の発言は撤回する必要はない」 [Hitzeschleier★]
- 【社会】40代以上のおじさん・おばさんは叩いてオッケーという風潮はなぜ加速したのか [七波羅探題★]
- 自分に自信がない女の子、陽キャ美容室で80cmのエクステを付けた結果wwwwwwwwwwwwwwwwwww [329329848]
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 外務省局長、よくわからないまま帰国へ [834922174]
- 【実況】博衣こよりのえちえち歌枠🧪
- 【朗報】外務省局長、中国側の要求を断固拒否。「高市さんの答弁は日本政府の立場を変えるものではないし、撤回しない」 [519511584]
- 農林水産省「春頃にはコメ価格落ち着くのでは」新米の取引価格、過去最高を更新。 [256556981]
