[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/22 21:10 / Filesize : 275 KB / Number-of Response : 1017
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part158



1 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 18:49:18.44 ID:I69rZ/Of.net]
前スレ
C++相談室 part157
https://mevius.5ch.net/test/read.cgi/tech/1628474251/

433 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 19:16:51.92 ID:oxWy3zzs.net]
質問と回答はおろか日本語も覚束ない人の記事の宣伝はどうかと思いますよ

434 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 19:28:45.53 ID:/OSP+i6s.net]
ごめん例のアスペじゃないけど俺もこの質問は日本語がひどいと思う

「テンプレートを使って、関数を引数とする関数を書く方法がわからない」でいいんだよね?
「で」も「の」も意味が複数ある助詞だから次から気を付けような

435 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 22:08:17.98 ID:oxWy3zzs.net]
自演乙

436 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 22:39:42.44 ID:G+T88tW/.net]
VC++の質問になってしまうかもしれませんがよろしくお願い致します。

void Func() throw (const char*);とした関数で静的に例外の型チェックをしてコンパイルエラーなり吐いてもらうことはできないのでしょうか?
try { Func(); } catch (const wchar_t* ex) {}と書いてしまった場合等にコンパイルエラーを出してもらいたいです

437 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 23:32:36.81 ID:JPMZsaO2.net]
>>432
合法なものにエラーとかねえわ

438 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 23:52:05.34 ID:FKQX+MA6.net]
例外指定はもうすぐ消えてなくなる機能だから使うのやめた方がいいよ

439 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 00:05:45.43 ID:5GaBUmyD.net]
例外指定は調べたらC++17で削除されてんだな。
例外指定は実行時のチェックで意味ないと思ってたから一度も使ったことない。

440 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 02:04:19.31 ID:yobIy+EO.net]
throwで投げる例外を指定するのはC++11以降非推奨でC++17で削除された
例外を投げ得ることを示す(空の)throwもC++11以降非推奨でC++20で削除

https://ja.cppreference.com/w/cpp/language/except_spec

結論としては無理

441 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 02: ]
[ここ壊れてます]



442 名前:10:12.31 ID:WdsmvZWK.net mailto: 意味わからんもんなthrow接尾子
投げる例外全部把握出来んのかよって
[]
[ここ壊れてます]

443 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 07:30:27.08 ID:zT9OLvmm.net]
ファイルオープンの失敗をどうやって間違えずに処理させるんだよ

444 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 07:31:31.20 ID:zT9OLvmm.net]
20年ちかくそれがいいことだっつってやってたんだぞ

445 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 07:47:02.08 ID:raeshKom.net]
void aho() throw(std::bad_exception);

446 名前:デフォルトの名無しさん [2021/12/20(月) 09:50:56.71 ID:TszysAyf.net]
ポインタ型変数のスタック消費が4バイト(32bit OS)または8バイト(64bit OS)なのはわかるんだけど、
参照型変数ってスタックを何バイト消費するの?

447 名前:はちみつ餃子 mailto:sage [2021/12/20(月) 11:34:47.56 ID:GbIoN43K.net]
>>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) と同じ意味になるってことね。

448 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 11:49:32.57 ID:LVF1I4ij.net]
確認してみた。
$ 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)

449 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 12:07:37.09 ID:IpG9nRdD.net]
参照先が見えてるところでは
参照先へ直にアクセスしてコストゼロだったり
参照引数をとる関数でもインライン化された場合はゼロ
てなことがなければポインタ1個分

450 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 12:13:52.79 ID:LVF1I4ij.net]
そういうのは最適化なので無関係
$ 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

451 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 21:41:58.49 ID:c8hM8/Kk.net]
最適化する前の意味合いとして
ポインタ1個分のコストを必ず発生するという規定なんかあったか?



452 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 21:44:15.52 ID:LVF1I4ij.net]
誰もそんな話はしてないので、お前が調べて貼れ

453 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 22:11:35.36 ID:c8hM8/Kk.net]
444へのレスで最適化がどうたらぬかしといて
そんな話はしてない、かよ
アセンブラ貼ってた威勢はどこへ吹っ飛んだんだかw
いいよ、逃げたきゃ逃がしてやるよヘタレ野郎

454 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 22:16:05.29 ID:LVF1I4ij.net]
最初から処理系(gcc)の話しかしてない。規定の話をしてるのはお前だけだ。早く貼れ。逃げるな。

455 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 23:16:36.18 ID:TszysAyf.net]
unique_ptrオブジェクトとそ

456 名前:フ実体を参照する参照型を使えば、
スタック消費を抑えつつスタック変数を使っているかのようなソースコードが書けそうだけど
[]
[ここ壊れてます]

457 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 00:06:02.44 ID:Ug1txKhz.net]
それは全くレイヤーの違う話
アプリのコンテキストを構造体/クラスにしてヒープかスタティックに置くだけで実現できる
実現手段としてunique_ptrを使いたいなら使えばいいというだけ

458 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 00:10:51.14 ID:QziEyx5H.net]
>>451
ひょっとして ID:c8hM8/Kk かな?
無意味な煽り書き込みやめてくれ

459 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 00:20:05.56 ID:Ug1txKhz.net]
煽りではないんだが、俺はID:LVF1I4ij

460 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 00:33:36.24 ID:QziEyx5H.net]
>>453
レイヤーが違うとか、勝手に仕切るな

461 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 00:42:51.31 ID:QziEyx5H.net]
構造体/クラスをヒープに置いたところで、その構造体/クラスのメンバー関数でスタック変数を使ってたら意味がないだろ
何が問題提起されているのか理解してから書き込んでくれ



462 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 01:02:00.74 ID:Ug1txKhz.net]
スタック消費を抑えたいなら静的に確保するかヒープを使えばいいというだけの話でしょ。
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を使いたいなら使えばいいというだけ。
伝わらないようなので少し細かく書いた。伝わるんだろうか・・・。

463 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 01:16:14.39 ID:QziEyx5H.net]
>>456
君は回答者に向いてない

464 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 01:18:02.55 ID:QziEyx5H.net]
アムロの父親みたいな変な書き込み、リアルに遭遇するとやはり引く

465 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 01:18:43.76 ID:Ug1txKhz.net]
>>457
質問したいレイヤと解決策のレイヤが合ってないだけw

466 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 01:27:03.87 ID:QziEyx5H.net]
自覚なさそうなところがますますテム・レイ感あるわ
お大事に

467 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 01:46:16.28 ID:Ug1txKhz.net]
質問して複数人に回答してもらってるのに、ただ煽るだけの人に「自覚」とやらを問われてもねw
大好きなガンダムのたとえに勝手に満足して病んでてくれ
君にプログラミングは向いてない

468 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 01:50:07.69 ID:QziEyx5H.net]
今時特別な理由もなくnew演算子を使うC++プログラマは間違いなく無能だよ

469 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 01:53:35.52 ID:Ug1txKhz.net]
理由はC++標準ライブラリを使用しない言語/処理系レベルの話をしていたから

470 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 02:05:33.42 ID:QziEyx5H.net]
ガンダムの記憶回路にとりつけるやつ好きなだけ作ってていいぞ

471 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 02:17:40.01 ID:Ug1txKhz.net]
妄想の中でもニュータイプじゃない君にプログラミングは無理w
ガンダムに辿り着けずコロニー内で果てる



472 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 14:30:10.99 ID:bvwR7M/G.net]
テンプレートを引数に取る関数で、
その入力として、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)
を作ってるけど一緒に表記できないかな、みたいな

473 名前:はちみつ餃子 mailto:sage [2021/12/21(火) 15:12:48.55 ID:f1yxmqA1.net]
>>466
???
その定義で配列も受け取れるけど。
int main(void) {
int x[] = {1, 2, 3};
std::cout << sum(x, 3) << std::endl;
}

474 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 15:20:59.50 ID:Ug1txKhz.net]
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;
}

475 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 15:35:03.48 ID:bvwR7M/G.net]
ありがとうございます
>>467 頭のどこかでポインタにしないと取れないと思っていました

>>468
iteratorは馴染みがないのでそのコードで勉強させていただきます

476 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 15:39:21.19 ID:sStr75A4.net]
>>462
ただのサンプルコードに今時とか無能とか・・
中で何が起きるか把握してない無能を量産しようとしないでくれ

477 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 15:47:15.24 ID:msz2/cZB.net]
本来はrangeの出番なんだがな
導入が遅れたばかりに……

478 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 16:45:50.91 ID:fi3Z01x+.net]
#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;
}

479 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 16:51:06.96 ID:msz2/cZB.net]
std::iterator_traits使おうよ

480 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 16:56:11.01 ID:fi3Z01x+.net]
#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;
}

481 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 17:32:40.16 ID:Ug1txKhz.net]
sumがunkoは独創的だと思うけど、戻り値の型はテンプレート引数でいいかもね



482 名前:sage [2021/12/21(火) 18:15:52.03 ID:qDHWQ1/Y.net]
↓こんなコード書いてるんですが,もっとエレガントに代入できませんか?
a[0]=*ptr;
a[1]=*(ptr+1);
a[2]=*(ptr+2);

483 名前:蟻人間 mailto:sage [2021/12/21(火) 18:28:20.41 ID:NT9maPPc.net]
ptr[1]

484 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 19:09:14.75 ID:qDHWQ1/Y.net]
>>477
エレガントな回答ありがとうございます.
解決しました.

485 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 20:23:30.29 ID:iHW7b2cO.net]
std::copy(ptr, ptr + 3, a);
僕はfor文のほうが好きです

486 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 20:25:38.21 ID:UPYLxpzi.net]
C++98以前の化石

487 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 21:03:47.64 ID:msz2/cZB.net]
std::copy_nもあるぞ

488 名前:デフォルトの名無しさん mailto:sage [2021/12/22(水) 18:49:46.59 ID:ycAkB2VB.net]
>>479
>>481
こんなんもあるんですね.使わせてもらいます.ありがとうございました.
最近c++やり始めたんですが,ポインタが出てくるとギョッとします.

489 名前:デフォルトの名無しさん mailto:sage [2021/12/22(水) 19:44:38.16 ID:VkqlmauA.net]
何に使いたいのか知らないけど、C++やめてRustの方がいいんじゃないの?

490 名前:デフォルトの名無しさん [2021/12/22(水) 20:00:31.77 ID:j6Uulo2p.net]
高速grepツールとして有名なripgrepはRustで作られてるからRustは優れた言語なのだろう、ぐらいなことは察せられるが

491 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 08:08:59.49 ID:zbE03cOE.net]
>>483
rustなんてプログラム初級者に勧めるなよ。
あんなの習熟した上級者向けの言語だわ。c++以上に初級者向け解説が無いのは致命的。

あと、Rustはスレ違いだからな。このコメにもレスするなよ。



492 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 09:13:28.05 ID:cFIeneRn.net]
>>485
C++の方が難しいよ
ポインタでギョッとするレベル=Cに抵抗があるなら、わざわざC++を使うよりはRustでいい
5chはコメとは言わない
お前がレスしなければ良かっただけ

493 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 09:43:11.86 ID:TuHGjVDJ.net]
Rust は良いアプローチだがどうしても記述量が多くなるから敬遠してる

494 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 11:51:22.33 ID:Gjq2t2pD.net]
>>486
ポインタは名札のメタファーを使った説明が確立しているけど、所有権、譲渡、借用、ライフタイムの初心者向け説明はクソみたいのしか無いだろ。そんなもん初級者に紹介するなよ。

スレ違いでわざわざ役立たずを紹介するやつは何を考えているんだろうかね?

495 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 12:29:11.30 ID:cFIeneRn.net]
>>488
はいはい、ID変えてご苦労さま
同じことだけど、生アドレス使うの得意でない言語の方が向いてるだろってだけ
C++は少なくともCをまともに使えるようになってから習得すべき

496 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 12:33:21.82 ID:lsirm1I0.net]
.hや.cpp以外からいじられたくない変数に対するインライン関数をパブリックに公開したいのですが、classを利用する以外にこのような事はできないのでしょうか?
staticや無名名前空間を利用するとcppファイルで利用できなくなりますしやはりclassを使えということでしょうか?

extern int value; //これは隠蔽したい
inline bool IsZero() { return value == 0; } //これはグローバルに利用してもらいたい

497 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 12:43:43.47 ID:N07J633j.net]
namespace {
extern int value; //これは隠蔽したい
}
inline bool IsZero() { return value == 0; } //これはグローバルに利用してもらいたい

498 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 12:44:08.09 ID:IRDqWaPI.net]
>>489
ならc紹介しろよ。
スレ違いのクソを紹介するな。

499 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 12:44:27.15 ID:N07J633j.net]
もとい
namespace {
int value; //これは隠蔽したい
}
inline bool IsZero() { return value == 0; } //これはグローバルに利用してもらいたい

500 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 12:47:57.55 ID:IRDqWaPI.net]
>>493
関数内にstatic変数持てなかったっけ?

501 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 12:52:37.53 ID:IRDqWaPI.net]
>>494
連投失礼。
自身の関数内にあるstatic変数の参照を返す関数を用意するパターン無かったっけ?



502 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 12:58:20.57 ID:cFIeneRn.net]
>>492
ポインタに抵抗ある人にCを勧めるくらいならC++に近くて安全なRustを勧めるのが筋
見当違いな話をしてるだけだよ君は

503 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 12:59:07.12 ID:6GqfEn2+.net]
valueの立ち位置が気になるが
extern(実行ファイル内で全部共通)するならinline関数のIsZeroが見えた時点でvalueも見えてないといけない

504 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 13:03:49.15 ID:cFIeneRn.net]
class hoge {
static int value;
public:
static bool IsZero() { return value == 0; }
};
inline bool IsZero() { hoge::IsZero(); }
int main() {
return IsZero();
}

505 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 13:07:02.43 ID:lsirm1I0.net]
>>493
ありがとうございます
ヘッダにそれを書いたとしてcppファイルからvalueを扱えるのでしょうか?

>>497
JavaやC#で言うところのprivate static intとして該当ヘッダ内&cppファイル内からは自由に扱え、それ以外からは見えなくさせたいという値です

506 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 13:20:56.47 ID:cFIeneRn.net]
JavaやC#でもそんなところに可視性の定義はない。

507 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 17:32:16.18 ID:SEEFcByD.net]
>>496
相手がなんでc++を使っているのかのニーズすら確認しないで何を独りよがりなことを言っているんだよ。
相手の目的を無視してスレ違いのツールを薦めるのはアホのやること。
Rustの伝道師はこんな低レベルなのかね。

508 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 17:36:54.99 ID:N07J633j.net]
あーうるせえ
C++スレでRust Rust連呼すんな
寒すぎんだよ

509 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 18:02:45.75 ID:cFIeneRn.net]
>>501
別に俺はRustの伝道師ではないが、>>483で一言Rustを勧めたらIDをコロコロ変えながら文句を言ってくる人がいるだけ
ポインタが不得意でRustも使えない質問者ご本人様だと思ってる

510 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 19:12:55.62 ID:AUfS9hAV.net]
>>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;
}

511 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 19:32:24.95 ID:3yOXD4ws.net]
inlineで書きたいらしいので、それだとコンパイル単位で値が変わっちゃうのでは?



512 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 19:55:38.05 ID:CLdJLYY1.net]
>>505
インラインはどのみち無理じゃない?
関数内static変数は共通になる保証があったと思う。どこだか忘れたけど。

513 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 20:02:52.87 ID:cFIeneRn.net]
クラス内に実装を書くなどヘッダにあればどの道インラインだと思う

514 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 20:05:51.29 ID:cFIeneRn.net]
staticは静的に確保されるので、インライン展開されても同じシンボルを参照する

515 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 20:30:35.89 ID:cFIeneRn.net]
ちゃんと書いておくと、>>490にもともとクラスを使わない指定があるので、どうかね?
という意味では前提を満たしてないと思う
クラスを使う最も素朴な例は>>498に書いておいた

516 名前:デフォルトの名無しさん [2021/12/23(木) 21:54:27.28 ID:4lOSoN0i.net]
メモリ確保用途でvectorやstringつかい
ポインタアクセスすれば、new で確保するのと速度に大差ないとおもうんですが
実測すると10%〜くらいSTLつかうほうが速度低下するみたいなんですが
直メモリアクセスでも落ちるのはなぜなんでしょうか

517 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 22:14:02.53 ID:6YhOrdG1.net]
その計測コード貼ってみ
多分メモリアクセスとは関係ない所で時間食ってる

518 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 22:16:19.47 ID:lsirm1I0.net]
>>509
ありがとうございます
やはりクラスを利用しないと実現無理そうなので、498のようなC#で言うところのstatic class的な形でやることにします

519 名前:510 [2021/12/23(木) 22:21:06.77 ID:4lOSoN0i.net]
これです・・・


https://ideone.com/NKSCRi


vector : 974.971 ms
new char : 921.191 ms
new int32 : 899.579 ms

520 名前:デフォルトの名無しさん [2021/12/23(木) 22:38:03.27 ID:MjSWMWRR.net]
1秒もかかる?

521 名前:510 [2021/12/23(木) 22:49:58.53 ID:4lOSoN0i.net]
こっちだと大差がついてるんですが
家の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



522 名前:510 [2021/12/23(木) 22:55:16.12 ID:4lOSoN0i.net]
自己解決しました
メモリ確保と解放部分を含めて計測してたのを
コピー部分のみの測定にしたらほぼ一緒になりました


https://paiza.io/projects/ge5iOWrzGu2E2PjogsRlUw

vector : 219.947 ms
new char : 204.565 ms
new int32 : 214.644 ms

523 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 22:55:24.77 ID:6YhOrdG1.net]
ほとんどメルセンヌツイスタの実行時間じゃね

524 名前:デフォルトの名無しさん [2021/12/23(木) 22:56:40.08 ID:MjSWMWRR.net]
確保にかかってると思う?
一秒はさすがにないと思う。
何かおかしいな。

525 名前:デフォルトの名無しさん [2021/12/23(木) 22:58:15.18 ID:MjSWMWRR.net]
vector云々以前に、newバージョンも遅すぎると思う。
話にならないくらい。
i8008とかじゃないよね?

526 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 23:00:56.66 ID:6GqfEn2+.net]
C++/CLIでstd::mutex使えないのなんでなん?

頑張ってWin32APIで代用する気力はあるけどわざわざ無効化されてる理由が知りたい

527 名前:510 [2021/12/23(木) 23:05:52.89 ID:4lOSoN0i.net]
メモリ確保・解放と、メルセンヌツイスタを外して計測したら
今度はvectorのほうが圧倒的に早

528 名前:「んですが

https://ideone.com/rKv4qv

vector : 237.55 ms
new int32 : 713.82 ms
[]
[ここ壊れてます]

529 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 23:26:56.25 ID:4lOSoN0i.net]
計測時間は、ある程度の長さで、オンライン実行環境のタイムアウトにならないように
ループ回数を変更してるので

530 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 23:54:08.59 ID:58w1xOUi.net]
生ポインタにしたら同じ感じにならない?
unique_ptr<int32_t[]> p(new int32_t[2*size]);
int32_t* A = p.get();
mmcpy(A, size);

531 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 01:54:49.07 ID:T9e6TA98.net]
手動でループ回数変更とか馬鹿らしいからquick-bench.comとか使うのオススメ



532 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 09:00:08.27 ID:opQHMY4K.net]
overrunがある
std::make_uniqueを使え

533 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 09:04:03.38 ID:opQHMY4K.net]
https://ideone.com/JupGoY






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<275KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef