前スレ
C++相談室 part157
https://mevius.5ch.net/test/read.cgi/tech/1628474251/
C++相談室 part158
■ このスレッドは過去ログ倉庫に格納されています
2021/11/15(月) 18:49:18.44ID:I69rZ/Of
423デフォルトの名無しさん
2021/12/14(火) 19:16:16.31ID:l53ksWPX424デフォルトの名無しさん
2021/12/14(火) 20:13:02.90ID:kTLKUa7o a{{1, 2}, {3, 4}}で初期化できるようにしようぜっていう提案もあったけど
初期化ルールがますますカオスになるので却下された
初期化ルールがますますカオスになるので却下された
425デフォルトの名無しさん
2021/12/16(木) 18:55:44.40ID:Q3qUbeDH テンプレートで関数の引数を書く方法がわからないんですが
sort(V.begin(), V.end(), ラムダ式)
を自作するにはどうやればいいんでしょうか
sort(V.begin(), V.end(), ラムダ式)
を自作するにはどうやればいいんでしょうか
426デフォルトの名無しさん
2021/12/16(木) 18:59:42.63ID:oxWy3zzs まず日本語から勉強してください
「テンプレートで関数の引数を書く方法」と「sort(V.begin(), V.end(), ラムダ式)を自作」には何の関連もありません
「テンプレートで関数の引数を書く方法」と「sort(V.begin(), V.end(), ラムダ式)を自作」には何の関連もありません
427デフォルトの名無しさん
2021/12/16(木) 18:59:43.14ID:oxWy3zzs まず日本語から勉強してください
「テンプレートで関数の引数を書く方法」と「sort(V.begin(), V.end(), ラムダ式)を自作」には何の関連もありません
「テンプレートで関数の引数を書く方法」と「sort(V.begin(), V.end(), ラムダ式)を自作」には何の関連もありません
428デフォルトの名無しさん
2021/12/16(木) 19:10:09.52ID:Q3qUbeDH 自己解決しました
リンク先みながらこれで出来ました
template<typename FNC>
void usort (FNC&& fuc) { cout<< fuc(2) <<endl; }
int main() {
usort( [](int x) { return x+2; } );
}
https://zenn.dev/rita0222/articles/4bb5023e48c134
リンク先みながらこれで出来ました
template<typename FNC>
void usort (FNC&& fuc) { cout<< fuc(2) <<endl; }
int main() {
usort( [](int x) { return x+2; } );
}
https://zenn.dev/rita0222/articles/4bb5023e48c134
429デフォルトの名無しさん
2021/12/16(木) 19:16:51.92ID:oxWy3zzs 質問と回答はおろか日本語も覚束ない人の記事の宣伝はどうかと思いますよ
430デフォルトの名無しさん
2021/12/16(木) 19:28:45.53ID:/OSP+i6s ごめん例のアスペじゃないけど俺もこの質問は日本語がひどいと思う
「テンプレートを使って、関数を引数とする関数を書く方法がわからない」でいいんだよね?
「で」も「の」も意味が複数ある助詞だから次から気を付けような
「テンプレートを使って、関数を引数とする関数を書く方法がわからない」でいいんだよね?
「で」も「の」も意味が複数ある助詞だから次から気を付けような
431デフォルトの名無しさん
2021/12/16(木) 22:08:17.98ID:oxWy3zzs 自演乙
432デフォルトの名無しさん
2021/12/19(日) 22:39:42.44ID:G+T88tW/ VC++の質問になってしまうかもしれませんがよろしくお願い致します。
void Func() throw (const char*);とした関数で静的に例外の型チェックをしてコンパイルエラーなり吐いてもらうことはできないのでしょうか?
try { Func(); } catch (const wchar_t* ex) {}と書いてしまった場合等にコンパイルエラーを出してもらいたいです
void Func() throw (const char*);とした関数で静的に例外の型チェックをしてコンパイルエラーなり吐いてもらうことはできないのでしょうか?
try { Func(); } catch (const wchar_t* ex) {}と書いてしまった場合等にコンパイルエラーを出してもらいたいです
433デフォルトの名無しさん
2021/12/19(日) 23:32:36.81ID:JPMZsaO2 >>432
合法なものにエラーとかねえわ
合法なものにエラーとかねえわ
434デフォルトの名無しさん
2021/12/19(日) 23:52:05.34ID:FKQX+MA6 例外指定はもうすぐ消えてなくなる機能だから使うのやめた方がいいよ
435デフォルトの名無しさん
2021/12/20(月) 00:05:45.43ID:5GaBUmyD 例外指定は調べたらC++17で削除されてんだな。
例外指定は実行時のチェックで意味ないと思ってたから一度も使ったことない。
例外指定は実行時のチェックで意味ないと思ってたから一度も使ったことない。
436デフォルトの名無しさん
2021/12/20(月) 02:04:19.31ID:yobIy+EO throwで投げる例外を指定するのはC++11以降非推奨でC++17で削除された
例外を投げ得ることを示す(空の)throwもC++11以降非推奨でC++20で削除
https://ja.cppreference.com/w/cpp/language/except_spec
結論としては無理
例外を投げ得ることを示す(空の)throwもC++11以降非推奨でC++20で削除
https://ja.cppreference.com/w/cpp/language/except_spec
結論としては無理
437デフォルトの名無しさん
2021/12/20(月) 02:10:12.31ID:WdsmvZWK 意味わからんもんなthrow接尾子
投げる例外全部把握出来んのかよって
投げる例外全部把握出来んのかよって
438デフォルトの名無しさん
2021/12/20(月) 07:30:27.08ID:zT9OLvmm ファイルオープンの失敗をどうやって間違えずに処理させるんだよ
439デフォルトの名無しさん
2021/12/20(月) 07:31:31.20ID:zT9OLvmm 20年ちかくそれがいいことだっつってやってたんだぞ
440デフォルトの名無しさん
2021/12/20(月) 07:47:02.08ID:raeshKom void aho() throw(std::bad_exception);
441デフォルトの名無しさん
2021/12/20(月) 09:50:56.71ID:TszysAyf ポインタ型変数のスタック消費が4バイト(32bit OS)または8バイト(64bit OS)なのはわかるんだけど、
参照型変数ってスタックを何バイト消費するの?
参照型変数ってスタックを何バイト消費するの?
442はちみつ餃子 ◆8X2XSCHEME
2021/12/20(月) 11:34:47.56ID:GbIoN43K >>441
GCC の資料によれば Itanium C++ ABI に従う。 (Itanium 以外でも ABI は Itanium ということらしい。)
https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html#abi.cxx_interface
で、 ABI のほうでの定義では引数・返却値における参照の実態はポインタだし、
POD のレイアウトとしても参照はポインタのように扱われる。
https://itanium-cxx-abi.github.io/cxx-abi/abi.html#reference-parameters
https://itanium-cxx-abi.github.io/cxx-abi/abi.html#reference-return-values
https://itanium-cxx-abi.github.io/cxx-abi/abi.html#pod
内部的には参照はほぼポインタだと思っていいんでないの。
自動でデリファレンスするポインタって感じ。
ちなみに言語仕様的には参照はオブジェクトではなく参照先のオブジェクトの別名のように扱われるので、
sizeof に渡したときには参照先の型の大きさが返ってくることになってる。
sizeof(int&) みたいにしたら sizeof(int) と同じ意味になるってことね。
GCC の資料によれば Itanium C++ ABI に従う。 (Itanium 以外でも ABI は Itanium ということらしい。)
https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html#abi.cxx_interface
で、 ABI のほうでの定義では引数・返却値における参照の実態はポインタだし、
POD のレイアウトとしても参照はポインタのように扱われる。
https://itanium-cxx-abi.github.io/cxx-abi/abi.html#reference-parameters
https://itanium-cxx-abi.github.io/cxx-abi/abi.html#reference-return-values
https://itanium-cxx-abi.github.io/cxx-abi/abi.html#pod
内部的には参照はほぼポインタだと思っていいんでないの。
自動でデリファレンスするポインタって感じ。
ちなみに言語仕様的には参照はオブジェクトではなく参照先のオブジェクトの別名のように扱われるので、
sizeof に渡したときには参照先の型の大きさが返ってくることになってる。
sizeof(int&) みたいにしたら sizeof(int) と同じ意味になるってことね。
443デフォルトの名無しさん
2021/12/20(月) 11:49:32.57ID:LVF1I4ij 確認してみた。
$ gcc -x c++ -S - -o - <<EOF | sed -n '/^main:/,$p;/\$2/q'
int main() {
int a = 1;
int& r = a;
r = 2;
return a;
}
EOF
main:
.LFB0:
.cfi_startproc
endbr64
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
subq $32, %rsp
movq %fs:40, %rax
movq %rax, -8(%rbp)
xorl %eax, %eax
movl $1, -20(%rbp)
leaq -20(%rbp), %rax
movq %rax, -16(%rbp)
movq -16(%rbp), %rax
movl $2, (%rax)
$ gcc -x c++ -S - -o - <<EOF | sed -n '/^main:/,$p;/\$2/q'
int main() {
int a = 1;
int& r = a;
r = 2;
return a;
}
EOF
main:
.LFB0:
.cfi_startproc
endbr64
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
subq $32, %rsp
movq %fs:40, %rax
movq %rax, -8(%rbp)
xorl %eax, %eax
movl $1, -20(%rbp)
leaq -20(%rbp), %rax
movq %rax, -16(%rbp)
movq -16(%rbp), %rax
movl $2, (%rax)
444デフォルトの名無しさん
2021/12/20(月) 12:07:37.09ID:IpG9nRdD 参照先が見えてるところでは
参照先へ直にアクセスしてコストゼロだったり
参照引数をとる関数でもインライン化された場合はゼロ
てなことがなければポインタ1個分
参照先へ直にアクセスしてコストゼロだったり
参照引数をとる関数でもインライン化された場合はゼロ
てなことがなければポインタ1個分
445デフォルトの名無しさん
2021/12/20(月) 12:13:52.79ID:LVF1I4ij そういうのは最適化なので無関係
$ gcc -O3 -x c++ -S - -o - <<EOF | sed -n '/^main:/,$p;/ret/q'
int main() {
int a = 1;
int& r = a;
r = 2;
return a;
}
EOF
main:
.LFB0:
.cfi_startproc
endbr64
movl $2, %eax
ret
$ gcc -O3 -x c++ -S - -o - <<EOF | sed -n '/^main:/,$p;/ret/q'
int main() {
int a = 1;
int& r = a;
r = 2;
return a;
}
EOF
main:
.LFB0:
.cfi_startproc
endbr64
movl $2, %eax
ret
446デフォルトの名無しさん
2021/12/20(月) 21:41:58.49ID:c8hM8/Kk 最適化する前の意味合いとして
ポインタ1個分のコストを必ず発生するという規定なんかあったか?
ポインタ1個分のコストを必ず発生するという規定なんかあったか?
447デフォルトの名無しさん
2021/12/20(月) 21:44:15.52ID:LVF1I4ij 誰もそんな話はしてないので、お前が調べて貼れ
448デフォルトの名無しさん
2021/12/20(月) 22:11:35.36ID:c8hM8/Kk 444へのレスで最適化がどうたらぬかしといて
そんな話はしてない、かよ
アセンブラ貼ってた威勢はどこへ吹っ飛んだんだかw
いいよ、逃げたきゃ逃がしてやるよヘタレ野郎
そんな話はしてない、かよ
アセンブラ貼ってた威勢はどこへ吹っ飛んだんだかw
いいよ、逃げたきゃ逃がしてやるよヘタレ野郎
449デフォルトの名無しさん
2021/12/20(月) 22:16:05.29ID:LVF1I4ij 最初から処理系(gcc)の話しかしてない。規定の話をしてるのはお前だけだ。早く貼れ。逃げるな。
450デフォルトの名無しさん
2021/12/20(月) 23:16:36.18ID:TszysAyf unique_ptrオブジェクトとその実体を参照する参照型を使えば、
スタック消費を抑えつつスタック変数を使っているかのようなソースコードが書けそうだけど
スタック消費を抑えつつスタック変数を使っているかのようなソースコードが書けそうだけど
451デフォルトの名無しさん
2021/12/21(火) 00:06:02.44ID:Ug1txKhz それは全くレイヤーの違う話
アプリのコンテキストを構造体/クラスにしてヒープかスタティックに置くだけで実現できる
実現手段としてunique_ptrを使いたいなら使えばいいというだけ
アプリのコンテキストを構造体/クラスにしてヒープかスタティックに置くだけで実現できる
実現手段としてunique_ptrを使いたいなら使えばいいというだけ
452デフォルトの名無しさん
2021/12/21(火) 00:10:51.14ID:QziEyx5H453デフォルトの名無しさん
2021/12/21(火) 00:20:05.56ID:Ug1txKhz 煽りではないんだが、俺はID:LVF1I4ij
454デフォルトの名無しさん
2021/12/21(火) 00:33:36.24ID:QziEyx5H >>453
レイヤーが違うとか、勝手に仕切るな
レイヤーが違うとか、勝手に仕切るな
455デフォルトの名無しさん
2021/12/21(火) 00:42:51.31ID:QziEyx5H 構造体/クラスをヒープに置いたところで、その構造体/クラスのメンバー関数でスタック変数を使ってたら意味がないだろ
何が問題提起されているのか理解してから書き込んでくれ
何が問題提起されているのか理解してから書き込んでくれ
456デフォルトの名無しさん
2021/12/21(火) 01:02:00.74ID:Ug1txKhz スタック消費を抑えたいなら静的に確保するかヒープを使えばいいというだけの話でしょ。
struct app_context {int x;};
void func_old() {
int x = 0;
}
void func_new(app_context* ctx) {
ctx->x = 0;
}
int main() {
auto ctx = new app_context();
func_old();
func_new(ctx);
delete ctx;
return 0;
}
各関数/メソッド単位で細かくしたいなら、try〜catchでやってもいいし、スマートポインタを実装・流用してもいい。その際にunique_ptrを使いたいなら使えばいいというだけ。
伝わらないようなので少し細かく書いた。伝わるんだろうか・・・。
struct app_context {int x;};
void func_old() {
int x = 0;
}
void func_new(app_context* ctx) {
ctx->x = 0;
}
int main() {
auto ctx = new app_context();
func_old();
func_new(ctx);
delete ctx;
return 0;
}
各関数/メソッド単位で細かくしたいなら、try〜catchでやってもいいし、スマートポインタを実装・流用してもいい。その際にunique_ptrを使いたいなら使えばいいというだけ。
伝わらないようなので少し細かく書いた。伝わるんだろうか・・・。
457デフォルトの名無しさん
2021/12/21(火) 01:16:14.39ID:QziEyx5H >>456
君は回答者に向いてない
君は回答者に向いてない
458デフォルトの名無しさん
2021/12/21(火) 01:18:02.55ID:QziEyx5H アムロの父親みたいな変な書き込み、リアルに遭遇するとやはり引く
459デフォルトの名無しさん
2021/12/21(火) 01:18:43.76ID:Ug1txKhz >>457
質問したいレイヤと解決策のレイヤが合ってないだけw
質問したいレイヤと解決策のレイヤが合ってないだけw
460デフォルトの名無しさん
2021/12/21(火) 01:27:03.87ID:QziEyx5H 自覚なさそうなところがますますテム・レイ感あるわ
お大事に
お大事に
461デフォルトの名無しさん
2021/12/21(火) 01:46:16.28ID:Ug1txKhz 質問して複数人に回答してもらってるのに、ただ煽るだけの人に「自覚」とやらを問われてもねw
大好きなガンダムのたとえに勝手に満足して病んでてくれ
君にプログラミングは向いてない
大好きなガンダムのたとえに勝手に満足して病んでてくれ
君にプログラミングは向いてない
462デフォルトの名無しさん
2021/12/21(火) 01:50:07.69ID:QziEyx5H 今時特別な理由もなくnew演算子を使うC++プログラマは間違いなく無能だよ
463デフォルトの名無しさん
2021/12/21(火) 01:53:35.52ID:Ug1txKhz 理由はC++標準ライブラリを使用しない言語/処理系レベルの話をしていたから
464デフォルトの名無しさん
2021/12/21(火) 02:05:33.42ID:QziEyx5H ガンダムの記憶回路にとりつけるやつ好きなだけ作ってていいぞ
465デフォルトの名無しさん
2021/12/21(火) 02:17:40.01ID:Ug1txKhz 妄想の中でもニュータイプじゃない君にプログラミングは無理w
ガンダムに辿り着けずコロニー内で果てる
ガンダムに辿り着けずコロニー内で果てる
466デフォルトの名無しさん
2021/12/21(火) 14:30:10.99ID:bvwR7M/G テンプレートを引数に取る関数で、
その入力として、vectorと配列を取るような関数で、いい書き方ってないですかね?
// vector向け
template<class T>int sum(const T& v, int size)
{
int acc = 0;
for(int i = 0 ; i < size ; i++){acc+=v[i];}
return acc;
}
内容同じなのに配列向けに
template<class T>int sum(const T* v, int size)
を作ってるけど一緒に表記できないかな、みたいな
その入力として、vectorと配列を取るような関数で、いい書き方ってないですかね?
// vector向け
template<class T>int sum(const T& v, int size)
{
int acc = 0;
for(int i = 0 ; i < size ; i++){acc+=v[i];}
return acc;
}
内容同じなのに配列向けに
template<class T>int sum(const T* v, int size)
を作ってるけど一緒に表記できないかな、みたいな
467はちみつ餃子 ◆8X2XSCHEME
2021/12/21(火) 15:12:48.55ID:f1yxmqA1 >>466
???
その定義で配列も受け取れるけど。
int main(void) {
int x[] = {1, 2, 3};
std::cout << sum(x, 3) << std::endl;
}
???
その定義で配列も受け取れるけど。
int main(void) {
int x[] = {1, 2, 3};
std::cout << sum(x, 3) << std::endl;
}
468デフォルトの名無しさん
2021/12/21(火) 15:20:59.50ID:Ug1txKhz vectorならiteratorにしてもいいと思う
#include <vector>
#include <iostream>
using namespace std;
template<class T>int sum(const T begin, const T end) {
int acc = 0;
for(T i = begin; i != end; ++i){acc+=*i;}
return acc;
}
int main() {
int a[] = {1,2,3};
const size_t s = sizeof(a)/sizeof(a[0]);
vector<int> v(a, a + s);
cout << sum(a, a + s - 1) << endl;
cout << sum(v.begin(), v.begin() + (v.size() - 1)) << endl;
return 0;
}
#include <vector>
#include <iostream>
using namespace std;
template<class T>int sum(const T begin, const T end) {
int acc = 0;
for(T i = begin; i != end; ++i){acc+=*i;}
return acc;
}
int main() {
int a[] = {1,2,3};
const size_t s = sizeof(a)/sizeof(a[0]);
vector<int> v(a, a + s);
cout << sum(a, a + s - 1) << endl;
cout << sum(v.begin(), v.begin() + (v.size() - 1)) << endl;
return 0;
}
469デフォルトの名無しさん
2021/12/21(火) 15:35:03.48ID:bvwR7M/G470デフォルトの名無しさん
2021/12/21(火) 15:39:21.19ID:sStr75A4471デフォルトの名無しさん
2021/12/21(火) 15:47:15.24ID:msz2/cZB 本来はrangeの出番なんだがな
導入が遅れたばかりに……
導入が遅れたばかりに……
472デフォルトの名無しさん
2021/12/21(火) 16:45:50.91ID:fi3Z01x+ #include <iostream>
#include <vector>
#include <array>
#include <string>
using namespace std;
template<typename Iter>
auto sum(Iter a, Iter b) {
using value_type = remove_const_t<remove_reference_t<decltype(*a)>>;
value_type acc {};
while (a != b) acc += *a++;
return acc;
}
int main() {
const int a[] { 1, 2, 3 };
vector<int> v { 4, 5, 6 };
array<double, 3> d { 3.5, 1.2, 0.9 };
const string s[] { "u", "n" "k", "o" };
cout << sum(begin(a), end(a)) << endl;
cout << sum(begin(v), end(v)) << endl;
cout << sum(begin(d), end(d)) << endl;
cout << sum(begin(s), end(s)) << endl;
return 0;
}
#include <vector>
#include <array>
#include <string>
using namespace std;
template<typename Iter>
auto sum(Iter a, Iter b) {
using value_type = remove_const_t<remove_reference_t<decltype(*a)>>;
value_type acc {};
while (a != b) acc += *a++;
return acc;
}
int main() {
const int a[] { 1, 2, 3 };
vector<int> v { 4, 5, 6 };
array<double, 3> d { 3.5, 1.2, 0.9 };
const string s[] { "u", "n" "k", "o" };
cout << sum(begin(a), end(a)) << endl;
cout << sum(begin(v), end(v)) << endl;
cout << sum(begin(d), end(d)) << endl;
cout << sum(begin(s), end(s)) << endl;
return 0;
}
473デフォルトの名無しさん
2021/12/21(火) 16:51:06.96ID:msz2/cZB std::iterator_traits使おうよ
474デフォルトの名無しさん
2021/12/21(火) 16:56:11.01ID:fi3Z01x+ #include <iostream>
#include <vector>
#include <array>
#include <string>
#include <iterator>
using namespace std;
template<typename Iter>
auto sum(Iter a, Iter b) {
using value_type = typename iterator_traits<Iter>::value_type;
value_type acc {};
while (a != b) acc += *a++;
return acc;
}
int main() {
const int a[] { 1, 2, 3 };
vector<int> v { 4, 5, 6 };
array<double, 3> d { 3.5, 1.2, 0.9 };
const string s[] { "u", "n" "k", "o" };
cout << sum(begin(a), end(a)) << endl;
cout << sum(begin(v), end(v)) << endl;
cout << sum(begin(d), end(d)) << endl;
cout << sum(begin(s), end(s)) << endl;
return 0;
}
#include <vector>
#include <array>
#include <string>
#include <iterator>
using namespace std;
template<typename Iter>
auto sum(Iter a, Iter b) {
using value_type = typename iterator_traits<Iter>::value_type;
value_type acc {};
while (a != b) acc += *a++;
return acc;
}
int main() {
const int a[] { 1, 2, 3 };
vector<int> v { 4, 5, 6 };
array<double, 3> d { 3.5, 1.2, 0.9 };
const string s[] { "u", "n" "k", "o" };
cout << sum(begin(a), end(a)) << endl;
cout << sum(begin(v), end(v)) << endl;
cout << sum(begin(d), end(d)) << endl;
cout << sum(begin(s), end(s)) << endl;
return 0;
}
475デフォルトの名無しさん
2021/12/21(火) 17:32:40.16ID:Ug1txKhz sumがunkoは独創的だと思うけど、戻り値の型はテンプレート引数でいいかもね
476sage
2021/12/21(火) 18:15:52.03ID:qDHWQ1/Y ↓こんなコード書いてるんですが,もっとエレガントに代入できませんか?
a[0]=*ptr;
a[1]=*(ptr+1);
a[2]=*(ptr+2);
a[0]=*ptr;
a[1]=*(ptr+1);
a[2]=*(ptr+2);
477蟻人間 ◆T6xkBnTXz7B0
2021/12/21(火) 18:28:20.41ID:NT9maPPc ptr[1]
478デフォルトの名無しさん
2021/12/21(火) 19:09:14.75ID:qDHWQ1/Y479デフォルトの名無しさん
2021/12/21(火) 20:23:30.29ID:iHW7b2cO std::copy(ptr, ptr + 3, a);
僕はfor文のほうが好きです
僕はfor文のほうが好きです
480デフォルトの名無しさん
2021/12/21(火) 20:25:38.21ID:UPYLxpzi C++98以前の化石
481デフォルトの名無しさん
2021/12/21(火) 21:03:47.64ID:msz2/cZB std::copy_nもあるぞ
482デフォルトの名無しさん
2021/12/22(水) 18:49:46.59ID:ycAkB2VB483デフォルトの名無しさん
2021/12/22(水) 19:44:38.16ID:VkqlmauA 何に使いたいのか知らないけど、C++やめてRustの方がいいんじゃないの?
484デフォルトの名無しさん
2021/12/22(水) 20:00:31.77ID:j6Uulo2p 高速grepツールとして有名なripgrepはRustで作られてるからRustは優れた言語なのだろう、ぐらいなことは察せられるが
485デフォルトの名無しさん
2021/12/23(木) 08:08:59.49ID:zbE03cOE >>483
rustなんてプログラム初級者に勧めるなよ。
あんなの習熟した上級者向けの言語だわ。c++以上に初級者向け解説が無いのは致命的。
あと、Rustはスレ違いだからな。このコメにもレスするなよ。
rustなんてプログラム初級者に勧めるなよ。
あんなの習熟した上級者向けの言語だわ。c++以上に初級者向け解説が無いのは致命的。
あと、Rustはスレ違いだからな。このコメにもレスするなよ。
486デフォルトの名無しさん
2021/12/23(木) 09:13:28.05ID:cFIeneRn487デフォルトの名無しさん
2021/12/23(木) 09:43:11.86ID:TuHGjVDJ Rust は良いアプローチだがどうしても記述量が多くなるから敬遠してる
488デフォルトの名無しさん
2021/12/23(木) 11:51:22.33ID:Gjq2t2pD >>486
ポインタは名札のメタファーを使った説明が確立しているけど、所有権、譲渡、借用、ライフタイムの初心者向け説明はクソみたいのしか無いだろ。そんなもん初級者に紹介するなよ。
スレ違いでわざわざ役立たずを紹介するやつは何を考えているんだろうかね?
ポインタは名札のメタファーを使った説明が確立しているけど、所有権、譲渡、借用、ライフタイムの初心者向け説明はクソみたいのしか無いだろ。そんなもん初級者に紹介するなよ。
スレ違いでわざわざ役立たずを紹介するやつは何を考えているんだろうかね?
489デフォルトの名無しさん
2021/12/23(木) 12:29:11.30ID:cFIeneRn490デフォルトの名無しさん
2021/12/23(木) 12:33:21.82ID:lsirm1I0 .hや.cpp以外からいじられたくない変数に対するインライン関数をパブリックに公開したいのですが、classを利用する以外にこのような事はできないのでしょうか?
staticや無名名前空間を利用するとcppファイルで利用できなくなりますしやはりclassを使えということでしょうか?
extern int value; //これは隠蔽したい
inline bool IsZero() { return value == 0; } //これはグローバルに利用してもらいたい
staticや無名名前空間を利用するとcppファイルで利用できなくなりますしやはりclassを使えということでしょうか?
extern int value; //これは隠蔽したい
inline bool IsZero() { return value == 0; } //これはグローバルに利用してもらいたい
491デフォルトの名無しさん
2021/12/23(木) 12:43:43.47ID:N07J633j namespace {
extern int value; //これは隠蔽したい
}
inline bool IsZero() { return value == 0; } //これはグローバルに利用してもらいたい
extern int value; //これは隠蔽したい
}
inline bool IsZero() { return value == 0; } //これはグローバルに利用してもらいたい
492デフォルトの名無しさん
2021/12/23(木) 12:44:08.09ID:IRDqWaPI493デフォルトの名無しさん
2021/12/23(木) 12:44:27.15ID:N07J633j もとい
namespace {
int value; //これは隠蔽したい
}
inline bool IsZero() { return value == 0; } //これはグローバルに利用してもらいたい
namespace {
int value; //これは隠蔽したい
}
inline bool IsZero() { return value == 0; } //これはグローバルに利用してもらいたい
494デフォルトの名無しさん
2021/12/23(木) 12:47:57.55ID:IRDqWaPI >>493
関数内にstatic変数持てなかったっけ?
関数内にstatic変数持てなかったっけ?
495デフォルトの名無しさん
2021/12/23(木) 12:52:37.53ID:IRDqWaPI496デフォルトの名無しさん
2021/12/23(木) 12:58:20.57ID:cFIeneRn497デフォルトの名無しさん
2021/12/23(木) 12:59:07.12ID:6GqfEn2+ valueの立ち位置が気になるが
extern(実行ファイル内で全部共通)するならinline関数のIsZeroが見えた時点でvalueも見えてないといけない
extern(実行ファイル内で全部共通)するならinline関数のIsZeroが見えた時点でvalueも見えてないといけない
498デフォルトの名無しさん
2021/12/23(木) 13:03:49.15ID:cFIeneRn class hoge {
static int value;
public:
static bool IsZero() { return value == 0; }
};
inline bool IsZero() { hoge::IsZero(); }
int main() {
return IsZero();
}
static int value;
public:
static bool IsZero() { return value == 0; }
};
inline bool IsZero() { hoge::IsZero(); }
int main() {
return IsZero();
}
499デフォルトの名無しさん
2021/12/23(木) 13:07:02.43ID:lsirm1I0500デフォルトの名無しさん
2021/12/23(木) 13:20:56.47ID:cFIeneRn JavaやC#でもそんなところに可視性の定義はない。
501デフォルトの名無しさん
2021/12/23(木) 17:32:16.18ID:SEEFcByD >>496
相手がなんでc++を使っているのかのニーズすら確認しないで何を独りよがりなことを言っているんだよ。
相手の目的を無視してスレ違いのツールを薦めるのはアホのやること。
Rustの伝道師はこんな低レベルなのかね。
相手がなんでc++を使っているのかのニーズすら確認しないで何を独りよがりなことを言っているんだよ。
相手の目的を無視してスレ違いのツールを薦めるのはアホのやること。
Rustの伝道師はこんな低レベルなのかね。
502デフォルトの名無しさん
2021/12/23(木) 17:36:54.99ID:N07J633j あーうるせえ
C++スレでRust Rust連呼すんな
寒すぎんだよ
C++スレでRust Rust連呼すんな
寒すぎんだよ
503デフォルトの名無しさん
2021/12/23(木) 18:02:45.75ID:cFIeneRn504デフォルトの名無しさん
2021/12/23(木) 19:12:55.62ID:AUfS9hAV >>493
試してないけどこんなのはどうかね。
#include <iostream>
#include <cstdlib>
class Accesser;
class Wall {
static int & val(){ static int v; return v; };
friend Accesser;
};
class Accesser {
public:
Accesser(){
int &v=Wall::val();
v=1;
}
~Accesser(){
std::cout << Wall::val()<< std::endl;
}
};
int main()
{
Accesser a;
std::cout << "Hello, Wandbox!" << std::endl;
}
試してないけどこんなのはどうかね。
#include <iostream>
#include <cstdlib>
class Accesser;
class Wall {
static int & val(){ static int v; return v; };
friend Accesser;
};
class Accesser {
public:
Accesser(){
int &v=Wall::val();
v=1;
}
~Accesser(){
std::cout << Wall::val()<< std::endl;
}
};
int main()
{
Accesser a;
std::cout << "Hello, Wandbox!" << std::endl;
}
505デフォルトの名無しさん
2021/12/23(木) 19:32:24.95ID:3yOXD4ws inlineで書きたいらしいので、それだとコンパイル単位で値が変わっちゃうのでは?
506デフォルトの名無しさん
2021/12/23(木) 19:55:38.05ID:CLdJLYY1507デフォルトの名無しさん
2021/12/23(木) 20:02:52.87ID:cFIeneRn クラス内に実装を書くなどヘッダにあればどの道インラインだと思う
508デフォルトの名無しさん
2021/12/23(木) 20:05:51.29ID:cFIeneRn staticは静的に確保されるので、インライン展開されても同じシンボルを参照する
509デフォルトの名無しさん
2021/12/23(木) 20:30:35.89ID:cFIeneRn510デフォルトの名無しさん
2021/12/23(木) 21:54:27.28ID:4lOSoN0i メモリ確保用途でvectorやstringつかい
ポインタアクセスすれば、new で確保するのと速度に大差ないとおもうんですが
実測すると10%〜くらいSTLつかうほうが速度低下するみたいなんですが
直メモリアクセスでも落ちるのはなぜなんでしょうか
ポインタアクセスすれば、new で確保するのと速度に大差ないとおもうんですが
実測すると10%〜くらいSTLつかうほうが速度低下するみたいなんですが
直メモリアクセスでも落ちるのはなぜなんでしょうか
511デフォルトの名無しさん
2021/12/23(木) 22:14:02.53ID:6YhOrdG1 その計測コード貼ってみ
多分メモリアクセスとは関係ない所で時間食ってる
多分メモリアクセスとは関係ない所で時間食ってる
512デフォルトの名無しさん
2021/12/23(木) 22:16:19.47ID:lsirm1I0513510
2021/12/23(木) 22:21:06.77ID:4lOSoN0i514デフォルトの名無しさん
2021/12/23(木) 22:38:03.27ID:MjSWMWRR 1秒もかかる?
515510
2021/12/23(木) 22:49:58.53ID:4lOSoN0i こっちだと大差がついてるんですが
家のPCでもideone.comよりも差が付きます vector確保のほうが遅い
https://paiza.io/projects/9wWo36-bjTCL_S0WcGbaWA
vector : 459.154 ms
new char : 184.758 ms
new int32 : 167.899 ms
家のPCでもideone.comよりも差が付きます vector確保のほうが遅い
https://paiza.io/projects/9wWo36-bjTCL_S0WcGbaWA
vector : 459.154 ms
new char : 184.758 ms
new int32 : 167.899 ms
516510
2021/12/23(木) 22:55:16.12ID:4lOSoN0i 自己解決しました
メモリ確保と解放部分を含めて計測してたのを
コピー部分のみの測定にしたらほぼ一緒になりました
https://paiza.io/projects/ge5iOWrzGu2E2PjogsRlUw
vector : 219.947 ms
new char : 204.565 ms
new int32 : 214.644 ms
メモリ確保と解放部分を含めて計測してたのを
コピー部分のみの測定にしたらほぼ一緒になりました
https://paiza.io/projects/ge5iOWrzGu2E2PjogsRlUw
vector : 219.947 ms
new char : 204.565 ms
new int32 : 214.644 ms
517デフォルトの名無しさん
2021/12/23(木) 22:55:24.77ID:6YhOrdG1 ほとんどメルセンヌツイスタの実行時間じゃね
518デフォルトの名無しさん
2021/12/23(木) 22:56:40.08ID:MjSWMWRR 確保にかかってると思う?
一秒はさすがにないと思う。
何かおかしいな。
一秒はさすがにないと思う。
何かおかしいな。
519デフォルトの名無しさん
2021/12/23(木) 22:58:15.18ID:MjSWMWRR vector云々以前に、newバージョンも遅すぎると思う。
話にならないくらい。
i8008とかじゃないよね?
話にならないくらい。
i8008とかじゃないよね?
520デフォルトの名無しさん
2021/12/23(木) 23:00:56.66ID:6GqfEn2+ C++/CLIでstd::mutex使えないのなんでなん?
頑張ってWin32APIで代用する気力はあるけどわざわざ無効化されてる理由が知りたい
頑張ってWin32APIで代用する気力はあるけどわざわざ無効化されてる理由が知りたい
521510
2021/12/23(木) 23:05:52.89ID:4lOSoN0i メモリ確保・解放と、メルセンヌツイスタを外して計測したら
今度はvectorのほうが圧倒的に早いんですが
https://ideone.com/rKv4qv
vector : 237.55 ms
new int32 : 713.82 ms
今度はvectorのほうが圧倒的に早いんですが
https://ideone.com/rKv4qv
vector : 237.55 ms
new int32 : 713.82 ms
522デフォルトの名無しさん
2021/12/23(木) 23:26:56.25ID:4lOSoN0i 計測時間は、ある程度の長さで、オンライン実行環境のタイムアウトにならないように
ループ回数を変更してるので
ループ回数を変更してるので
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 「国民の憤りを引き起こした」中国側“高市首相発言の撤回改めて要求” [どどん★]
- 【インバウンド】中国からの“渡航自粛”…ツアー1000人分の直前キャンセル「キャンセル料は免除してくれ」 ことしいっぱいキャンセルに [1ゲットロボ★]
- 【芸能】日中関係悪化でエンタメ業界に大ダメージ… JO1の中国でのイベント中止、邦画は公開延期、STARTOアイドルへの影響も [冬月記者★]
- XやChatGPTで広範囲の通信障害 投稿や閲覧できず [蚤の市★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
- 【J SPORTS】FIFA U-17ワールドカップ ★10
- とらせん IPあり
- 巨専】
- こいせん 全レス転載禁止
- 【ATP】テニス総合実況スレ2025 Part 211【WTA】
- ネットでサッカー観戦◆2025-29
- Perfume・あ~ちゃんの結婚相手の一般男性、吉田カバンの社長と判明 [977261419]
- 地球から無限km先の場所ってどうなっているの?
- 日本、高市のお陰で破滅に近づくwwwwwwww
- 自民党議員「高市は先人が築き上げた日中関係を壊した。外務省が謝罪に言ってるが自分で責任を取れ」 [834922174]
- 🖐( -᷄ὢ)俺に挑むのはやめておけ……実力差がありすぎる
- 岡田克也「軽々しく存立危機事態とか言うべきじゃない」高市早苗「台湾で武力攻撃が発生したらどう考えても日本の存立危機事態」 [931948549]
