トップページ⇒tech
1002コメント362KB

C++相談室 part122 [無断転載禁止]©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2016/01/23(土) 23:06:15.32ID:HdItgJjm
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part121
http://peace.2ch.net/test/read.cgi/tech/1449240881/


このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.97【環境依存OK】
http://peace.2ch.net/test/read.cgi/tech/1439849418/

次期規格C++1zはこちら
C++14/C++1z 20
http://peace.2ch.net/test/read.cgi/tech/1410382924/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 http://ideone.com/
0232デフォルトの名無しさん2016/01/29(金) 23:52:06.13ID:Hpd/92hj
>>230
いや意味が全く無いわけではない
std::vector::push_back()呼び出し時点での余分な領域確保とか、速度低下が最小化される
0233デフォルトの名無しさん2016/01/30(土) 00:09:33.50ID:VhIzDspW
>>232
230 じゃないけど、 >227 の reserve() で「速度低下が最小化される」なんてことは無いでしょ。
単発なら変わらないだろうし、ループした場合は reserve() しないほうが速いし。
0234デフォルトの名無しさん2016/01/30(土) 00:17:51.94ID:lYkNZO2m
>>232
ないない
push_backで領域が足りなければreserve相当のことは自動的にされるし
まあないだろうがstd::vectorの実装によってはsize()+1のreserveが速度に悪影響与えることだってあり得るんじゃないかな
>>227のもう一つ痛いところはreserveさえしておけばpush_backでの例外が無いと決めつけてるところ
そんな規定はないだろ?
0235デフォルトの名無しさん2016/01/30(土) 00:21:53.24ID:nKxSIfYZ
>>234
> push_backでの例外が無いと決めつけてるところ

というより、それを一切考慮してない希ガスw
そいつ一人だけ問題の本質に到達できていない
bad_allocが投げられるのは一緒ってことも知らないんだろうし
0236デフォルトの名無しさん2016/01/30(土) 00:55:16.18ID:GfziY506
はてどこからbad_allocが出てきたのか
0237デフォルトの名無しさん2016/01/30(土) 03:14:53.57ID:HpDJFp9+
>>233、>>234
漏れは慎重に「std::vector::push_back()呼び出し時点での」と限定して書いたで?
0238デフォルトの名無しさん2016/01/30(土) 05:43:02.21ID:VhIzDspW
>>237
ん?だから何?
push_back() 関数内での領域確保・実行時間を減らして、それらを push_back() の
直前の処理に移動することに何か意味があるとでもいうの?それはどんな場合にうれしいの?
0239デフォルトの名無しさん2016/01/30(土) 05:59:47.15ID:GfziY506
A「意味がないわけではない」
 「〜される」
B「そんなことは ない」
A「そんなこと ある だろ」
B「だから何?〜だと何かいいことあるのか?」

>>232の2つの文のどちらについて話をしているのかの認識がずれていることに気付かない低能どもの会話は滑稽だな
0240デフォルトの名無しさん2016/01/30(土) 06:17:44.28ID:GfziY506
やっぱり馬鹿にC++は無理だな
メモリ確保のnew/deleteは禁止にしてスマポとコンテナーだけ使っとけ
ついでに馬鹿はshared_ptrも使用禁止にしといた方が安全
0241デフォルトの名無しさん2016/01/30(土) 11:02:01.65ID:u8r8Wxi4
> v.reserve(v.size() + 1);
> v.push_back(new Fuck);

やっぱり馬鹿にC++は無理だなw
push_backの直前で+1サイズのreserveとかw

http://www.cplusplus.com/reference/vector/vector/reserve/
ここのExampleみてお勉強しなおしたら?
例外投げるのも書いてくれるから学んどけよ
0242デフォルトの名無しさん2016/01/30(土) 11:46:11.52ID:GfziY506
初回がresize前のcapacityと比較して何が言いたいのかよくわからん例だな

push_backはcapacityに余裕が有るときに再アロケーションしないことは保証されているが
例外を出さない保証は23.3.6.5から読みとれないな
やはり馬鹿にはスマポを強制したほうがいい
0243デフォルトの名無しさん2016/01/30(土) 13:13:55.69ID:VK1fBsAo
>>238
reserve()とpush_back()のどちらで例外が発生するかという文脈において、
>>227のreserve()がpush_back()の直前行であるという解釈は一体…

まあv.reserve(v.size() + n);ならともかく、v.reserve(v.size() + 1);だったから気持ちはわからんでもない
0244デフォルトの名無しさん2016/01/30(土) 14:18:45.97ID:GfziY506
どうみても>>227はpush_back(というかnew)の直前にしか見えないのに
何を言ってるんだお前は
0245デフォルトの名無しさん2016/01/30(土) 15:00:28.25ID:9j1RlcoP
挿入前に拡張しておけという有難い教えだな。
0246デフォルトの名無しさん2016/01/30(土) 16:17:33.41ID:GfziY506
>>245
挿入前に拡張すると(要素のコンストラクター以外では)例外が出ないという保証はある?
0247デフォルトの名無しさん2016/01/30(土) 16:22:43.98ID:AurOqJPw
>>245 はC++とは違う話題かと。
Cとなら関係あるかも知れないが、プログラミング言語でないC。

もちろん俺の読み違いかもしれない。
0248デフォルトの名無しさん2016/01/30(土) 16:27:26.60ID:7MlWNObS
あと一個で例外が飛ぶようなメモリ状況で

☆一行のとき
v.push_back(foo); // ここで例外

☆二行のとき
v.reserve(v.size() + 1); // ここで例外
v.push_back(foo);

こうなるだけじゃないの?
新たな連続した一本のメモリが確保できないと例外なんだから
0249デフォルトの名無しさん2016/01/30(土) 16:35:52.43ID:lYkNZO2m
>>246
規格を読んだ限り保証はされてないね
現実に存在する実装ではreserve済みであれば生ポのpush_backじゃ例外発生しないだろうけどね
そんなことはアテにしちゃいけない
0250デフォルトの名無しさん2016/02/01(月) 01:01:58.63ID:CuJD672c
reserveで例外かわせても、次のnewによるメモリ確保で例外になる可能性はなくならないのだから、
newを一旦別の変数で受けるしかないでしょ

hoge h;

h = new hoge;
vec.push_back(h);

が正解。
0251デフォルトの名無しさん2016/02/01(月) 01:58:17.63ID:fnCrDph6
いやいやwもういいからスマポをmake_uniqueとかmake_sharedで使っておけ
バカはnewを書くな!
0252デフォルトの名無しさん2016/02/01(月) 02:09:31.02ID:CuJD672c
>>251
あんたバカバカ言ってるけどnewを使うかmake_sharedを使うかはこの問題の本質じゃないから。
馬鹿じゃないならわかるよね?
0253デフォルトの名無しさん2016/02/01(月) 02:22:38.94ID:dRJvSEmL
どうなんだろうね
vec.push_back( new t() )
の場合、newで例外が発生したらpush_backは実行しないんだから関係ないと思うんだが
push_back呼ぶ前の、スタックに引数を積む段階で例外が発生するわけだから
push_backは呼ばれもしないし、全く関係ないと思うんだが
0254デフォルトの名無しさん2016/02/01(月) 02:25:49.77ID:fnCrDph6
>>252
あなたが問題の本質を理解してると思えないが?
newを変数で受けたってなにも変わりはしないよ
てか、まずはhoge* hにしてから言ってくれない?
0255デフォルトの名無しさん2016/02/01(月) 05:14:31.96ID:yDMVnQCY
java厨ってnewしたままホウチミンだよね
0256デフォルトの名無しさん2016/02/01(月) 06:43:17.15ID:JTo/Q0C3
>>250や>>253のような
C++の教科書にある間違ったコードのテンプレのような糞コードを真顔で言い出す低能を見ると
やはり馬鹿にはスマポとしか言いようがない
0257デフォルトの名無しさん2016/02/01(月) 17:11:12.73ID:Ev74Df4F
そのjava厨が何を指すのか曖昧だが
Javaでは普通、ネイティブリソースはRAIIで開放するぞ
0258デフォルトの名無しさん2016/02/01(月) 17:14:07.57ID:/UrjTotH
ジャバってデストラクタみたいなの追加さらた?
0259デフォルトの名無しさん2016/02/01(月) 17:59:52.82ID:fnCrDph6
JavaでRAIIとかもうわけがわかんねーな異世界に飛ばされたような感覚だよ
0260デフォルトの名無しさん2016/02/01(月) 18:03:33.95ID:JTo/Q0C3
確かにJavaのRAIIはCloseableとAutoCloseableの違いを理解してないと正しく使いこなせないからな
>>259のオツムがフットーしてしまうのも致し方ない
0261デフォルトの名無しさん2016/02/01(月) 19:47:56.26ID:FCPkKuCG
C++に移ってきたjava厨だよ
newしたままdeleteしねぇ糞ソース大量生成しやがる
0262デフォルトの名無しさん2016/02/01(月) 20:09:02.04ID:qjT3Q9+K
>>261
Java厨は犬派で、C++厨は猫派だからな
newと鳴いたら、deleteるからな
0263デフォルトの名無しさん2016/02/01(月) 20:24:37.67ID:ZBzDFClp
>>262
こういう喩え話って、短い文章中に多くの情報が込められてるものだが。

無粋を承知でお願いします。解説してください。
0264デフォルトの名無しさん2016/02/01(月) 20:42:15.43ID:aUqGS129
>>261
Java 厨に生ポなんて使わせるお前が狂ってる
0265デフォルトの名無しさん2016/02/01(月) 20:46:33.11ID:qjT3Q9+K
>>263
深い意味は無いよ
C/C++やるときはnewしたらdeleteせよ!って鉄則でしょ
ニャー(new)と鳴いたら、必ずデレてる(deleteる)からC++厨は猫派
単なるダジャレだよw
0266デフォルトの名無しさん2016/02/01(月) 20:51:56.51ID:JTo/Q0C3
>newしたらdeleteせよ!って鉄則でしょ

低能のお前にはわからないかも知れないが
そんなことはない
0267デフォルトの名無しさん2016/02/01(月) 21:00:17.78ID:fOHJkiXU
猫は飯くれと撫でろしか言わない
自分が人間より上だと思ってるのでデレることはない
0268デフォルトの名無しさん2016/02/01(月) 21:32:50.64ID:JTo/Q0C3
>>264
ジャバ厨とレッテルを貼るのではなく、たまたまソイツが低能だからということに気付くべき
Javaでもリソース開放は行うし、C++スレにも>>250,>>252,>>253のようなメモリも開放できない奴もいる
0269デフォルトの名無しさん2016/02/01(月) 21:42:26.29ID:BsHDgmsO
生ポってどんな場面で使うの?
0270デフォルトの名無しさん2016/02/01(月) 22:07:54.53ID:wHu9vKIt
>>268
低脳な Java 使いだから Java 厨ってラベル貼られてることに気づくべき
0271デフォルトの名無しさん2016/02/01(月) 22:57:12.27ID:47CQ9v48
>>269
ツリー構造で子が親へ参照を持つときに使ったことがあるな
相互参照するけど、親の寿命管理が必要が無いのでshared/weak_ptrが不要なケース
↓こんな感じ
class tree_view
{
tree_view *parent;
vector<unique_ptr<tree_view>> children;
};
0272デフォルトの名無しさん2016/02/01(月) 23:10:37.79ID:BsHDgmsO
>>271
deleteの出番なしか
0273デフォルトの名無しさん2016/02/01(月) 23:55:10.43ID:CuJD672c
>>268
だったら模範解答貼ってみせろよクズ
0274デフォルトの名無しさん2016/02/02(火) 00:06:14.39ID:ygGmQV70
>>273 >>231
0275デフォルトの名無しさん2016/02/02(火) 00:14:57.63ID:oBfAWjKR
>>271
子を作り管理するのは親ですか?
0276デフォルトの名無しさん2016/02/02(火) 00:50:11.96ID:AUeQZlYi
生ポ渡しするなら生成するのは普通は親でも子でもなくファクトリだと思う
0277デフォルトの名無しさん2016/02/02(火) 00:59:22.35ID:AUeQZlYi
生ポ渡しってただただ生ポ渡すってだけの意味な
こう書いとかないと馬鹿には使えないが口癖のボットに絡まれそうだし一応書いとくわ
0278デフォルトの名無しさん2016/02/02(火) 01:25:45.50ID:x5amnXbs
>>260
へえJavaにもRAIIの概念なんてあったんだ
Javaな現場になんてもう何年も関わってないんで知らんかったわ
0279デフォルトの名無しさん2016/02/02(火) 01:37:28.22ID:r5dd6eSW
沖林正紀の悲劇を繰り返すな
0280デフォルトの名無しさん2016/02/02(火) 03:58:43.22ID:uTTEQY4N
罵倒してるやつの態度は悪いけど
例だろうとポインタ間違えた上に
今時newしてvectorにpush_backしちゃうようなコード書いて
その上逆ギレしちゃう奴は正直ダメだと思う
0281デフォルトの名無しさん2016/02/02(火) 06:45:21.02ID:5quLb8ti
質問です。
http://ideone.com/QRZXDk
上の21行目の再解釈キャストで型変換してるところってVCでは意図したとおりに動いたのですが、
これって他の環境でも大丈夫ですか?
0282デフォルトの名無しさん2016/02/02(火) 07:52:12.29ID:Vw/b/5l0
配列a[10]で&a==&a[0]となる理由がわかりません。
おしえてください。
&a[0]はaの要素の1番目の番地で&aはaの1番目の要素を
指し示すアドレスのアドレスの気がするからです。
0283デフォルトの名無しさん2016/02/02(火) 07:59:56.34ID:N9T32bdW
アドレスのアドレスなんてものは無いということに気がつけばまぁそんなもんかと理解できるかと
(ポインタ変数のアドレスならある)
0284デフォルトの名無しさん2016/02/02(火) 09:42:40.95ID:LvBWX7cX
例外機能をoffにした場合
std::vector<int> v(???);
でメモリの確保に失敗した場合の動作はどうなりますか
0285デフォルトの名無しさん2016/02/02(火) 11:14:27.48ID:NoB4axe7
"自動車"クラスを"人間"クラスが操作するとします。

"自動車"クラスが提供する個々の機能(例えばアクセルやブレーキ)は、
サブクラスが提供(例えばアクセルはエンジンクラスに定義)して、
"自動車"クラスは特に関与しないものとします。

この前提において"自動車"クラスを定義する場合、"自動車"クラスは
サブクラスを継承するかたちで定義したほうが良いでしょうか?
それとも、自動車クラスが個々のサブクラスのインスタンスを保持して
メソッドをラップしたほうが良いでしょうか?
0286デフォルトの名無しさん2016/02/02(火) 11:22:39.18ID:ygGmQV70
>>281
継承を確信できるところでのダウンキャストは static_cast の出番。 5.2.9 [expr.static.cast] p2
reinterpret_cast で作った結果に移植性があるのはごく一部だけ。 5.2.10 [expr.reinterpret.cast]
0287デフォルトの名無しさん2016/02/02(火) 11:22:52.91ID:MIlHcyxr
人とエンジンは特性上車とは異質であるが為継承ではなくラップした方が融通性能高いことは明白である
0288デフォルトの名無しさん2016/02/02(火) 11:23:10.07ID:ygGmQV70
>>282
いいかげんな教材には a が「配列先頭要素へのポインタである」などと
書いてあるかもしれないが、実際には「配列」であり一部の例外を除いて
「配列先頭要素へのポインタに暗黙変換される」ということになっている。
& 演算子は例外のひとつで、 &a で配列そのものへのポインタが得られる。
4 [conv] p8
0289デフォルトの名無しさん2016/02/02(火) 11:23:22.64ID:ygGmQV70
>>284
非標準の動作なので、まずコンパイラのマニュアルを調べる。
書いてなければ、どうせ移植性は期待できないので実験でもいいかもしれない。
0290デフォルトの名無しさん2016/02/02(火) 11:24:45.55ID:ygGmQV70
>>285
https://www.google.co.jp/search?q=is-a+has-a
0291デフォルトの名無しさん2016/02/02(火) 11:30:10.28ID:NTv/QStd
>>285
当然後者。
現実の関係を模倣するのが普通。

一点、ラップってのをどういう意図で使っているのかが気になる。
個々の部品を組み合わせて、車としての機能を提供すると考えてね。
部品の機能をスルーするだけのラッパーはあまり出ないはず。
02922852016/02/02(火) 11:53:42.81ID:NoB4axe7
皆さん、回答ありがとうございました。

継承と包含の関係を理解してませんでした。
ちなみに”サブクラス”という言葉の使い方も誤解してたみたいです(^^;

>>291
>ラップってのをどういう意図で使っている

部品の機能をスルーするだけのラッパーという意味でした (^^;

その辺も含めてもう少し設計を見直したいと思います。
0293デフォルトの名無しさん2016/02/02(火) 13:09:09.90ID:ZM61xwKS
未だbetter Cより進んだ使い方ができない
0294デフォルトの名無しさん2016/02/02(火) 13:26:24.18ID:7f7wf/mW
>>284
俺の環境だと、色々省略すれば
std::vector : protected std::_Vector_base {
vector(size_type __n, const allocator_type& __a = allocator_type()) : _Vector_base(__n, __a) { _M_default_initialize(__n); }
};
std::_Vector_base {
_Vector_base(size_t __n, const allocator_type& __a) { _M_create_storage(__n); }
};
となって、最終的に__gnu_cxx::__alloc_traits<_Alloc>::rebind<_Tp>::other::allocate() defined at ext/new_allocator.hが呼び出されて
pointer allocate(size_type __n, const void* = 0) {
if (__n > this->max_size()) std::__throw_bad_alloc();
return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp)));
}
が走る。つまり、俺の環境だと、std::vector<int> v(100);すると::operator new(std::size_t)が呼び出されて、例外機構を殺して確保も失敗するなら投げられたbad_alloc例外を処理できずにコケる。
これを書き換えてoperator new(__n * sizeof(_Tp), std::nothrow);とするならallocateはメモリを確保できない時にnullptrを返す。すると次に_M_default_initializeが走って、
最終的にplacement newが走って、thisをデレファレンスした瞬間にセグメンテーションフォールトでコケる。

要するに、例外が発生して安全に停止する前提でライブラリが組まれてるから、例外機能をオフにしたら不安定な動作になる。
例外機能をオフにしようが何しようがthrow自体は出来るので、きちんとcatchしましょうって話に落ち着くかと。
0295デフォルトの名無しさん2016/02/02(火) 14:09:39.60ID:oBfAWjKR
>>288
知らなかった・・・
0296デフォルトの名無しさん2016/02/02(火) 15:14:11.42ID:Ycdr5jOx
まあせいぜい「配列への参照」くらいまでだな。
0297デフォルトの名無しさん2016/02/02(火) 15:35:32.57ID:TPiwOAfk
aが配列だったらint*の引数部分に&aの形でもいいのか
なんか気持ち悪いな
0298デフォルトの名無しさん2016/02/02(火) 15:59:38.85ID:5quLb8ti
>>286
回答ありがとうございます。
protectedで継承しているのでstatic_castは無効なのです。
これは移植性ないとみるべきなんでしょうか。
強引にCスタイルキャストでごまかすべきか・・・。Orz
0299デフォルトの名無しさん2016/02/02(火) 17:00:35.47ID:ucpE/ELv
>>282
細かいことを言うようだけど &a == &a[0] ではないよ。
下の例で、3つのprintf()は同じ値(アドレス)を表示する。
けれども if の部分で有効なのは最初の行だけ。
下の2つのif行の注釈を外すとコンパイルエラーになるはず。
a と &a[0] は等しい。
&a と &a[0] は(値は同じだが)型が違う。型が違うので比較はできない。


#include <cstdio>

int main() {
 int a[] = {1, 2, 3, 4};

 printf("a == %p\n", a);
 printf("&a[0] == %p\n", &a[0]);
 printf("&a == %p\n", &a);

 if (a == &a[0]) printf("Equal\n");
 // if (&a == &a[0]) printf("Equal\n");
 // if (a == &a) printf("Equal\n");

 return 0;
}


>>282 の本題、&a と &a[0] の値が同じになる理由は、
配列の中身がメモリにどう格納されるか、を図で表すと分かりやすいんだが
俺の表現力では無理なんでどなたか頼む。
0300デフォルトの名無しさん2016/02/02(火) 17:01:52.82ID:7f7wf/mW
>>298
castして欲しくないからprotectedにしてるんじゃないの?
0301デフォルトの名無しさん2016/02/02(火) 17:23:10.99ID:5quLb8ti
>>300
いやー、ハンドルみたいな使い方を規定していて、
自分は外部関数で値を変更したいんですけど、ユーザーには触ってほしくない。
という、わがままな欲求です。
そのうちUnified Call Syntaxが入ったら、いろいろやろうと思ってるところです。
0302デフォルトの名無しさん2016/02/02(火) 17:25:43.26ID:MIlHcyxr
>>299
コレ昔VC6でやったら結果が違った
BCC5だとすべて同じ値なのに
0303デフォルトの名無しさん2016/02/02(火) 17:29:56.27ID:MIlHcyxr
vc6だと&aが結局何処差し示しているかわからんかった
03042992016/02/02(火) 17:53:41.97ID:ucpE/ELv
>>302
a[] において &a が配列全体のアドレスを表すってのは
ANSI C で統一された挙動だったね。調べ直しちゃったよ。

C++ でも成立するよな。自信が揺らいできた。
0305デフォルトの名無しさん2016/02/02(火) 17:55:25.15ID:C4M/U0aw
VCは規格準拠してないらしいからね
しかたないね
0306デフォルトの名無しさん2016/02/02(火) 18:30:04.71ID:1NZHqYvt
>>282
たまたまお前の処理系がバイト単位でリニアアドレッシングしてるから。
int a[3]; について
 &a[0] は先頭要素のアドレス
 &a は「a[0] a[1] a[2]」という配列全体のアドレス
だから一致する
0307デフォルトの名無しさん2016/02/02(火) 18:31:29.65ID:QW7JMPO0
>>282
https://ideone.com/woT6Lc
&a[0]は要素へのポインタ(一個目の要素へのポインタ)
&aは配列へのポインタ(一個目の配列へのポインタ)だよ

>>231
     :(~):
   :(i:i:i:i:i):
   :(i:i:i:i:i:i:i:):
  :( ゙´ω`゙):   …
  :(:::::::::ソ:::っ:
   :し─J ┃:
0308デフォルトの名無しさん2016/02/02(火) 18:35:17.86ID:KYl+p0oO
一個目の配列って、日本語変
0309デフォルトの名無しさん2016/02/02(火) 19:17:24.83ID:WSo7+ODL
&&&&****aとか&&&&aとかにしても通ってしまう気がした
0310デフォルトの名無しさん2016/02/02(火) 20:12:44.79ID:po3vtalA
arrayと&array[0]が同じなら
なんでsizeof(array)で正しくサイズが出てくるのか分からん
0311デフォルトの名無しさん2016/02/02(火) 20:35:13.03ID:WkrnCzmR
>>310
> arrayと&array[0]が同じなら
ポインタに変換したら一緒になると言うだけ

> なんでsizeof(array)で正しくサイズが出てくるのか分からん
array 自体のサイズをコンパイラは知ってるから
0312デフォルトの名無しさん2016/02/02(火) 20:54:40.03ID:MIlHcyxr
>>309
&と&&は別物だよ
ちなみに&&は定数も代入できる
0313デフォルトの名無しさん2016/02/02(火) 20:56:18.82ID:RveVHAYz
>>312
馬鹿は去れ
0314デフォルトの名無しさん2016/02/02(火) 21:28:49.56ID:5quLb8ti
array[] -> 配列の型
array[0] ->配列の要素の型

sizeof(array)はdecltype(array)の暗黙に持ってる長さ情報にアクセスしている?
array == &array[0] はアドレス値は同じだが、型自体は違うので持ってる情報は違うもの。前者はT[]。後者は(&T)
暗黙の型変換でぐちゃぐちゃになってるのはお前の頭だ!
であってる?
0315デフォルトの名無しさん2016/02/02(火) 21:29:30.66ID:5quLb8ti
T&か。
0316デフォルトの名無しさん2016/02/02(火) 21:30:29.16ID:MIlHcyxr
int &&a = 5 ;
0317デフォルトの名無しさん2016/02/02(火) 21:33:13.54ID:5quLb8ti
>>316
int&& a=int(5);と等価だっけ?
0318デフォルトの名無しさん2016/02/02(火) 21:34:17.88ID:MIlHcyxr
T&&a=5 ; が a自体の参照で、
T&&a=n ; でnの参照になったりする。自動で。
0319デフォルトの名無しさん2016/02/02(火) 21:34:40.95ID:06fZR6NS
const hoge h;
h.~hoge();
デストラクタはconstついてないのに呼べるのは何故ですか
0320デフォルトの名無しさん2016/02/02(火) 21:53:06.16ID:RveVHAYz
>>302
今確認したが同じアドレスになった
どうしてそう息を吸って吐くように嘘をつくのか

ちなみに&aがどこを指しているかわからないのは
Visual C++ 6.0じゃなくてお前のオツムが原因
0321デフォルトの名無しさん2016/02/02(火) 22:09:17.83ID:MIlHcyxr
>>320
Hotfixいれまくったりすると環境変わるからね
昔のことだからよく覚えてないけど
0322デフォルトの名無しさん2016/02/02(火) 22:20:22.89ID:RveVHAYz
まあこのメッセージを読んでもどこ指してるかわからないようでは致し方ない

int *p = &a;
error C2440: 'initializing' : 'int (*)[4]' から 'int *' に変換することはできません。(新しい動作 ; ヘルプを参照)
0323デフォルトの名無しさん2016/02/02(火) 22:51:04.27ID:MIlHcyxr
>>322
バカでもわかる型の違いですけど
なんでキャストしないのですか?
0324デフォルトの名無しさん2016/02/02(火) 23:11:50.94ID:x5amnXbs
キャストで逃げようとするほうがバカ
なんで&a[0]にしないのですか?
0325デフォルトの名無しさん2016/02/02(火) 23:20:08.01ID:RveVHAYz
知っててキャストするなら問題ないだろう
だが>>323の様にどこを指しているかわからないと言ってるのにキャストするのはヤバい
>>318とかはよ病院に行くレベル
0326デフォルトの名無しさん2016/02/02(火) 23:20:42.79ID:x5amnXbs
(int*)a:7文字 static_castだと当然もっと長くなる
&a[0]:5文字
0327デフォルトの名無しさん2016/02/02(火) 23:27:30.24ID:MIlHcyxr
何処もヤバくないと思うんだがね
病院逝くのは貴様の方だろ
0328デフォルトの名無しさん2016/02/02(火) 23:31:01.70ID:7f7wf/mW
&*a:3文字
0329デフォルトの名無しさん2016/02/02(火) 23:40:56.45ID:x5amnXbs
&a[0]ならaがstd::vector<int>になっても通用するからそう書けよこのスットコドッコイども
0330デフォルトの名無しさん2016/02/03(水) 00:24:20.72ID:5VKefHqD
c++スレ名物の殴り合いが始まりました!
0331デフォルトの名無しさん2016/02/03(水) 07:32:59.13ID:Gb259GwX
>>329
(int*)aって書ける時点でaは配列かポインタだろ
なんでvectorクラスを仮定してんだよ
■ このスレッドは過去ログ倉庫に格納されています