前スレ
C++相談室 part157
https://mevius.5ch.net/test/read.cgi/tech/1628474251/
探検
C++相談室 part158
レス数が950を超えています。1000を超えると書き込みができなくなります。
2021/11/15(月) 18:49:18.44ID:I69rZ/Of
897デフォルトの名無しさん
2022/02/14(月) 10:52:52.11ID:Z549+Tcq structの{}内にテンプレートの文全部入れてみ?
898デフォルトの名無しさん
2022/02/14(月) 11:13:25.35ID:o9A3FVGP 毎回 uniform_int_distribution のインスタンスを一時的に生成しては破壊するのを繰り返すのだけはありえんだろ
無意味なメモリのアロケーションありすぎ
無意味なメモリのアロケーションありすぎ
899デフォルトの名無しさん
2022/02/14(月) 11:16:30.38ID:lu0CYRrt #include <iostream>
using namespace std;
struct Sample{
void func1(int i) {cout << i << "," << __PRETTY_FUNCTION__ << endl;}
void func2(int i) {cout << i << "," << __PRETTY_FUNCTION__ << endl;}
};
template<typename T> void SampFunc(Sample& sample, int i, T member_func){
(sample.*member_func)(i);
}
int main() {
Sample s;
SampFunc(s, 1, &Sample::func1);
SampFunc(s, 2, &Sample::func2);
return 0;
}
using namespace std;
struct Sample{
void func1(int i) {cout << i << "," << __PRETTY_FUNCTION__ << endl;}
void func2(int i) {cout << i << "," << __PRETTY_FUNCTION__ << endl;}
};
template<typename T> void SampFunc(Sample& sample, int i, T member_func){
(sample.*member_func)(i);
}
int main() {
Sample s;
SampFunc(s, 1, &Sample::func1);
SampFunc(s, 2, &Sample::func2);
return 0;
}
900デフォルトの名無しさん
2022/02/14(月) 11:28:15.31ID:s3l2ZTMb doubleとfloatの配列を同じように関数の引数に渡して扱う方法ってありますか?
・処理部が複雑なので引数の型が違う関数2個は作りたくない
・IF関数として両方版を作ってそこから処理部を呼び出すみたいな構造は可能、ただし別型版の実体コピー配列などは作りたくない(配列が巨大な為)
考えてみたのが、
配列の値部分をvoid*配列で指したものと、type_infoを持ったクラスなり構造体なりを用意して、
処理部でtype_infoに応じてvoid*をキャスティング、という方法ですが、
どうにも汚いのでもっと綺麗なやり方あれば教えてください。
・処理部が複雑なので引数の型が違う関数2個は作りたくない
・IF関数として両方版を作ってそこから処理部を呼び出すみたいな構造は可能、ただし別型版の実体コピー配列などは作りたくない(配列が巨大な為)
考えてみたのが、
配列の値部分をvoid*配列で指したものと、type_infoを持ったクラスなり構造体なりを用意して、
処理部でtype_infoに応じてvoid*をキャスティング、という方法ですが、
どうにも汚いのでもっと綺麗なやり方あれば教えてください。
901デフォルトの名無しさん
2022/02/14(月) 11:34:29.03ID:lu0CYRrt コードがないので0点
902デフォルトの名無しさん
2022/02/14(月) 11:51:48.64ID:MNwZvUCy テンプレートでいいだろ
903デフォルトの名無しさん
2022/02/14(月) 11:54:11.63ID:L8LvhIeL >>900
ふつーにテンプレートじゃね?
template <typename T> requires std::is_floating_point_v<T>
void func(T&& arg)
{
}
あとanyなんて手もあるけど
void func(std::any arg)
{
if(arg.type() == typeid(double)) { }
if(arg.type() == typeid(float)) { }
}
ふつーにテンプレートじゃね?
template <typename T> requires std::is_floating_point_v<T>
void func(T&& arg)
{
}
あとanyなんて手もあるけど
void func(std::any arg)
{
if(arg.type() == typeid(double)) { }
if(arg.type() == typeid(float)) { }
}
904デフォルトの名無しさん
2022/02/14(月) 11:57:58.78ID:81yRYH7R905デフォルトの名無しさん
2022/02/14(月) 12:04:39.18ID:Z549+Tcq906デフォルトの名無しさん
2022/02/14(月) 12:12:47.83ID:L8LvhIeL >>900
まさかとは思うが
float f[2];
std::fill(std::begin(f), std::end(f), 0);
double d[2];
std::fill(std::begin(d), std::end(d), 0);
こんな基本はわかるんだよな?
まさかとは思うが
float f[2];
std::fill(std::begin(f), std::end(f), 0);
double d[2];
std::fill(std::begin(d), std::end(d), 0);
こんな基本はわかるんだよな?
907デフォルトの名無しさん
2022/02/14(月) 13:46:37.17ID:nlxkZZlr >>899
ありがとう、採用します 895
ありがとう、採用します 895
908デフォルトの名無しさん
2022/02/14(月) 14:17:59.24ID:s3l2ZTMb ありがとうございます、テンプレート便利ですね。使わせていただきます。900
909デフォルトの名無しさん
2022/02/14(月) 14:33:14.26ID:HFyH6Ayv あるクラスのメンバ関数のデフォルト引数を同クラスのメンバ変数にすることって可能でしょうか
910デフォルトの名無しさん
2022/02/14(月) 14:51:26.37ID:lu0CYRrt 可能
911はちみつ餃子 ◆8X2XSCHEME
2022/02/14(月) 14:51:35.72ID:eI8f6/6+ もっとわかりやすく説明して……。
912はちみつ餃子 ◆8X2XSCHEME
2022/02/14(月) 14:55:09.41ID:eI8f6/6+ デフォルト引数をデータメンバにするってのは単にデフォルト引数の値をデータメンバに入れるって意味?
↓ こういうの?
struct foo {
int x;
void bar(int y=1) {
x=y;
}
};
こんな単純なことがわからないとも思えんし、なんか隠れた要件がありそうな気がするんやが
↓ こういうの?
struct foo {
int x;
void bar(int y=1) {
x=y;
}
};
こんな単純なことがわからないとも思えんし、なんか隠れた要件がありそうな気がするんやが
913デフォルトの名無しさん
2022/02/14(月) 15:03:33.70ID:JdXPqUHi >>912
逆だろ文網
逆だろ文網
914デフォルトの名無しさん
2022/02/14(月) 15:13:09.50ID:9KgBPGkB >>912
こいつJ民だったの?
こいつJ民だったの?
915デフォルトの名無しさん
2022/02/14(月) 15:13:51.43ID:M1yCctPq たぶん
struct S{
int field;
void f(int x=field){...}
};
ってのをやりたいんだろうけどな
あいにくC++のデフォルト引数は関数定義を見ただけで定数に決まるものしか受け付けられない
どうしても同等の処理をしたいならオーバーロードして転送するのが一番楽
void f(){f(field);}
struct S{
int field;
void f(int x=field){...}
};
ってのをやりたいんだろうけどな
あいにくC++のデフォルト引数は関数定義を見ただけで定数に決まるものしか受け付けられない
どうしても同等の処理をしたいならオーバーロードして転送するのが一番楽
void f(){f(field);}
916デフォルトの名無しさん
2022/02/14(月) 15:17:25.95ID:L8LvhIeL > デフォルト引数は関数定義を見ただけで定数に決まるものしか受け付けられない
そうか?
int func()
{
int a;
std::cin >> a; //絶対に定数になり得ない
return a;
}
void test(int arg = func())
{
}
int main()
{
test(); //OK. もちろん入力待ちをする
}
そうか?
int func()
{
int a;
std::cin >> a; //絶対に定数になり得ない
return a;
}
void test(int arg = func())
{
}
int main()
{
test(); //OK. もちろん入力待ちをする
}
917はちみつ餃子 ◆8X2XSCHEME
2022/02/14(月) 15:21:08.20ID:eI8f6/6+918デフォルトの名無しさん
2022/02/14(月) 15:33:51.02ID:lu0CYRrt コードがないし状況不明で困ってる文面にも見えないからアレで十分
919デフォルトの名無しさん
2022/02/14(月) 17:52:44.50ID:m3z01MvF uniform_int_distributionって本質はIntTypeのペアを持った関数オブジェクトだから毎回生成したところで遅くはないはず
920デフォルトの名無しさん
2022/02/14(月) 20:03:27.39ID:vE8mmwyH 乱数ってだいたい静的になんか持ってるよね
921デフォルトの名無しさん
2022/02/14(月) 20:44:52.17ID:UkhMLhRO マルチスレッド環境用にジャンプって機能が疑似乱数にあるよな
「疑似乱数 ジャンプ」でぐぐると出てくる
「疑似乱数 ジャンプ」でぐぐると出てくる
922デフォルトの名無しさん
2022/02/14(月) 21:33:11.13ID:CqI2HZWm 状態持ってるのはエンジンの方
分布ごときにどんな怪獣ブラックボックスのイメージ持ってんだ
分布ごときにどんな怪獣ブラックボックスのイメージ持ってんだ
923デフォルトの名無しさん
2022/02/14(月) 21:37:34.26ID:zjXK/l5x エンジン以外に何があんの?
924デフォルトの名無しさん
2022/02/14(月) 22:08:14.48ID:2E5iBc/D 例外処理で、catchした後、どのクラスがthrowしたのかってわかりますか?
925デフォルトの名無しさん
2022/02/14(月) 22:35:41.44ID:jOONNl+N 初心者質問ですみません。
ヘッダで定義したテンプレート特殊化の非推奨属性がヘッダ外で効いてないっぽいんですけど、
ヘッダ外でも非推奨としたい場合何か特殊な事をしないといけないとかありましたっけ?
例えば
.h
```
template <std::integral INT_TYPE>
struct int_auto
{
using type = auto_int_detail<std::is_signed_v<INT_TYPE>, sizeof(INT_TYPE)>::type;
};
template <>
struct [[deprecated("char type is not allowed")]] int_auto<char>
{
using type = auto_int_detail<std::is_signed_v<char>, sizeof(char)>::type;
};
template <std::integral T>
using int_auto_t = int_auto<T>::type;
int_auto_t<char> i_header; // これは非推奨
```
.cpp
```
int_auto_t<char> i_cpp; // これは非推奨じゃない
```
となっています。
MSVC++(v142)で言語標準準拠はstd:c++20です。
ヘッダで定義したテンプレート特殊化の非推奨属性がヘッダ外で効いてないっぽいんですけど、
ヘッダ外でも非推奨としたい場合何か特殊な事をしないといけないとかありましたっけ?
例えば
.h
```
template <std::integral INT_TYPE>
struct int_auto
{
using type = auto_int_detail<std::is_signed_v<INT_TYPE>, sizeof(INT_TYPE)>::type;
};
template <>
struct [[deprecated("char type is not allowed")]] int_auto<char>
{
using type = auto_int_detail<std::is_signed_v<char>, sizeof(char)>::type;
};
template <std::integral T>
using int_auto_t = int_auto<T>::type;
int_auto_t<char> i_header; // これは非推奨
```
.cpp
```
int_auto_t<char> i_cpp; // これは非推奨じゃない
```
となっています。
MSVC++(v142)で言語標準準拠はstd:c++20です。
926はちみつ餃子 ◆8X2XSCHEME
2022/02/14(月) 22:41:31.68ID:eI8f6/6+ >>924
それ自体には発生元を特定する情報を持たないけど……。
どういう状況?
・ 例外的な状況から回復する必要があって発生源によって処理の切り替えが要る
・ プログラムの正常系が動くはずなのに何故か出てくる例外の元を特定したい (つまりデバッグ用途)
どちら?
それ自体には発生元を特定する情報を持たないけど……。
どういう状況?
・ 例外的な状況から回復する必要があって発生源によって処理の切り替えが要る
・ プログラムの正常系が動くはずなのに何故か出てくる例外の元を特定したい (つまりデバッグ用途)
どちら?
927デフォルトの名無しさん
2022/02/14(月) 23:02:44.91ID:2E5iBc/D928デフォルトの名無しさん
2022/02/14(月) 23:08:22.30ID:BDOt87Dq >>927
ヒント。例外はクラス等なんでも投げられる。そしてクラスは継承できる。
ヒント。例外はクラス等なんでも投げられる。そしてクラスは継承できる。
929デフォルトの名無しさん
2022/02/14(月) 23:11:22.86ID:R5SapkSQ それはどのクラスがthrowした、じゃなくて、どのクラスがthrowされた、の間違いだな
例外 c++で検索すれば答えはすぐ出てくるよ
例外 c++で検索すれば答えはすぐ出てくるよ
930デフォルトの名無しさん
2022/02/14(月) 23:29:00.15ID:a+DIA8ij931デフォルトの名無しさん
2022/02/15(火) 00:14:19.75ID:VnfLS+lO932蟻人間 ◆T6xkBnTXz7B0
2022/02/15(火) 00:23:09.85ID:vbEMbnXt throw this;
933デフォルトの名無しさん
2022/02/15(火) 14:33:45.24ID:StNRh9X/ クラスメンバをforで回す方法はありますか?
例えばintのaとdoubleのbという2つのメンバを持つクラスがあったとして、
forループでクラス内のメンバ変数を全部加算したい、など。
イメージはこんな感じです。
double all = 0.0;
for (T member : this->allMember)
{
all += member;
}
例えばintのaとdoubleのbという2つのメンバを持つクラスがあったとして、
forループでクラス内のメンバ変数を全部加算したい、など。
イメージはこんな感じです。
double all = 0.0;
for (T member : this->allMember)
{
all += member;
}
934デフォルトの名無しさん
2022/02/15(火) 14:55:33.51ID:aaenmMxg for で回さないといけないほど多数のメンバー変数がある設計をまず見直すべき
935デフォルトの名無しさん
2022/02/15(火) 14:59:14.95ID:0rNaChGh リフレクションは無いというのが回答か
936デフォルトの名無しさん
2022/02/15(火) 15:15:26.06ID:AWN50YIA 動的にロードするのでなければ、自分で登録するか、ソースから解析するタイプのリフレクションライブラリを書くか探せばいい
937デフォルトの名無しさん
2022/02/15(火) 15:16:41.63ID:g9Gn9R1H 配列じゃあかんのか
938デフォルトの名無しさん
2022/02/15(火) 15:22:08.66ID:3zKYAjvH 数学のベクトルクラスでも作成してるのかい?
939デフォルトの名無しさん
2022/02/15(火) 17:13:44.36ID:QbgtcDS7 >>933
あるよ。おすすめするわけじゃないけど。
https://www.google.com/search?q=boost+fusion+for_each+struct
こんな奇怪なライブラリ使わなくても済むようにするための言語側サポートはいずれも提案中。先は長い。
P1306 Expansion statements
https://github.com/cplusplus/papers/issues/156
P1240 Scalable Reflection in C++
https://github.com/cplusplus/papers/issues/545
あるよ。おすすめするわけじゃないけど。
https://www.google.com/search?q=boost+fusion+for_each+struct
こんな奇怪なライブラリ使わなくても済むようにするための言語側サポートはいずれも提案中。先は長い。
P1306 Expansion statements
https://github.com/cplusplus/papers/issues/156
P1240 Scalable Reflection in C++
https://github.com/cplusplus/papers/issues/545
940デフォルトの名無しさん
2022/02/15(火) 17:28:44.20ID:AWN50YIA じゃあこれもオススメではないがリフレクションベースで
https://www.rttr.org/
を使った例でも...
#include <iostream>
#include <rttr/registration>
using namespace rttr;
struct s{
int m1;
double m2;
};
RTTR_REGISTRATION {
registration::class_<s>("s").constructor<>()
.property("m1", &s::m1)
.property("m2", &s::m2);
}
template<typename T>
double sum(const T& o) {
type t = type::get<s>();
double sum = 0.;
for (auto& prop : t.get_properties()) {
sum += prop.get_value(o).to_double();
}
return sum;
}
int main() {
s o{1,1.1};
std::cout << sum(o) << std::endl;
return 0;
}
// 思いつきで聞いてるだけな気もするけどw
https://www.rttr.org/
を使った例でも...
#include <iostream>
#include <rttr/registration>
using namespace rttr;
struct s{
int m1;
double m2;
};
RTTR_REGISTRATION {
registration::class_<s>("s").constructor<>()
.property("m1", &s::m1)
.property("m2", &s::m2);
}
template<typename T>
double sum(const T& o) {
type t = type::get<s>();
double sum = 0.;
for (auto& prop : t.get_properties()) {
sum += prop.get_value(o).to_double();
}
return sum;
}
int main() {
s o{1,1.1};
std::cout << sum(o) << std::endl;
return 0;
}
// 思いつきで聞いてるだけな気もするけどw
941デフォルトの名無しさん
2022/02/15(火) 17:31:44.80ID:AWN50YIA ちょっと修正
#include <iostream>
#include <rttr/registration>
using namespace rttr;
struct s{
int m1;
double m2;
};
RTTR_REGISTRATION {
registration::class_<s>("s").constructor<>()
.property("m1", &s::m1)
.property("m2", &s::m2);
}
template<typename T>
double sum(const T& o) {
double sum = 0.;
for (auto& prop : type::get<T>().get_properties()) {
sum += prop.get_value(o).to_double();
}
return sum;
}
int main() {
s o{1,1.1};
std::cout << sum(o) << std::endl;
return 0;
}
#include <iostream>
#include <rttr/registration>
using namespace rttr;
struct s{
int m1;
double m2;
};
RTTR_REGISTRATION {
registration::class_<s>("s").constructor<>()
.property("m1", &s::m1)
.property("m2", &s::m2);
}
template<typename T>
double sum(const T& o) {
double sum = 0.;
for (auto& prop : type::get<T>().get_properties()) {
sum += prop.get_value(o).to_double();
}
return sum;
}
int main() {
s o{1,1.1};
std::cout << sum(o) << std::endl;
return 0;
}
942デフォルトの名無しさん
2022/02/17(木) 18:59:32.62ID:bHlhY+TU std::unique_ptr</*見切れる程長いクラス名*/> looongPtr{ std::make_unique</*見切れる程長いクラス名*/>(/*見切れる程多い引数*/) };
unique_ptrをメンバ変数にするときに最初のとこをautoに出来ないんですか?
unique_ptrをメンバ変数にするときに最初のとこをautoに出来ないんですか?
943デフォルトの名無しさん
2022/02/17(木) 19:17:57.96ID:9tUnWmYs make関数使えば?
944蟻人間 ◆T6xkBnTXz7B0
2022/02/17(木) 19:30:29.28ID:sNGWbyyl typedef longlonglongtypename shorttypename;
auto ptr = std::make_unique<shorttypename>...
auto ptr = std::make_unique<shorttypename>...
945デフォルトの名無しさん
2022/02/17(木) 20:09:06.95ID:TNf7BdQD946デフォルトの名無しさん
2022/02/17(木) 20:26:37.89ID:wIu//gsc >>942
設計を見直せ
設計を見直せ
947デフォルトの名無しさん
2022/02/17(木) 21:57:39.99ID:d4bhbZak 単なる○○できますか?に対して設計見直せとだけ言ってくるガイジなんなん
まず質問に答えた上でなら分からんでもないが
まず質問に答えた上でなら分からんでもないが
948デフォルトの名無しさん
2022/02/17(木) 22:12:03.03ID:wIu//gsc うるせぇ雑魚が
949デフォルトの名無しさん
2022/02/17(木) 23:04:10.74ID:wrwPyddf ざーこざーこw
950デフォルトの名無しさん
2022/02/17(木) 23:56:12.71ID:bHlhY+TU 🤔
951デフォルトの名無しさん
2022/02/18(金) 00:20:49.11ID:q/M7jrOo C++の業務ってことで入ったんだけどC++とは名ばかりのC言語バリバリのコードだった
C++11、いやせめてCじゃなくてC++を書こうとしようぜと思うんだけど世の中こんなんばっかなん?こういうケースほんっとに多くてさぁ
40代↑の人が書いてるC++の言語って大体ほぼCでうんざりする
C++11、いやせめてCじゃなくてC++を書こうとしようぜと思うんだけど世の中こんなんばっかなん?こういうケースほんっとに多くてさぁ
40代↑の人が書いてるC++の言語って大体ほぼCでうんざりする
952デフォルトの名無しさん
2022/02/18(金) 00:25:14.77ID:qZSzRw8s 偏見だけど同名の関数が並んでる以外Cとしてコンパイルできそうなイメージある
953はちみつ餃子 ◆8X2XSCHEME
2022/02/18(金) 00:25:30.70ID:fowo2HBL >>951
なんでそんなことになるんだろうな?
コンパイラを信用してないからか?
ワイは40代以上やけど C++ を使える状況であえて C 的なスタイルで書く気はしないわ。
だって単純に面倒くさいもの。
なんでそんなことになるんだろうな?
コンパイラを信用してないからか?
ワイは40代以上やけど C++ を使える状況であえて C 的なスタイルで書く気はしないわ。
だって単純に面倒くさいもの。
954デフォルトの名無しさん
2022/02/18(金) 00:26:19.39ID:VWFgwWIW で、相談は?
955デフォルトの名無しさん
2022/02/18(金) 01:20:21.17ID:x3azmRP7 Cの文法が覚えられる限界なんでしょうな
956デフォルトの名無しさん
2022/02/18(金) 02:48:20.56ID:y/CjghL0 人事部の人がCとC++の見分けがつかなくて
会計上コンパイラ代に「C++」と書いてあったから
C++で募集かけてたんじゃね?
会計上コンパイラ代に「C++」と書いてあったから
C++で募集かけてたんじゃね?
958デフォルトの名無しさん
2022/02/18(金) 13:34:17.22ID:NqXxszTV959デフォルトの名無しさん
2022/02/18(金) 14:23:13.29ID:y/CjghL0 自分は何かできるとでも言いたげだな
すべて作り直すということがどのくらいの工数かわかってないんだろ
すべて作り直すということがどのくらいの工数かわかってないんだろ
960デフォルトの名無しさん
2022/02/18(金) 15:06:16.89ID:tL/18rdC >>958
俺もそう思う
現場の不平不満ばかりの意識高い系エンジニアさん多いよね
その現場を改善するわけでもなく文句いうだけ
高いスキルあるならそんな現場やめれば?
単価150万超えるようなとこなら周りにも高スキルな人がたくさんいるよ?
現場の文句言うだけの奴は結局その現場がお似合いのレベルなんだよ、っていつも思ってる
俺もそう思う
現場の不平不満ばかりの意識高い系エンジニアさん多いよね
その現場を改善するわけでもなく文句いうだけ
高いスキルあるならそんな現場やめれば?
単価150万超えるようなとこなら周りにも高スキルな人がたくさんいるよ?
現場の文句言うだけの奴は結局その現場がお似合いのレベルなんだよ、っていつも思ってる
961デフォルトの名無しさん
2022/02/18(金) 15:32:05.24ID:dD/fDJ+w962デフォルトの名無しさん
2022/02/18(金) 15:57:07.65ID:NqXxszTV >>955
無職が言いそうなことだ。無能なブロジェクトリーダーはCプロジェクトをあっさりとC++化できる、
存在しないスーパープログラマを探し続けるがそんな奴はどこにもいない。
そんなスーパーPGがいたらATMはバグで止まらない。C++書ける奴はCをバカにしないよ。
無職が言いそうなことだ。無能なブロジェクトリーダーはCプロジェクトをあっさりとC++化できる、
存在しないスーパープログラマを探し続けるがそんな奴はどこにもいない。
そんなスーパーPGがいたらATMはバグで止まらない。C++書ける奴はCをバカにしないよ。
963デフォルトの名無しさん
2022/02/18(金) 16:33:00.65ID:xb2lszF9 バグ出たまま放置してるヤツはバカにするけど
964デフォルトの名無しさん
2022/02/18(金) 17:01:46.61ID:1bc1nI/9 正当な理由もなくスマポやSTLを嫌がった結果
生ポインタをガチャガチャいじくり回したスパゲティコード書いて
それが遅くて非効率でバグまみれリークだらけというのは非常によくあるけど
そういうCプログラマ様も敬わなきゃダメ?
生ポインタをガチャガチャいじくり回したスパゲティコード書いて
それが遅くて非効率でバグまみれリークだらけというのは非常によくあるけど
そういうCプログラマ様も敬わなきゃダメ?
965デフォルトの名無しさん
2022/02/18(金) 17:04:32.95ID:y/CjghL0 バイアス満載だな
落ち着けよw
落ち着けよw
966デフォルトの名無しさん
2022/02/18(金) 17:19:05.78ID:xb2lszF9 そういうどうしょうもないのはヒソカに心の奥でバカにしていいし反面教示にすべし
967デフォルトの名無しさん
2022/02/18(金) 18:15:33.32ID:jeS+/hUn マ板かここ?
968デフォルトの名無しさん
2022/02/18(金) 20:06:32.33ID:z2RoOtDN 80対20の法則は大事だし、動くコードを作ってから最適化をした方がいいって偉い人も言ってた気がする
リソース管理はとりあえずスマポを使うのが吉だと思ってます
リソース管理はとりあえずスマポを使うのが吉だと思ってます
969デフォルトの名無しさん
2022/02/18(金) 20:12:42.95ID:N0FOn5a0 自分で責任もって結合テストする覚悟があるんならいくらでもCからC++に置き換えていいと思うよ
970デフォルトの名無しさん
2022/02/18(金) 20:34:30.32ID:y/CjghL0 とテストの基本がわかってないやつが言う
C++に動的な型宣言はないからな
C++に動的な型宣言はないからな
971デフォルトの名無しさん
2022/02/18(金) 20:38:01.63ID:NqXxszTV 効率ガーと言うが、CをC++に書き換えて高速化、省メモリ化するなんてむしろレアケース。
972デフォルトの名無しさん
2022/02/18(金) 20:44:21.03ID:y/CjghL0 C++の隠れたコードが何をしてるか解ってないやつが
C++にしたら高速化した低速化したって言語のせいにするんだよ
C++にしたら高速化した低速化したって言語のせいにするんだよ
973デフォルトの名無しさん
2022/02/18(金) 21:35:17.98ID:UZsjZs7N こういうとき悲しいのはね
CもC++もたいして知りもしねえド素人のアマチュアが
想像と思い込みでもっていろいろレスつけてくること
噴飯ものだぞ?
CもC++もたいして知りもしねえド素人のアマチュアが
想像と思い込みでもっていろいろレスつけてくること
噴飯ものだぞ?
974デフォルトの名無しさん
2022/02/18(金) 23:03:13.88ID:k8EYArXJ c++書いてたとき何ちゃらストリームやらのファイル操作遅すぎてムリすぎて結局fopen使ったような…
まあ便利は便利なんだけど利便さ求めるならそもそもpythonとかに逃げますし
C++17未満?だとfilesystem使えなくてこんな簡単なことも出来ないのかと絶望した気もする
まあ便利は便利なんだけど利便さ求めるならそもそもpythonとかに逃げますし
C++17未満?だとfilesystem使えなくてこんな簡単なことも出来ないのかと絶望した気もする
975デフォルトの名無しさん
2022/02/18(金) 23:08:29.98ID:qZSzRw8s std::endlがフラッシュ兼ねてるのを知らずに使うとクソ遅くなる
976デフォルトの名無しさん
2022/02/19(土) 00:57:04.84ID:kSnJ/KwP 初心者にC++は早い
C++は人類に対する挑戦
C++は人類に対する挑戦
977デフォルトの名無しさん
2022/02/19(土) 01:05:13.77ID:Sb0QDKc0 みんな最初は初心者
978デフォルトの名無しさん
2022/02/19(土) 01:28:32.55ID:MLwzxLgZ Appleのcopland、Googleのandroid、MSのEdgeの失敗を見れば
予算と開発期間が十分にあれば解決すると思ってるならそれは間違いだと理解するだろう。
生ポインタをこねくり回す程度で脳みそのキャパが越えてるようじゃC++使ってもまともな実装なんてできない。
隠れたコードも何もC、C++はアセンブラの知識は必須だ。バイナリを読めるようになってから文句言え。
予算と開発期間が十分にあれば解決すると思ってるならそれは間違いだと理解するだろう。
生ポインタをこねくり回す程度で脳みそのキャパが越えてるようじゃC++使ってもまともな実装なんてできない。
隠れたコードも何もC、C++はアセンブラの知識は必須だ。バイナリを読めるようになってから文句言え。
979デフォルトの名無しさん
2022/02/19(土) 03:09:27.37ID:kSnJ/KwP フムフムアセンブラが必須か…
https://godbolt.org/z/jq16j83We
#include<vector>
using namespace std;
void f(char* dst, const char* src_start, const char* src_end) {
const char*s = src_start;
char*p = dst;
while (s != src_end) *p++ = *s++;
}
template<typename Dst, typename Src>
void f2(Dst dst, Src src_start, Src src_end) {
auto s = src_start;
auto p = dst;
while (s != src_end) *p++ = *s++;
}
void hoge() {
vector<char> dst(1024), src(1024);
f(dst.data(), src.data(), src.data() + src.size());
f2(src.begin(), dst.begin(), dst.end());
}
これってどうしてhoge側だとSIMD使わないの?
C++コードでSIMD使わせるにはどうしたらいい?
https://godbolt.org/z/jq16j83We
#include<vector>
using namespace std;
void f(char* dst, const char* src_start, const char* src_end) {
const char*s = src_start;
char*p = dst;
while (s != src_end) *p++ = *s++;
}
template<typename Dst, typename Src>
void f2(Dst dst, Src src_start, Src src_end) {
auto s = src_start;
auto p = dst;
while (s != src_end) *p++ = *s++;
}
void hoge() {
vector<char> dst(1024), src(1024);
f(dst.data(), src.data(), src.data() + src.size());
f2(src.begin(), dst.begin(), dst.end());
}
これってどうしてhoge側だとSIMD使わないの?
C++コードでSIMD使わせるにはどうしたらいい?
980デフォルトの名無しさん
2022/02/19(土) 04:43:40.93ID:2+bZAOZm valarray
981デフォルトの名無しさん
2022/02/19(土) 04:46:13.97ID:kSnJ/KwP 不正解
982デフォルトの名無しさん
2022/02/19(土) 06:01:38.84ID:2+bZAOZm hoge側でどうSIMD使えって言いたいの?
inlineとかだったらしばくぞ
inlineとかだったらしばくぞ
983デフォルトの名無しさん
2022/02/19(土) 06:20:48.76ID:ZqDn11YK イントリンシック、でしょう?
984デフォルトの名無しさん
2022/02/19(土) 08:45:24.25ID:0ANF/iVA Intelのコンパイラに任せ
985デフォルトの名無しさん
2022/02/19(土) 09:52:14.21ID:kSnJ/KwP 1024 -> 1024 * 16にすると...
986デフォルトの名無しさん
2022/02/19(土) 09:57:47.91ID:kSnJ/KwP intrinsicは(inline)assemblerとほぼ同じなので、C#でしか使ったことないな
987デフォルトの名無しさん
2022/02/19(土) 10:03:29.25ID:mDQ0X8WX アセンブラなどの理解は「低レイヤを知りたい人向けのCコンパイラ作成入門」が結構勉強になったんですが、バイナリは何で勉強すればいいですかね?
988デフォルトの名無しさん
2022/02/19(土) 10:34:54.00ID:0ANF/iVA >>985
キャッシュメモリのアレで遅くなるやつか?
キャッシュメモリのアレで遅くなるやつか?
989デフォルトの名無しさん
2022/02/19(土) 10:44:00.07ID:kSnJ/KwP さぁ?・・・callしたり判定用コードやサイズ計算とかオーバーヘッドがあるからじゃね?知らんw
990デフォルトの名無しさん
2022/02/19(土) 11:57:14.27ID:kSnJ/KwP991デフォルトの名無しさん
2022/02/19(土) 12:08:36.38ID:2h4SA+VW CADソフトCANDYの作者の発言。
>数年前に,私の会社で組み込み機器向けのプロジェクトで,C++コンパイラが安定して動かないので
>Cでプログラムを書くように私が指示したケースがあったのだが,
>何人かのエンジニアが「今さらCなんかでプログラムを書けませんよ。
>クラスを使えなければスパゲッティコードになってしまいます」と猛反対をしてきた。
■ 第4回 オブジェクト指向の本質
https://gihyo.jp/lifestyle/serial/01/software_is_beautiful/0004
別のインタビューと補完すると、そのときC++の標準ライブラリ的なブツを著者が
C言語でババーっと書いて仕事させたという話だったはず(記憶モード
ちょっどこの昭和カヨ?!
>数年前に,私の会社で組み込み機器向けのプロジェクトで,C++コンパイラが安定して動かないので
>Cでプログラムを書くように私が指示したケースがあったのだが,
>何人かのエンジニアが「今さらCなんかでプログラムを書けませんよ。
>クラスを使えなければスパゲッティコードになってしまいます」と猛反対をしてきた。
■ 第4回 オブジェクト指向の本質
https://gihyo.jp/lifestyle/serial/01/software_is_beautiful/0004
別のインタビューと補完すると、そのときC++の標準ライブラリ的なブツを著者が
C言語でババーっと書いて仕事させたという話だったはず(記憶モード
ちょっどこの昭和カヨ?!
992デフォルトの名無しさん
2022/02/19(土) 12:18:20.98ID:kSnJ/KwP 組み込み機器用のCPUって特殊なんで、コンパイラが安定しないなんてよくある話
オブジェクト指向のメリットの本質についての話なので、可能/不可能が実装言語に依存しないというのもよくある話(楽かどうかは別)
別に昭和でも平成でも令和でも変わってないけど、>>991に伝わってないのは確か
オブジェクト指向のメリットの本質についての話なので、可能/不可能が実装言語に依存しないというのもよくある話(楽かどうかは別)
別に昭和でも平成でも令和でも変わってないけど、>>991に伝わってないのは確か
993デフォルトの名無しさん
2022/02/19(土) 12:50:13.00ID:gFosEVVi GTKのGObjectはCでオブジェクト指向を実現している訳だけど
(ただし学習コストが低いとは言えないと思う)
(ただし学習コストが低いとは言えないと思う)
994デフォルトの名無しさん
2022/02/19(土) 12:53:15.56ID:2h4SA+VW そんなん言ったらX Window SystemもC言語でオブジェクト指向しているらしい
らしい(伝聞
らしい(伝聞
995デフォルトの名無しさん
2022/02/19(土) 13:05:47.37ID:x/upE6G9 当たり前だけどアセンブラでもオブジェクト指向はできるし還暦の爺さん(とは言ってもなかなかの人ではある)が10年以上前に書いた記事だしまじで何を言いたいのかよくわからん
996デフォルトの名無しさん
2022/02/19(土) 13:20:12.26ID:kSnJ/KwP 分からん分からん言うのは誰でも出来るし、どんな初心者でも何に対してもそう言える
なので、具体的に分からん部分を指摘できない人は初心者か、荒らしだと思ってる
なので、具体的に分からん部分を指摘できない人は初心者か、荒らしだと思ってる
レス数が950を超えています。1000を超えると書き込みができなくなります。
ニュース
- 台湾有事での集団的自衛権行使に賛成48%、「反対」が44.2% ★2 [♪♪♪★]
- 【淡路島】88歳男が好意を理由に60歳女性宅へ侵入か 「下の毛がほしい」不適切メモを残す ストーカー容疑で再逮捕 洲本市 [nita★]
- 中国「国連安保理の許可なしに日本攻撃可能」 Xで旧敵国条項に言及… ★13 [BFU★]
- なぜ女性トイレには行列ができる? 全国1092カ所を調べた61歳の疑問、国を動かす [♪♪♪★]
- 【NHK】受信料の未払い督促を10倍に強化… 支払い拒否が続くと民事手続きも 「カーナビも受信料いただきます」方針 [冬月記者★]
- 『ドラゴンボール』人気キャラ投票、現在の順位発表 意外な人物がTOP10入り [ひかり★]
- 日本人の73%「中国が嫌い」日本の右傾化止まらない [165981677]
- 台湾兄さん、この時世に日本旅行支持で勢い。なのにジャップはバットで殴打… [152212454]
- 高市早苗「外交交渉でマウント取れる服、無理をしてでも買わなくてはいかんかもなぁ。」ネトウヨ向けにアピールwwwwwwwwwww [834922174]
- 3時までに着いたレス×100m走る
- 日本人の48%覚悟完了… [819729701]
- 【実況】博衣こよりのえちえちゼルダの伝説 ムジュラの仮面🧪 ★4
