C++相談室 part133

レス数が900を超えています。1000を超えると表示できなくなるよ。
1デフォルトの名無しさん (ワッチョイ 1fcf-H1rY)
垢版 |
2017/11/24(金) 16:52:50.43ID:WoNXR2ax0
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part132
http://mevius.5ch.net/test/read.cgi/tech/1507561894/

このスレもよろしくね。
【初心者歓迎】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
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
842デフォルトの名無しさん (ワッチョイ 1f5b-5YeV)
垢版 |
2018/01/08(月) 14:35:51.13ID:u4QX+fVn0
アホか
e.what() を誰に対して表示するんだよ
一般消費者にbad_allocとか言っても通じねえ
せいぜい「何たらファイルを保守員に渡せ」くらいだろ
2018/01/08(月) 14:44:37.01ID:zFrH1/Fm0
e.what()なんてどうでもいい
どのソースファイルの何行目でそいつがthrowされてきたかだ
844デフォルトの名無しさん
垢版 |
2018/01/08(月) 14:46:08.42
>>842
実際広く使われてるものを一人で一生懸命否定してもな・・・
2018/01/08(月) 14:48:45.77ID:zFrH1/Fm0
そこら辺が例外としてカスタマーに出す情報として欠けている
巷で言うところのアスペクト機構というやつか
2018/01/08(月) 15:10:05.58ID:IpW3L+tu0
十進数計算をするためには一般的にはBCDをDPDを使用しますが
二進数のままで十進数の丸め処理をすることはできますか?
847デフォルトの名無しさん (ワッチョイ 1f5b-5YeV)
垢版 |
2018/01/08(月) 15:46:10.84ID:u4QX+fVn0
>>844
自分の頭で考えることを放棄しているやつとでは議論にならない
848デフォルトの名無しさん
垢版 |
2018/01/08(月) 16:18:21.05
>>847
そんなに独自路線を走りたいなら家で大人しく引きこもってろ
2018/01/08(月) 16:30:52.97ID:mQiTu3iz0
>>841眺めてるけど
全ての例外オブジェクトはstd::exception派生でなければならないなんてポリシーで書かれてるコードそんなにないぞ
当たり前だけどだいたいcatch(...)も後続させてるし、std::exception派生じゃない独自クラスのcatchを前に続けてるコードも普通にある

というか「catch(std::exception& e) で e.what() を拾うっていうよくあるエラー処理のパターン」って何?
それは単にstd::exceptionを拾ってるだけで、std::exceptionを拾ったらそりゃwhat()使うに決まってんだろ当たり前の話
850デフォルトの名無しさん
垢版 |
2018/01/08(月) 16:41:29.24
(´・∀・`)ヘェー

あ、ちなみに俺はC++経験ないけど暇つぶしに横から煽ってるだけだから気にしないでね^^
2018/01/08(月) 16:47:22.54ID:LRSoqKZx0
誰もおまえを相手にしてない定期
852デフォルトの名無しさん (ワッチョイ 1f5b-5YeV)
垢版 |
2018/01/08(月) 17:58:52.06ID:u4QX+fVn0
> std::exception 派生にしといてもらわないとまともなエラーメッセージが出なかったりして困る。

まともなエラーメッセージって
cout << runtime_error{"aho"}.what(); //aho
これのことか?www

おまえさんもしかしてsystem_errorが理解できなくて使ってないとかか?
2018/01/08(月) 20:02:51.13ID:LRSoqKZx0
shamu_game?
2018/01/08(月) 22:00:33.29ID:oHMwX23z0
>>846
固定小数点でやればいい
2018/01/09(火) 02:11:08.05ID:VwLwz+6J0
>>849
後続の catch(...) で拾っても何が起こったのがわかんなくて困ることがあるって話。
2018/01/09(火) 02:22:46.70ID:ODJfN40E0
>>847
カスが考えるより、 C++ の (ライブラリ) 設計を真似た方がマシやで
857デフォルトの名無しさん (ワッチョイ 0bf6-5YeV)
垢版 |
2018/01/09(火) 10:16:09.54ID:BapSTNU/0
おまえが考えるより真似た方がマシなのは言われんでもわかってる
2018/01/09(火) 10:43:54.73ID:2HziowuR0
バカの考え休むに似たりなる諺の発祥を追うような展開
2018/01/10(水) 23:37:28.15ID:pm7ONPKS0
>>857
せやろ。 だから真似るんや。
2018/01/11(木) 06:31:56.64ID:hO0Nh6Zo0
ファイルコピーをしたいんだけど改善点あるかな?
引数にはコピー元とコピー先のファイルパスを受けとる予定
もっと簡単な記法があると助かる...

int copy(const char* old, const char* new)
{
FILE *fi, *fo;
int ch;

if(NULL==old||NULL==new){
return -1;
}
if ((fi = fopen(old, "r")) == NULL) {
return -1;
}
if ((fo = fopen(argv[2], "w")) == NULL) {
fclose(fi);
return -1;
}
while((ch = fgetc(fi)) != EOF){
fputc(ch, fo);
}
fclose(fi);
fclose(fo);
return 0;
}
2018/01/11(木) 06:46:10.27ID:S67tZ9jk0
関数仮引数を動的検査している
終了ステートが負論理
system_errorを使っていない
C++なのにfopen
2018/01/11(木) 06:55:18.88ID:bQ6Hme0D0
fpucとfgetcの繰り返しは短いファイルなら良いけど長いファイルだとCPU時間やたら食うだけのクソになるな
2018/01/11(木) 07:06:36.75ID:W1ryMExAM
>>860
改善点以前にコンパイルできるコードを持ってこいよ...
> if ((fo = fopen(argv[2], "w")) == NULL) {

あと文字単位のコピーは非効率だからせめて fread/fwrite にすべき

また使える環境ならstd::filesystem::copyとかを使った方がいい
http://en.cppreference.com/w/cpp/filesystem/copy
2018/01/11(木) 07:23:14.65ID:1qlx+5WGd
>>863
おお...気付かんかった
C++なのにCで書いてあるからそもそもだめだったか...
fread/fwriteでまず考えてみます
FileCopyみたいなの欲しい
2018/01/11(木) 07:33:45.62ID:1qlx+5WGd
freadを考えてみたけどファイルサイズ不明な場合一度に読み込むバッファサイズとかどうなるん?
2018/01/11(木) 08:03:11.10ID:Nwq/3BKy0
各マシンでの最適なバッファサイズを逐一計算して求めるのがC++
2018/01/11(木) 08:10:51.08ID:W1ryMExAM
>>865
環境わからんからなんとも言えんが10KB程度とっときゃいいんじゃね?
2018/01/11(木) 09:08:45.65ID:lNcIwFA20
>>861
>関数仮引数を動的検査している
解説お願いします
>終了ステートが負論理
ダメですか?
>system_errorを使っていない
ダメですか?
>C++なのにfopen
ダメですか?
2018/01/11(木) 09:58:35.85ID:3a3jMnur0
>>860
fopen の引数は “rb” “wb” にしておくのが一般的
もし実用品として使うならなるべく大きな単位、
最低でも1Mバイト程度はまとめて読み書きすると良いよ。100Mでもいい。
細かい単位で読んで書いてを行うとHDDで大きなファイルを処理する場合とてつもなく遅くなる。

あとそういう書き方をしたいならそれは c++ ではなく
c のスレ(あるのか知らんが)で聞く内容だと思う
2018/01/11(木) 10:03:28.58ID:S67tZ9jk0
>>868
不勉強を恥じろボケ

#include <filesystem>
#include <iostream>

auto copy(char const* src, char const* dst)
{
try
{
return std::filesystem::copy_file(src, dst);
}
catch(std::exception& err)
{
std::cerr << err.what();
}
return false;
}
2018/01/11(木) 10:19:39.83ID:jbhd+X3/0
filesystem がまだ使えない環境もあるかもしれんので小ネタを披露しておくと、
rdbuf を使う方法があるんや。

ifstream in(src);
ostream out(dst);
out << in.rdbuf();

みたいな要領な。 エラー処理は適宜うまいことやってくれ。
2018/01/11(木) 11:19:16.78ID:3a3jMnur0
パフォーマンス厨だが
もし実用するなら setvbuf の rdbuf 版みたいなのがあるからそれも呼ぶべきと一言
873デフォルトの名無しさん
垢版 |
2018/01/11(木) 12:15:07.96
system("cp -f a.txt b.txt") でいいよね(´・ω・`)
2018/01/11(木) 13:09:33.65ID:EPrc03FTd
パフォーマンス厨なら
リードとライトは別スレッドにするとか
読み書きサイズをクラスタサイズの倍数にするとか
2018/01/11(木) 13:20:11.53ID:eUOyd8Rr0
物理的に別のデバイスならリード/ライトは別スレッドで回したほうが速いだろうが、同じデバイスだとシングルスレッドでも大差ないだろうな
あとはバッファサイズをできるだけ大きく取って、IOの発行数を抑えるのが王道かな
2018/01/11(木) 14:07:04.69ID:VjH1J6HL0
>>860
fgetc、fputc?笑っちゃうくらいのダメダメ
俺の部下が万が一こんなコード書いてたらもう二度とそいつには仕事回さない
877デフォルトの名無しさん (アウアウカー Sa55-EKU2)
垢版 |
2018/01/11(木) 14:43:56.63ID:EDmjquO+a
プログラミングなんてどっかからコード引っ張って書けば一切手を汚すことなくできるのに何偉そうに言ってんだか...
英語読めないからって海外の文献を参考にせず自分で作ろうとする日本人の無駄な努力には呆れるよ
アメリカ「アホだから」
韓国「レベル低いな」
インド「アジアの恥さらし」って思われてそう
878デフォルトの名無しさん (アウアウカー Sa55-EKU2)
垢版 |
2018/01/11(木) 14:48:19.11ID:xUZeJB/aa
必死こいてコード書いてるやつ見ると情けない
世界65億人130カ国!
お前の書いてるコードがまさか地球上にないものだと思ってんの?
プログラマーの端くれが、そりゃトップで活躍するプログラマーなら常に新しいものを求めてるから生き残るけど...
それ未満は10年後にはAI、またはコード共有化が進んで消えた職業になっているだろうね
悲しいけど現実見てくれ
2018/01/11(木) 15:17:43.47ID:S67tZ9jk0
構ってちゃんが必死で連投してるな
著作権だの互換性だのと縁のない幸せ者だな
2018/01/11(木) 15:32:14.08ID:deNLSlJUM
>>876
バカにするなら模範コードぐらい書いてやれよ。
2018/01/11(木) 16:16:00.19ID:bQ6Hme0D0
テストしてないけど
const size_t BUF_SZ=8192;
char buf[BUF_SZ];
while(!feof(fi)){
size_t n=fread(buf,sizeof char,BUF_SZ,fi);
if(n&&n!=fwrite(buf,sizeof char,n,fo)) {perror("ディスクエラー");return -1;}
}
>>873
WindowsならSHFileOperationかな?
windowsでsystem叩くのは文字数制限とか""のくくり方とか微妙に怪しくてなんか嫌なんよね
2018/01/11(木) 16:40:41.56ID:P2yp909q0
お題:http://mevius.2ch.net/test/read.cgi/tech/1480579110/981
回答
http://mevius.2ch.net/test/read.cgi/tech/1480579110/997
http://mevius.2ch.net/test/read.cgi/tech/1434079972/30
https://ideone.com/LV4UdE
while (bytesDataNum > 0) {
int n;
fin.read((char *)&buffer, std::min(N, bytesDataNum));
if (fin.fail())
return 0;
n = fin.gcount();
fout.write((char *)&buffer, n);
if (fout.fail())
return 0;
bytesDataNum -= n;
}
 return 1;
}
C++fstream/read/write を使うのだったらこんなところか
>>881 の n = fread() が BUF_SZ に満たなくてもエラーが立ってしまうのが思案のしどころだね、あらかじめ読み込みバイト数を知っておかなければならない‥
2018/01/11(木) 17:11:02.74ID:bQ6Hme0D0
せやね。エラーチェックは難しいのう。
const size_t BUF_SZ=8192;
char buf[BUF_SZ];
while(!feof(fi)){
size_t n=fread(buf,sizeof char,BUF_SZ,fi);
if(!n) {perror("ディスク読み込みエラー");return -1;}
if(n!=fwrite(buf,sizeof char,n,fo)) {perror("ディスク書き込みエラー");return -1;}
}
2018/01/11(木) 17:32:08.08ID:VjH1J6HL0
>>880
さてそんなこと言われてもプラットフォームすら指定されていないし
例えばWindowsなら↓一発で済む話だよな
https://msdn.microsoft.com/ja-jp/library/cc429185.aspx
ファイルコピーごときに自前でコードなんか書いてられるかよ
2018/01/11(木) 17:55:46.00ID:S67tZ9jk0
ISO/IEC14882の現行規格を差し置いて何を今さら。。。
Windowsなら純正コンパイラが対応しているだろうが
2018/01/11(木) 17:57:34.42ID:zx3yce6m0
ニートが部下がどうのこうの言ってて笑える
2018/01/11(木) 18:03:32.29ID:VjH1J6HL0
>>886
お前の境遇はよく分かったから勝手に笑っとけ
2018/01/11(木) 19:35:14.53ID:ga/Vikbp0
>>885 >>884
C++17はともかく、boost::filesystemあたりが妥当だろうな。
2018/01/11(木) 19:49:16.17ID:VjH1J6HL0
boost依存は出来る限り避けたいなあ
2018/01/11(木) 21:10:50.25
またこの荒らしか
Pythonのスレにも居たな
2018/01/11(木) 21:11:35.20
>>877
>>878
宛てな
2018/01/11(木) 21:40:25.98ID:x0MoCwhB0
とりあえずだ、fcloseの戻り値判定してないのも誰かつっこんでやれよ。。。
普段気にするところじゃないけど、わりと重要だよな?書き込み系のclose処理
2018/01/11(木) 22:01:49.89ID:qoSoxo2Ld
バッファサイズ8kだと少し大きなファイルコピーすると結構遅くなるよ
書き込み側はOSのキャッシュが効くからそうはならんだろうけど
メモリはいっぱいあるんだし動的確保でもして一気に128Mくらい行くべし

>>889
簡単な処理はあまり外部依存しないコードにしたいよね
2018/01/11(木) 22:07:24.01ID:1W7yBpCQM
関数のconst参照引数って
コピーが重い方だと意味あるけど
intとかsize_tとかだと全く意味ないの?
895デフォルトの名無しさん
垢版 |
2018/01/11(木) 22:18:41.87
>>894
どっちが軽いか考えてみればいいじゃん
(1) 常に8バイトの数値(アドレス)を引数として渡すためにコピーして、呼び出された関数側でそのアドレスから値をコピーして、処理に使う
(2) 1〜8バイトの数値を引数として渡すためにコピーして、呼び出された関数側でその値を処理に使う
2018/01/11(木) 22:39:48.54ID:1W7yBpCQM
>>895
あーなるほど
どこかの入門サイトで参照は変数の名前の置き換えって見たから
コンパイル時に置き換わるもんだと思ってた
中身はアドレスなのね
2018/01/11(木) 23:12:05.45ID:jbhd+X3/0
>>896
内実としては参照はデリファレンスが自動化されたポインタと思ってもさしつかえないと思う。
ABI レベルで見ればポインタと互換性が有りさえするアーキテクチャも有る。 (言語仕様で保証しているわけではない。)
2018/01/12(金) 07:31:11.05ID:uquo2DHh0
はちみつ餃子はc++とscheme以外に何が使えるの?
2018/01/12(金) 07:51:53.51ID:UAqgHqOi0
そんなこと知ってどうするんや
2018/01/12(金) 07:54:27.14ID:uquo2DHh0
好奇心ですよ好奇心
2018/01/12(金) 07:54:44.69ID:xirJS+K20
マウント取りに行くんだろ
2018/01/12(金) 07:56:18.96ID:uquo2DHh0
そんなに悪いかよ
じゃあ結構です
2018/01/12(金) 08:14:19.27
>>899
恥ずかしガンなって
2018/01/12(金) 22:48:03.44ID:bn5FfgmT0
メンバがint2つくらいだとコピー渡しにするか参照渡しにするかちょっと悩む
int4つくらいまでならキャッシュの関係でコピーのほうが早いとか聞いたことあるけど本当なのかね
905デフォルトの名無しさん (ワッチョイ 3d7f-QpsD)
垢版 |
2018/01/12(金) 22:50:47.10ID:iYjzTsi20
FF15ではベクトルクラスはコピーにしたら劇的に早くなったと言っていた
2018/01/13(土) 01:03:55.02ID:SxvD86sf0
ゲーム機は尖ったアーキテクチャだったりするから……。
やってみないとわからん。
2018/01/13(土) 11:47:10.72ID:ARtU5FzH0
いやゲーム屋なら当たり前の話だよ
IntelのCPUだってSSEあるし、__m128は出来るだけ値渡しした方がいいはず
(もちろんインライン展開された場合は除く
2018/01/13(土) 12:22:15.14ID:nudx6UkM0
>>905
ソース教えて欲しい
909デフォルトの名無しさん (ワッチョイ 3d7f-QpsD)
垢版 |
2018/01/13(土) 12:24:13.94ID:A7bueCBw0
>>908
http://jp.gamesindustry.biz/article/1609/16090501/
2018/01/13(土) 12:34:35.23ID:nudx6UkM0
>>909
ありがとうございます
2018/01/13(土) 13:06:59.87ID:jbKISc2y0
インライン展開されたら値渡しだろうが参照渡しだろうが(あんま)関係無いんじゃ…

※ 参照と不十分なインライン展開が重なったときmemory aliasingによる最適化の阻害の危険性がちょっと増すぐらい
912デフォルトの名無しさん (ワッチョイ 6d04-lXUw)
垢版 |
2018/01/13(土) 21:20:30.95ID:1X9BcJ9h0
クラスの継承について質問です。

スーパークラス(Super)を継承したサブクラス(Sub)内にて
スーパークラスの関数func()をoverrideしています。

このサブクラスのfunc()の中で、
スーパークラスのfunc()をそのまま呼び出したいときは、
このようにする方法がありますよね。
void Sub::func(){
____Super::func();
____/*その他の処理*/
}

しかし、これはサブクラス側の自由であり、
スーパークラスのfuncを実行しないこともできます。
そこで、サブクラスのすべてのfunc()で
スーパークラスのfunc()が必ず処理されるように強制したいです。
これは可能でしょうか?
文字通りではなく、擬似的な手段で構いません。

よろしくお願いします。
913デフォルトの名無しさん (ワッチョイ 6d04-lXUw)
垢版 |
2018/01/13(土) 21:22:05.60ID:1X9BcJ9h0
↑誤字修正致します。
☓そこで、サブクラスのすべてのfunc()で
○そこで、すべてのサブクラスのfunc()で
申し訳ございません。
2018/01/13(土) 21:27:01.54ID:SxvD86sf0
スーパークラスとかサブクラスとか言ってるやつにイラッとするのが C++er
2018/01/13(土) 21:35:37.12ID:P0Ulq8gud
メソッドチェーンというものを自作すればコントロール可能だが、ややこしい上にオーバーヘッドがある。
2018/01/13(土) 21:42:39.62ID:P0Ulq8gud
ごめん、間違った。
メソッドチェーンじゃなくてC#デリゲート。
917デフォルトの名無しさん (ワッチョイ 6d04-lXUw)
垢版 |
2018/01/13(土) 21:45:31.67ID:1X9BcJ9h0
>>914
親と子の方が一般的ですか…?
>>915
ありがとうございます!
メソッドチェーン自体は知っていましたが、
それを活用するという考えはありませんでした。
これをヒントに色々試してみます。
918デフォルトの名無しさん (ワッチョイ 6d04-lXUw)
垢版 |
2018/01/13(土) 21:49:30.82ID:1X9BcJ9h0
>>916
入れ違いになってしまった。
デリゲートでしたか!
2018/01/13(土) 22:24:25.09ID:B4wYryLR0
NVIでぐぐれや
2018/01/13(土) 22:56:11.51ID:6aei/M/30
Java厨絶滅成就(・人・)ナムナム
2018/01/13(土) 23:27:00.62ID:SxvD86sf0
>>917
スーパーというのはある集合を内包する、より大きな集合。 サブというのはある集合の一部の集合。
このとき、オブジェクト指向におけるクラスというのはインスタンスの集合とみなして、
サブクラスはスーパークラスの一部の集合とする考え方によってスーパー/サブと言ってる。

しかし、あるクラスをクラスが持つ機能 (メソッド) の集合と考えるとスーパー/サブが逆転する。
これはわかり難くて混乱の元。

という教訓に基づき基底クラス (base class) と派生クラス (derived class) という用語を C++ では採用した。

ちなみに C++ にはサブオブジェクトという用語はあって、
これはあるオブジェクトのデータメンバや基底のオブジェクトのこと。
922デフォルトの名無しさん
垢版 |
2018/01/14(日) 00:30:48.99
>>921
> ちなみに C++ にはサブオブジェクトという用語はあって、
> これはあるオブジェクトのデータメンバや基底のオブジェクトのこと。

へー、スーパークラス=基底クラスで、基底のオブジェクト=サブオブジェクトなのか

これがスーパー/サブの逆転ってやつか

確かにわかりづらいね
2018/01/14(日) 00:33:39.99ID:ng7CbKaO0
スーパーとかダセェ
2018/01/14(日) 01:04:12.68ID:6MYOWaJx0
VC++だと派生クラスBarから基底クラスFooのメソッドfuncを

 __super::func()

という風に

 __super

キ──ワ──ドが使えるんじゃ!
2018/01/14(日) 05:55:30.36ID:06kwM4S00
privateなvirtual funcImpl()をカスタマイズポイントとして派生クラスに自由にオーバーライドさせて
基底クラスのpublicなfunc()で>>912で言うところのSuper::func()相当の処理してからfuncImpl()を呼ぶ
(func()自体はnon-virtual)
ってのがまあ常套手段だと思うけどそれだと困る?
2018/01/14(日) 06:37:11.95ID:N+BeAo4b0
>>924
多重継承してるとあかんけどな
2018/01/14(日) 10:01:41.75ID:Z2heVtXU0
>>922
多分ちげーんだろーな
C++のサブオブジェクトはサブリミナルとかのサブだろ
オブジェクトに潜んでる何かだろ
つい最近にもあった潜性/顕性の潜性の方だろ

無理に対義語作るならジス(this)・オブジェクトかメイン・オブジェクトじゃねえの
2018/01/14(日) 12:55:55.66ID:06kwM4S00
サブセットのサブだろ
あるオブジェクトの一部分がサブオブジェクト
対義語はやっぱりスーパーだよ
2018/01/14(日) 13:03:04.48ID:N+BeAo4b0
部分オブジェクトの反対語をスーパーオブジェクトとは言わん
2018/01/14(日) 13:14:31.73ID:06kwM4S00
でもサブセットの反対はスーパーセットだろ
2018/01/14(日) 13:32:41.21ID:0BOIhrZQ0
subset, subhuman などに使われる前置詞 sub だろ
語義は「不完全な」だ
932デフォルトの名無しさん
垢版 |
2018/01/14(日) 14:17:12.73
じゃあ対義語はconcreteか
2018/01/14(日) 15:03:36.89ID:6MYOWaJx0
集合は要素の重複を認めないのでスーパーオブジェクトとかサブオブジェクトとか言う方が異端なのでは…
2018/01/14(日) 15:06:32.87ID:6MYOWaJx0
英語圏の方々の言語感覚は正直ワカランこともあるが
「具体的な」(Concrete)と「完全な」(Complete)は多分使い分けられれているのではないか
2018/01/14(日) 15:11:45.36ID:6MYOWaJx0
>>926
クラスcがクラスaの単一継承なら
{ クラスcに属するオブジェクト } ⊂ { クラスaに属するオブジェクト } ・・・ (1)
なのでa::func()はcから見て__super::func()で正しいが、

クラスcがクラスaとbの間の子なら、(1)および
{ クラスcに属するオブジェクト } ⊂ { クラスbに属するオブジェクト } ・・・ (2)
はどっちも成立しないから__superキーワードが使えないのはある意味当然で整合的と言える、
2018/01/14(日) 15:30:00.21ID:6MYOWaJx0
スマン訂正
クラスcがクラスaとbの間の子(で公開継承)なら、(1)と(2)が両方成立するんだったorz
(cのインスタンスはaのインスタンスとしてもbのインスタンスとしても扱える

ついでに補足で、>>933は「包含関係の意味でスーパーとかサブとか言うなら」異端という意味
2018/01/14(日) 21:03:41.51ID:66CfjFh30
>>931
incompleteとは違うね
2018/01/14(日) 23:25:18.74ID:ekN/OeXo0
std::set にて std::set<int> に特化して実装しようとしていますが、
ここで private メンバーである iterator positionToInsert(int n) を記述しようとして、はまっています

iterator posisionToInsert(int n) :
n を挿入するべき内部テーブルの位置(イテレータ)を返す
n がすでに set にあったら nullptr を返す
としたかったんですが

・nullptr を iterator に代入できない
・そもそも コンテナ.end() が nullptr だ(無理にキャストしてみて分かった)…@

返り値を複数にするしかないのかな…
std:set.insert() も pair を返すみたいですし
@は規格で決まっているのでしょうか?処理系依存でしょうか?
https://teratail.com/questions/25576
2018/01/15(月) 00:07:45.76ID:akdFGtdY0
iteratorはポインタちゃうで
2018/01/15(月) 00:52:09.62ID:p80Tlp9s0
変なメンバ関数つくるよりfind使っておけよトーシロー
理解できないなら余計な機能追加はするな
余計にわからなくしてプログラムを目茶苦茶にするな
2018/01/15(月) 00:54:40.48ID:p80Tlp9s0
findじゃないなlower_boundで位置は把握できるだろこのハゲー
レス数が900を超えています。1000を超えると表示できなくなるよ。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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