【初心者歓迎】C/C++室 Ver.93【環境依存OK】
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2014/10/05(日) 16:53:48.48ID:4FShMSYHただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。
前スレ
【初心者歓迎】C/C++室 Ver.92【環境依存OK】
http://peace.2ch.net/test/read.cgi/tech/1406801653/
【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)
0002デフォルトの名無しさん
2014/10/05(日) 16:56:04.71ID:4FShMSYH0003デフォルトの名無しさん
2014/10/05(日) 16:57:29.04ID:a6/ySe32,,イ`" 、-' `;_' ' ..::::::::::::::...
,-、 _.._ ( (,(~ヽ'~ ..:::::::::::::::::::::::
)'~ レー' 〉 ヽ i`'} .:::::::::::::::::::::::
~つ '-ー、 i | i' ...:::::::::::::::::::::::
/ < / 。/ ! ......::::::::::::::::::::::::: これは>>1乙じゃなくて
/ ~^´ /},-'' ,●::::::::::::::::::::::::::::::::::::
i、 ,i' _,,...,-‐-、/ i :::::::: .:::::::::::::
..ゝ <,,-==、 ,,-,/ .::::::::::: 放射能がうんたら
) {~''~>`v-''`ー゙`'~ ..::::::::: ........::.
{ レ_ノ ..::::::::. ......:::::::::
ノ '' ..::::::: ...::.:...:::::::::
.::::::::: ...:......:::::::::::: .
.:::::::::::. ..... .. ..:::::::::::::::::::::::: :::.
::::::::::::::::.::::::....:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::.. :: ::..
.:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::: ::.
::::::::::::::::: :::::::::::::::::::::::::::::: :::::
.:: ::. :::
0004デフォルトの名無しさん
2014/10/06(月) 03:55:59.30ID:PopA18EU変数が開放されるタイミングっていつでしょうか
変なことを聞いていたらすいません
0005デフォルトの名無しさん
2014/10/06(月) 04:03:08.69ID:HfILY2kH0006デフォルトの名無しさん
2014/10/06(月) 04:12:44.45ID:PopA18EUありがとうございます!
0007デフォルトの名無しさん
2014/10/06(月) 04:56:27.02ID:PopA18EU質問させて頂いた折に
>>std::list<抽象クラス*> list;
>>list.push_back(new 派生クラス);
>>ならできる
>>できるけど入れるのはunique_ptrにしとけよ
>>std::list<std::unique_ptr<base>>
と教えて頂いたので
std::list<std::unique_ptr<Base>> base_list;
base_list;.push_back( new 派生クラス );
としたのですが、
オーバーロードされた関数
"std::list<_Ty, _Alloc>::push_back [代入_Ty=std::unique_ptr<Base, std::default_delete<Base>>,
_Alloc=std::allocator<std::unique_ptr<Base, std::default_delete<Base>>>]"
のインスタンスが引数リストと一致しません
引数の型: (派生クラス *)
と出て格納できません...
単純に引数の型が違うぞ
ということだとは分かるのですが
これだと派生クラスを格納できないです...
何が間違っているのか教えていただけると幸いです。
よろしくお願いします。
0008デフォルトの名無しさん
2014/10/06(月) 05:06:35.25ID:HfILY2kHこれでおk
0009デフォルトの名無しさん
2014/10/06(月) 06:59:01.31ID:GjS8ijKL>>できるけど入れるのはunique_ptrにしとけよ
>>std::list<std::unique_ptr<base>>
コレかいたのは俺だけど
list.push_back( std::unique_ptr<base>{new 派生クラス} );
こうやって入れる
0010デフォルトの名無しさん
2014/10/06(月) 14:23:22.88ID:GyuMcj/U0011デフォルトの名無しさん
2014/10/06(月) 15:28:04.08ID:PopA18EU調べてみたところ、コンテナ内でで生成する分コピーのコストが省かれるとか...
しかもコードも簡潔になりますね。
便利ですね
>>9
なるほど
unique_ptrとして格納しないといけない
という事ですかね...
考えてみれば当たり前ですね...
この場合、>>8 さんと >>9 さん
どちらの書き方の方が良いのでしょうか
0012デフォルトの名無しさん
2014/10/06(月) 18:01:21.24ID:hlfW/IbBunique_ptrがどういうものか解ってないようだからshared_ptr使っとけ
0013デフォルトの名無しさん
2014/10/08(水) 17:27:39.42ID:vTZNrayYどのクラスからでも値を変えたいとした時に
先頭のイテレータを渡すという方法は正しいですです?
0014デフォルトの名無しさん
2014/10/08(水) 17:37:18.69ID:i3wuFRlZ固定長として扱うならおk、
その場合はstd::arrayの方が型で説明できるからそうしたいけど。
要素の追加・削除をするならNG
0015デフォルトの名無しさん
2014/10/08(水) 17:41:04.20ID:umcRRgPCダメ。誰かが追加を行なった瞬間にそのイテレータは無効になる。
つーか、なんでvectorの参照を渡さないの?
0016デフォルトの名無しさん
2014/10/08(水) 18:11:45.18ID:vTZNrayY参照渡しだと先頭アドレスを渡せるんですかね
そこからイテレータを作ってという形になるんですかね
理解しきれてないです
ごめんなさい
0017デフォルトの名無しさん
2014/10/08(水) 18:23:20.82ID:umcRRgPC{
for (auto it = vec.begin(); it != vec.end(); ++it) {
someSequence();
}
}
std::vector<someType> vec;
someFunc(vec);
0018デフォルトの名無しさん
2014/10/08(水) 19:56:45.01ID:vTZNrayYありがとうございますです
これは先頭のアドレスのみを渡しているという認識でいいですかね
0019デフォルトの名無しさん
2014/10/08(水) 20:21:10.60ID:Mr3CuVyx{
for (auto it = vec.begin(); it != vec.end(); ++it) {
someSequence();
}
}
std::vector<someType> vec;
someFunc(&vec);
こうならわかるかな・・・
0020デフォルトの名無しさん
2014/10/08(水) 20:35:43.38ID:Msp0R78m間違ったコードは逆に混乱するからNG
0021デフォルトの名無しさん
2014/10/08(水) 20:51:26.83ID:vTZNrayYあと>>19は間違っているのですか?
0022デフォルトの名無しさん
2014/10/08(水) 21:07:58.15ID:udc9ZQ+pポインタも参照もわかってねーじゃねーか
0023デフォルトの名無しさん
2014/10/08(水) 21:10:37.56ID:Msp0R78m構造体のメンバー変数に、ポインタがある場合を考えるべし
0024デフォルトの名無しさん
2014/10/08(水) 21:51:34.97ID:Ltx3TZMZそもそも異なるクラスからっていうのはプロセス跨ぐのかスレッド跨ぐのか同一スコープ内なのか前提条件なさすぎて答えられなくね?
0025デフォルトの名無しさん
2014/10/08(水) 21:52:47.28ID:Ltx3TZMZ設定×
設計。
0026デフォルトの名無しさん
2014/10/08(水) 23:05:51.56ID:Mr3CuVyxああドット演算子をアロー演算子に直すの忘れてたわ
0027デフォルトの名無しさん
2014/10/09(木) 16:56:41.56ID:yBrUft/K0028デフォルトの名無しさん
2014/10/09(木) 16:59:56.78ID:XWUcutqt0029デフォルトの名無しさん
2014/10/09(木) 18:12:51.93ID:EHl7htGYNODEFAULTLIB状態でitoaを使いたいです。
ntdll.dllの_itoa関数を暗黙的インポートしたいのですが
「error C2375: '_itoa' : 再定義されています。異なるリンケージです。」
とでて出来ません。
明示的に別名の関数としてインポートするしかないのでしょうか?
0030デフォルトの名無しさん
2014/10/10(金) 03:06:13.85ID:Sl2wbznmちなみにコンパイラーのエラーのようなので
NODEFAULTLIBとは関係ないでしょう。
0031デフォルトの名無しさん
2014/10/10(金) 05:15:45.39ID:JlZ57FsU結局user32.dllのwsprintfで同じことができるようなのでそれで済ませることにしました。
0032デフォルトの名無しさん
2014/10/12(日) 15:44:47.20ID:8o33UJ2O同列に見えないからソース見にくいよね?
else if以下は条件式が右にずれてしまうし…
いつもこう書いてるんだけど
if(--------){
}
else if(--------)-{
}
else{
}
これはこれでまとまり感がないし…
なんかいい書き方ないですかね
0033デフォルトの名無しさん
2014/10/12(日) 15:46:05.55ID:8o33UJ2Oif(--------){
}else if(--------)-{
}else{
}
これ。
コメント書きにくいしなぁ
なんかないかなぁ…
0034デフォルトの名無しさん
2014/10/12(日) 15:48:28.27ID:vP4KqGkP} else if (=============) {
} else if (~~~~~~~~~~~~~~~) {
} else if (__________________) {
}
0035デフォルトの名無しさん
2014/10/12(日) 16:05:19.98ID:n4H9xNXC俺そのスタイルなんだけど、コメント書きにくいってのは何で?
0036デフォルトの名無しさん
2014/10/12(日) 16:31:02.60ID:K67PydJNこれが一番一般的で実際見やすくね?
変なところで切られたら
構造が把握しにくい。
何処かの条件に入ったら
それ以降の条件を見ないのが
if else if ...なのに
0037デフォルトの名無しさん
2014/10/12(日) 16:43:02.41ID:sBs95EDtただしifの閉じ波カッコの行とelseの行は必ず隣接させてる
(コメント行も入れない。elseについてのコメントが必要ならelse句の開き波カッコの後ろに入れる)
else ifのおさまりの悪さは俺も思うけど、諦めてそういう句として見るようにしてる
0038デフォルトの名無しさん
2014/10/12(日) 16:47:37.65ID:bfCObt5lコメントも加えると、こういうことかな?
// if の条件式についてのコメント
if(--------){
// if 成立時に実行する内容のコメント
}
// else if の条件式についてのコメント
else if(--------)-{
// else if の同
}
// 非成立時のコメント?
else{
// 同
}
0039デフォルトの名無しさん
2014/10/12(日) 16:54:38.55ID:sv4A2Uaz俺もこれだな
コメントは、
// ケース1
if(--------){
// ケース2
} else if(--------){
} else { // ケース3
}
みたいな。
0040デフォルトの名無しさん
2014/10/12(日) 16:57:56.67ID:6GWa82oQ0041デフォルトの名無しさん
2014/10/12(日) 17:02:37.95ID:K67PydJN0042デフォルトの名無しさん
2014/10/12(日) 17:09:37.61ID:K67PydJN良いのだけど。
0043デフォルトの名無しさん
2014/10/12(日) 17:30:09.51ID:sBs95EDtそこでどんな理由が説明されていたか覚えてないな・・・
今の俺自身の考えは
(1) 処理のまとまりが長くなりすぎる
if → else if → else if ... ってのが、ある意味一つの処理のまとまりとも取れるので
それが長くなりすぎると全体の把握がしづらくなることがある
個人的には、else ifが2個ついていたら「どこまで続くんだこれ・・・」って不安になってくる
「1つの関数を大きくしすぎないようにする」と似たような考え方
(2) switchで書けるケースがある
一つの状態(変数)を軸にして分岐する場合はswitch文の方がすっきりすることがたまにある
まあこれは安易に書き換えられないケースの方が多そうだけど
(3) 付け焼刃的な実装になりがち(?)
これは完全に俺自身の経験からくるもので万人に当てはまるものではないけど
「あ、このケース漏れてた。じゃelseifで補足しよう」的な考えが見えてしまって
やっぱり「大丈夫ですかこのコード・・・」的な不安を覚える(たとえ自分が書いたコードでも)
0044デフォルトの名無しさん
2014/10/12(日) 17:45:14.00ID:K67PydJN本来単純なブロック構造で
switchとにたようなロジックを
if else if ...で書かせるから
無駄にわかりづらくなる。
0045デフォルトの名無しさん
2014/10/12(日) 18:02:37.48ID:6GWa82oQそんなスーパーメソッドは止めて適切に処理分割しよう
単純なものなら見難くはならないのでif elseそのものは否定しないけど、単純化したら三項演算子でよくね?ってケースになることも多い
if elseよりもswitchのほうが良い最適化になることがある
くらいかなー
アジャイル正義とは言わないけど割と感覚的に共感できることは多いよ
まあ実際の仕事だと変なコーディングルールやらでクソコードになっちゃってストレスマッハだけど
0046デフォルトの名無しさん
2014/10/12(日) 18:12:11.59ID:sv4A2Uaz> 個人的には、else ifが2個ついていたら「どこまで続くんだこれ・・・」って不安になってくる
一目で把握できないなら、あなたの言うように...
> 「1つの関数を大きくしすぎないようにする」
と同じで、適切に分割すればいいだけかと。
> (2) switchで書けるケースがある
そりゃ書けるなら switch の方がいい。
> (3) 付け焼刃的な実装になりがち(?)
設計のやり方の問題でしょ?
オブジェクト指向で条件分岐が頻出するのはおかしい(多態を使え)と言うのはあるけど、それと混同してない?
0047デフォルトの名無しさん
2014/10/12(日) 18:23:03.27ID:sBs95EDt殆どはあなたの言う通りだと思う
(3)については>>41の「なんで?」に対する俺の意見のつもりだった
まさに設計の問題
>>42
Lispのcondっぽく、というとこんな感じ?(exprに相当する部分が汚いけど許して)
http://pastebin.com/7p6BDS9w
0048デフォルトの名無しさん
2014/10/12(日) 18:26:08.42ID:sBs95EDt忘れて(;´Д`)
0049デフォルトの名無しさん
2014/10/13(月) 09:24:30.77ID:0ktC7py0for (int i=0; i<5; i++) {
if (条件1 && i==0) {
// 処理1
break;
}
if (条件2 && i==1) {
// 処理2
break;
}
…
if (条件4 && i==4) {
// 処理4
break;
}
}
0050デフォルトの名無しさん
2014/10/13(月) 09:40:18.17ID:HAWua27Yインデクスを条件にするのはおかしくね?
ループ内に入れる意味が無いと思うんだが。
ただの例だとは思うんだけど、実際いるんだよねー。
0051デフォルトの名無しさん
2014/10/13(月) 09:59:02.19ID:0ktC7py0ループに入れないと多条件分岐の大域脱出ができない
if else を使わずにcomplex conditionの多条件分岐をするにはこれしかない
0052デフォルトの名無しさん
2014/10/13(月) 10:02:24.30ID:R99qWLrl潔くgotoしたほうがよっぽどすっきりするんじゃ・・・
0053デフォルトの名無しさん
2014/10/13(月) 10:06:09.49ID:PPv6Llzmgoto がウォーミングアップを開始したようです
0054デフォルトの名無しさん
2014/10/13(月) 10:32:27.43ID:yDwfk/q+使えよ
switch {
case if (a<0):
//何らかの処理
break;
case if (a==0):
//
...
}
みたいな文法が追加されないものか。
0055デフォルトの名無しさん
2014/10/13(月) 10:32:57.61ID:UJCB5jQM0056デフォルトの名無しさん
2014/10/13(月) 10:33:52.69ID:UJCB5jQMRuby使っとけ
0057デフォルトの名無しさん
2014/10/13(月) 15:03:50.49ID:C0citLy+それは何かを見失ってるぞ…
0058デフォルトの名無しさん
2014/10/13(月) 15:28:31.26ID:yFRqmPNpwhile(1){
if(条件1){
// 処理1
break;
}
if(条件2){
// 処理2
break;
}
…
if(条件4){
// 処理4
break;
}
break;
}
0059デフォルトの名無しさん
2014/10/13(月) 15:56:57.90ID:xmRmtkZK#pragmaで消すのもやだ!
0060デフォルトの名無しさん
2014/10/13(月) 16:11:03.09ID:oBfc/N420061デフォルトの名無しさん
2014/10/13(月) 16:15:28.41ID:PPv6Llzmfor(;;) { }
0062デフォルトの名無しさん
2014/10/13(月) 16:16:21.40ID:ILi3nfyTif(条件1){
// 処理1
break;
}
if(条件2){
// 処理2
break;
}
…
if(条件4){
// 処理4
break;
}
}while(0);
これでも定数条件警告はでるんかね
0063デフォルトの名無しさん
2014/10/13(月) 16:19:26.50ID:xmRmtkZK0064デフォルトの名無しさん
2014/10/13(月) 16:26:04.57ID:31lhSK+c割といい気がする
>>63
ループしなくていいんじゃないの?
0065デフォルトの名無しさん
2014/10/13(月) 17:02:55.96ID:yFRqmPNp0066デフォルトの名無しさん
2014/10/13(月) 19:47:15.34ID:xmRmtkZKじゃあなんでループスコープがあんの?
0067デフォルトの名無しさん
2014/10/13(月) 19:54:04.38ID:HxbDOdsz桁が揃う
0068デフォルトの名無しさん
2014/10/13(月) 20:21:29.13ID:6VoVg4Hp多重ループを抜けるためのものとして言語仕様に規定されてんだから
0069デフォルトの名無しさん
2014/10/13(月) 20:23:03.32ID:83yd1iMHbreak用
0070デフォルトの名無しさん
2014/10/13(月) 20:40:29.84ID:xmRmtkZKif (){
}else if(){
}else{
}
式合わせたいだけならこうじゃあかんの?
0071デフォルトの名無しさん
2014/10/13(月) 21:18:56.70ID:R99qWLrlってか反復実行用の制御構造を反復実行以外のために使うの
正直どうかと思うんだけども
あと桁揃えってそんなに必要か?ってのもあるし
0072デフォルトの名無しさん
2014/10/13(月) 21:27:11.36ID:VHCsShnLif () {
}
else
if () {
}
else {
}
0073デフォルトの名無しさん
2014/10/13(月) 22:26:38.93ID:eSZv2Iedどこからでもアクセス、変更できる
全ソース唯一で共通の変数が欲しいんですが
まずいでしょうか?まずいですよね...
どうしたらいいでしょうか
0074デフォルトの名無しさん
2014/10/13(月) 22:49:45.09ID:6TQ4M6Zyその定義用ファイルで定義
0075デフォルトの名無しさん
2014/10/13(月) 23:09:38.66ID:aHzEmfe8なかなか面白いアイディアだと思う。
俺だったら、
#define ifif if
#define elif else if
で、
ifif(...){
}
elif(...){
}
else{
}
はどうかな。
ififってモシモシって発音する。俺の発明。
0076デフォルトの名無しさん
2014/10/13(月) 23:20:25.78ID:Mz6dBuwi0077デフォルトの名無しさん
2014/10/13(月) 23:44:40.22ID:li7EYIGUそんなの書いてるやついたらぶん殴るわw
趣味なら好きにして良いけど
0078デフォルトの名無しさん
2014/10/13(月) 23:57:23.66ID:7i+sJhXAたぶん最低最悪の方法
0079デフォルトの名無しさん
2014/10/14(火) 00:02:39.56ID:li7EYIGUここに載ってそうなウンコードだよなww
0080デフォルトの名無しさん
2014/10/14(火) 00:12:30.16ID:Y0D0XXw9どうしてもというのであれば仮定義が近いが、それでも唯一というのは無理だね、ヘッダも使えない/使いたくないの?
0081デフォルトの名無しさん
2014/10/14(火) 00:27:43.42ID:rPKdJ04Uあ、すいません...
cppをソースっていうんでしたね...
ヘッダーでも全く問題ないです
0082デフォルトの名無しさん
2014/10/14(火) 01:18:36.52ID:GaMs9QlsどうしてもならSingletonにしてみればどうかな?
0083デフォルトの名無しさん
2014/10/14(火) 01:21:09.38ID:YkkW72Cg0084デフォルトの名無しさん
2014/10/14(火) 01:23:56.31ID:GaMs9Qlsどこがどう?
externするよりはSingletonにしてアクセサメソッド使うことでデバッグも容易になると思うけど何か読み違えたかな
そうならごめん
0085デフォルトの名無しさん
2014/10/14(火) 01:26:19.21ID:t5fH7arr俺は半分皮肉であのコードを書いたので
マジリアクションされても、その、困る
0086デフォルトの名無しさん
2014/10/14(火) 01:35:32.06ID:1U4zg6hkSingletonを使うかどうかは質問と関係なくね?
0087デフォルトの名無しさん
2014/10/14(火) 01:51:12.41ID:GaMs9Qlsうん、Singleton勧めた理由は上述の通りデバッグの観点から
超グローバル使うならリスク少ない方が良いかと思った
0088デフォルトの名無しさん
2014/10/14(火) 02:31:12.23ID:rPKdJ04U聞いたことはあったのですがこれを機に調べてみました。
素人目から見るとこれいいじゃん!
となったのですが、私の用途の場合どうなのでしょうか
シングルトンを.hに書いて
使いたいクラスでインクルード
そのクラスのコンストラクタでメンバに渡す
メンバ関数でいつでもアクセス・変更が可能
というような具合でしょうか?
0089デフォルトの名無しさん
2014/10/14(火) 06:01:42.33ID:sqIDnjxe> 私の用途の場合どうなのでしょうか
あんたの用途がわからんことにはなんとも...
0090デフォルトの名無しさん
2014/10/14(火) 07:15:12.54ID:lV7cR9FOボケにも皮肉にもなってないということだよ
0091デフォルトの名無しさん
2014/10/14(火) 09:02:01.54ID:yI2xaj4J0092デフォルトの名無しさん
2014/10/14(火) 12:38:47.77ID:iGc1RRvU割とあり
0093デフォルトの名無しさん
2014/10/15(水) 08:01:01.84ID:caHw/4to009471
2014/10/15(水) 08:02:56.80ID:Mz70dzpQ0095デフォルトの名無しさん
2014/10/15(水) 10:38:48.73ID:caHw/4to0096デフォルトの名無しさん
2014/10/18(土) 18:08:58.62ID:MX5ZltoIb1 {
if (...) { break b1; }
if (...) { break b1; }
}
b2 {
for (...) b3 {
for (...) { if (...) break b2; else brak b3; }
}
}
と思ったけど、流れが分かりにくくてやっぱ嫌だなw
0097デフォルトの名無しさん
2014/10/18(土) 18:20:58.99ID:RLn7ZGiN0098デフォルトの名無しさん
2014/10/18(土) 18:34:11.42ID:4Ds6Kb18if (...) { goto b1; }
b1:;
for (...) {
b3:;
for (...) { if (...) goto b2; else goto b3; }
}
b3:;
0099デフォルトの名無しさん
2014/10/18(土) 20:42:20.12ID:rcF0KJ7P0100デフォルトの名無しさん
2014/10/18(土) 21:05:12.23ID:b+FwjjaL条件式につけるようなコメントが本当に必要なのか?って感じがする
// iが0のとき
if (i == 0) {
// iが0のときの処理
}
とかバカバカしくね?
0101デフォルトの名無しさん
2014/10/18(土) 21:27:07.64ID:4Ds6Kb18if (ってやればいいよね
0102デフォルトの名無しさん
2014/10/19(日) 00:07:19.88ID:qe4xvLvdそれはコメント書くことがバカバカしいのではなくて
そのコメントの書き方がバカバカしいだけでは?
0103デフォルトの名無しさん
2014/10/19(日) 05:49:57.35ID:irMeVnbo例が悪い
0104デフォルトの名無しさん
2014/10/19(日) 14:21:02.67ID:sYDl3gbXif (...) {
...
return;
}
if (...) {
...
return;
}
...
...
}();
0105デフォルトの名無しさん
2014/10/19(日) 15:02:04.08ID:sVtqNbj4jQueryみたいだ・・・
0106デフォルトの名無しさん
2014/10/19(日) 15:10:49.12ID:GzqB2qjr0107デフォルトの名無しさん
2014/10/19(日) 15:47:46.94ID:n9kPv86Gだめです
下の下です
0108デフォルトの名無しさん
2014/10/19(日) 16:49:15.61ID:PsSi0GjTに、switchで文字列を使用する方法が書いてあるのですが、
問題なく動くし、switchで文字列が使える事は画期的だと思うのですが、
ググってもここ以外にこの方法に関してヒットしないのですが、世の中ではあまり
普及していない方法なのでしょうか?
このやり方を積極的に使っても問題ないでしょうか?
0109デフォルトの名無しさん
2014/10/19(日) 16:53:48.42ID:c/fNN/TFそんなのバグの元だやめとけ
0110デフォルトの名無しさん
2014/10/19(日) 16:55:32.08ID:PsSi0GjTわたしも今気付きました。
残念。
FAQかもしれませんが、switchで文字列を使うお勧めの方法は
ありますか?
0111デフォルトの名無しさん
2014/10/19(日) 16:59:11.07ID:I8zMPvcx4文字以上で比較がおかしくなるし、10文字以上でバッファーオーバーフローするし、エンディアン考慮してないし
ダメダメ過ぎる
0112デフォルトの名無しさん
2014/10/20(月) 04:43:09.29ID:R4boVMR3複数文字の文字定数を使ってるだけで、別に面白いテクではない
もちろんやらない方がいい
>>110
文字列を入力にintを返す関数を使えばいい
0113デフォルトの名無しさん
2014/10/20(月) 09:12:23.00ID:nHn9rVxHただ値返すだけのような処理ならbsearchかunordered_map使えよ
0114デフォルトの名無しさん
2014/10/20(月) 09:34:51.62ID:eWr20XAi0115デフォルトの名無しさん
2014/10/20(月) 21:53:32.14ID:y5NmhbBv0116デフォルトの名無しさん
2014/10/20(月) 22:23:16.91ID:YIaZ+UJI--- MyClass.h ---
class MyClass{
public:
int a;
// ...その他の定義がたくさん
private:
int b;
// ...その他の定義がたくさん
};
-----------------
を、
--- MyClass.h ---
class MyClass{
#include "public.h"
#include "private.h
};
-- public.h --
public:
int a;
// ...
-- private.h --
private:
int b;
// ...
のように、分割したのですが、おかしいですか?
もっとお勧めの方法があれば教えてください。
0117デフォルトの名無しさん
2014/10/20(月) 22:27:32.77ID:Z/nnvF1Aそんなでかいクラス作るな
もっと分割しろ
0118デフォルトの名無しさん
2014/10/20(月) 22:35:22.05ID:YIaZ+UJIレスありがとうございます。
MyClassの設計は別問題として、最初に示した例のように分割したファイルを
#include 文で読み込む方法は、一般的なやり方かどうかを教えてください。
0119デフォルトの名無しさん
2014/10/20(月) 22:38:02.03ID:Z/nnvF1A0120デフォルトの名無しさん
2014/10/20(月) 23:16:44.85ID:YIaZ+UJIググっても良い例が見つからないのですが、どこかお勧めのサイト
ありませんか?
0121デフォルトの名無しさん
2014/10/20(月) 23:49:59.29ID:OiFIr1mQとりあえずPImplあたりでprivate部分だけでも分離したら?
0122デフォルトの名無しさん
2014/10/21(火) 00:14:35.72ID:y+Kj1blL0123デフォルトの名無しさん
2014/10/21(火) 01:08:23.61ID:TXfJYF3Kリファクタリングして適切なサイズにするのが一般的だと思うが、社内の力関係とかで無理なら諦めろ
0124デフォルトの名無しさん
2014/10/21(火) 04:53:46.23ID:X9UkWcg0class MyClass{
#include "public.inc"
#include "private.inc
};
-- public.inc --
public:
int a;
// ...
-- private.inc --
private:
int b;
// ...
0125デフォルトの名無しさん
2014/10/21(火) 05:46:30.86ID:FIetDqZP0126デフォルトの名無しさん
2014/10/21(火) 11:43:07.07ID:c4wBsC2+0127デフォルトの名無しさん
2014/10/21(火) 11:52:23.39ID:AscR5tLz0128デフォルトの名無しさん
2014/10/21(火) 21:40:25.60ID:uqnmK+pt0129デフォルトの名無しさん
2014/10/21(火) 22:06:07.21ID:RG7X7O+y>>119 のいうとおりだ、ヘッダというのものは元来複数の .c, .cpp/.C から参照されるべきもの
0130デフォルトの名無しさん
2014/10/22(水) 21:12:18.01ID:ga5n3yyZVC++(mfc)で、
Aというダイアログクラスに、Bというリストコントロール(レポートビュー)を作成しています。
BはCListCtrlを継承した独自クラスで、そのなかにCというコンボボックスを作成しリスト内の項目で一部リストから選択できるようにしています。
CはCComboBoxを継承した独自クラスです。
これら全てを合わせて一つの機能をもったダイアログなのですが、
1.Cのコンボボックスのソースになる値(std::vector)
2.1.の変数を操作するメソッド(追加、削除、取得等)
3.Bのリストに表示する値(std::vector)
4.3.を操作するメソッド(追加、削除、取得等)
これらはそれぞれどのクラスに持つのが良いのでしょうか?
オブジェクト指向についてまだまだ勉強不足なのですが、
皆さんのご意見をお聞かせください。
ちなみに現在は、Aのダイアログクラスにすべての値(1.3.)を持たせ、
B,Cはそれのポインタを格納するメンバ変数を持っています。
2.はAのダイアログクラスのメンバ変数で操作し、
4.はCのリストコントロールクラスでリストが変更されるタイミングで変数の値を操作しています。
よろしくお願いします。
0131デフォルトの名無しさん
2014/10/24(金) 20:50:15.08ID:2OoN5cPHの時に、空文字列の要素を除去して v =
"abc"
"de"
"fgh"
にしたいのですが、vectorの要素をループで除去するとエラーして
うまく行きません。お勧めの方法教えてください。
0132デフォルトの名無しさん
2014/10/24(金) 20:59:50.39ID:1Ixd4XIg0133デフォルトの名無しさん
2014/10/24(金) 21:07:07.09ID:qs1er6cdttp://ideone.com/qUew3U
0134デフォルトの名無しさん
2014/10/24(金) 21:47:32.19ID:2OoN5cPHレスありがとうございました。
eraseとremoveを組み合わせてこんなに簡単に書けるとは、知らなかったです。
133さん有難うございました。
0135デフォルトの名無しさん
2014/10/24(金) 22:02:33.02ID:zZIfWK5xC++14だっけ?
0136デフォルトの名無しさん
2014/10/24(金) 23:34:06.70ID:h3WwlHdL0137デフォルトの名無しさん
2014/10/24(金) 23:49:54.78ID:bzRiGdHmそう
0138デフォルトの名無しさん
2014/10/25(土) 14:40:57.22ID:CQNov1ogなんだこれわ
うーむ未熟
0139デフォルトの名無しさん
2014/10/25(土) 14:46:05.50ID:GwfszP9iこのfor文の残念な仕様は何とかならないものか
for (const string& s : (const vector<string>&)v)
相当のことを簡単にしたいんだが
0140デフォルトの名無しさん
2014/10/25(土) 14:56:33.12ID:PupOMkEOそこに何の意味が?
0141デフォルトの名無しさん
2014/10/25(土) 15:21:11.20ID:BH5UYxje0142デフォルトの名無しさん
2014/10/25(土) 15:46:57.08ID:2HGeWB2jconst string & s = (const string &)*it;
vector<string>::const_iterator it = ((const vector<string> &)v).begin();
const string & s = *it;
非constのコストが違うかもしれないコンテナでの話とか
気分的な問題か
0143デフォルトの名無しさん
2014/10/25(土) 16:22:59.91ID:KswX28720144デフォルトの名無しさん
2014/10/25(土) 18:39:16.95ID:PupOMkEO0145デフォルトの名無しさん
2014/10/25(土) 18:51:37.16ID:VuWM8zaBfor (auto& itr = v.cbegin(); itr != v.cend(); ++itr)
を簡潔に書きたいってことだろ。
constにキャストするのは今の文法でconst_iteratorを得るための一手段ってだけで
0146デフォルトの名無しさん
2014/10/25(土) 19:11:43.50ID:PupOMkEO確実にcbegin呼ばせたいなら
そういうcbegin,cendラップして
begin.endとして見せる
template classとヘルパ関数作ればいい。
それが標準に無いのはそういう需要まで
想定していないだけじゃね。
まあ、std::cbeginが遅れて標準になるくらいだから、一般的な需要を網羅しきれていないのは確かだが。
0147デフォルトの名無しさん
2014/10/25(土) 19:13:38.13ID:dFV7jCVh0148デフォルトの名無しさん
2014/10/25(土) 21:43:08.79ID:Zc1H9u/Ghttp://ideone.com/PrJK5g
0149デフォルトの名無しさん
2014/10/25(土) 23:03:33.40ID:vC010Lko0150デフォルトの名無しさん
2014/10/25(土) 23:18:42.59ID:Vmq3hk+I0151デフォルトの名無しさん
2014/10/26(日) 02:25:41.90ID:NC0YiWNrポインタがコスト削減というのも、扱いが難しく危険というのも
なんとなーく分かりましたが
変哲もない、誰に渡すでもない
そんなローカル変数をもポインタで宣言すべきでしょうか?
0152デフォルトの名無しさん
2014/10/26(日) 02:36:02.76ID:tTDGdEGpポインタはインスタンス参照時の値コピーコストを減らすのが目的なので、
ポインタへわざわざnewしたインスタンスのアドレスを渡して、破棄(delete)を必須にするのは冗長になるだけ
0153デフォルトの名無しさん
2014/10/26(日) 03:17:23.53ID:NC0YiWNr確かに言われてみればそんな気がします
値を渡すことが無い限り、又はint1つ程度の小ささなら
普通の宣言でよいのですね
ありがとうございました
0154デフォルトの名無しさん
2014/10/26(日) 03:44:09.47ID:NI/V74vF0155デフォルトの名無しさん
2014/10/26(日) 04:19:18.75ID:tTDGdEGp普段使いだとまずないから普段は通常の変数宣言で良いよ
0156デフォルトの名無しさん
2014/10/26(日) 04:39:00.30ID:QN0pZI7Sバカは意味を考えないから
そういう形式的な観点でしか考えられないのだろう
0157デフォルトの名無しさん
2014/10/26(日) 05:55:15.51ID:P4UrXCNxわかります
0158デフォルトの名無しさん
2014/10/26(日) 06:59:51.73ID:7QrOBmsc質問が具体的操作の一例なのに構造だけ述べたってピンと来る人少ないだろう
0159デフォルトの名無しさん
2014/10/26(日) 07:07:58.69ID:/I9/+mIH大きさとか性能も大切だが そもそも
値としての振る舞いを期待しているのか参照としての振る舞いを期待しているのかの発想が無いらしい
0160デフォルトの名無しさん
2014/10/26(日) 07:16:13.76ID:7QrOBmsc0161デフォルトの名無しさん
2014/10/26(日) 07:30:04.50ID:/US9w/Z3低能って言葉が好きな人に関する傾向を考えると
わざわざ反応する必要はないと思う
0162デフォルトの名無しさん
2014/10/26(日) 07:58:33.05ID:/I9/+mIHなるほど
レスの内容を読む知能もない低能は
自演するしか能がないわけだなふむふむ
0163デフォルトの名無しさん
2014/10/26(日) 08:26:38.35ID:IQ+MA170ポインタの指してるメモリの1word前には確保したときのサイズが格納されてることもある
0164デフォルトの名無しさん
2014/10/26(日) 08:28:35.93ID:IQ+MA170ダブルポインタって呼び方いつから流行ったのか知らないけど
誤解を招く表現だからあまり使わない方が良いと思う
ちゃんと「ポインタのポインタ」と言うべき
0165デフォルトの名無しさん
2014/10/26(日) 09:32:42.41ID:rLkTHiAH0166デフォルトの名無しさん
2014/10/26(日) 10:12:55.33ID:CRv5XK0J正確には「ポインタへのポインタ」な。
0167デフォルトの名無しさん
2014/10/26(日) 10:37:19.40ID:hAmBOh4e> 誤解を招く表現だからあまり使わない方が良いと思う
なにと誤解するんだ?
0168デフォルトの名無しさん
2014/10/26(日) 10:45:44.89ID:USY7r1W50169デフォルトの名無しさん
2014/10/26(日) 10:47:29.67ID:sxXC7dR90170デフォルトの名無しさん
2014/10/26(日) 10:55:14.52ID:P4UrXCNx0171デフォルトの名無しさん
2014/10/26(日) 11:40:28.26ID:OTYv3dOcそれはなんというBSTR型ですか
0172デフォルトの名無しさん
2014/10/26(日) 13:50:15.01ID:8S4QBfQCいや日本人でも言わないよ
0173デフォルトの名無しさん
2014/10/26(日) 13:59:29.63ID:gMYGq5V7mallocでもなるよ
0174デフォルトの名無しさん
2014/10/26(日) 16:18:13.37ID:hyoMl1hXなるかもしれないことに何の意味があるん?
0175デフォルトの名無しさん
2014/10/26(日) 16:56:10.71ID:1Oyy5cGIこの範囲のアドレスはぜんぶ同じサイって管理もあるしハイブリッドもある
0176デフォルトの名無しさん
2014/10/26(日) 17:21:15.98ID:NI/V74vFあるべなぁ・・・
そん時はどうなるんだっけなぁ。なったことないしぃ
ちょと大きめなメモリが欲しいときはstaticで宣言してたなぁ。
C++になってからはSTLでらくちんちんw
0177デフォルトの名無しさん
2014/10/26(日) 17:29:36.55ID:ngEx6XQBスタックオーバーフローの話?
register 付けていると &でアドレスが取れなくなる処理系
があったように記憶している
0178デフォルトの名無しさん
2014/10/26(日) 17:54:06.61ID:USY7r1W5c++はokだけどそれってregisterの意味無いよね
0179KUSO KOTE ◆unko./w.Osri
2014/10/26(日) 21:06:38.86ID:FU/kawyhISO/IEC 9899:2011
6.5.3.2 Address and indirection operators
Constraints
The operand of the unary&operator shall be either a function designator,the result of a []or unary*operator,or an lvalue that designates an object that is not a bit-field and is not declared with the register storage-class specifier.
0180デフォルトの名無しさん
2014/10/26(日) 21:07:12.33ID:kiy4PZ8gregister変数使ってるような古臭いコードのメインテナンス作業者を救済するというか
0181デフォルトの名無しさん
2014/10/26(日) 21:17:14.31ID:NHig/W5N0182デフォルトの名無しさん
2014/10/27(月) 00:24:34.57ID:LftTpzNV0183デフォルトの名無しさん
2014/10/27(月) 08:30:08.51ID:YiFaNuCf0184デフォルトの名無しさん
2014/10/27(月) 13:47:34.18ID:MTe62n5jVisual C++14はリリースまでに せめてconstexprフル実装して欲しい所
0185デフォルトの名無しさん
2014/10/27(月) 13:57:59.87ID:SHa9u56N0186デフォルトの名無しさん
2014/10/27(月) 14:06:32.19ID:pOuq9Cgi0187デフォルトの名無しさん
2014/10/27(月) 19:27:47.44ID:nARZkbNVg++: Linuxで開発するとき使う
clang: 上記二つの挙動が怪しいと思った時に文法を確認するために使う
icc何ソレうまいの?
0188デフォルトの名無しさん
2014/10/27(月) 19:33:11.11ID:6oMDTSh60189デフォルトの名無しさん
2014/10/27(月) 19:37:19.05ID:LftTpzNV0190デフォルトの名無しさん
2014/10/27(月) 19:38:39.81ID:6oMDTSh60191デフォルトの名無しさん
2014/10/27(月) 19:40:20.09ID:yil7HT1jいぁいぁBDS-CとかDOH-Cで十分でしょう
0192デフォルトの名無しさん
2014/10/27(月) 21:25:00.08ID:mYDuejPS何故か劣ったものを他人に勧める迷惑な奴ら
0193デフォルトの名無しさん
2014/10/28(火) 06:47:28.89ID:AaLfatfLhがそれぞれ何を指しているのかも理解できていない初心者です。
よろしくお願いします。
0194デフォルトの名無しさん
2014/10/28(火) 06:51:37.02ID:WrhD/8H60195デフォルトの名無しさん
2014/10/28(火) 09:44:49.87ID:XK3wSZjJiccもappleもclang
もうclang/LLVM化という流れだ
0196デフォルトの名無しさん
2014/10/28(火) 20:42:59.95ID:kXG8DokCgccベースでもないやつ
0197デフォルトの名無しさん
2014/10/30(木) 12:21:16.77ID:HIs5p7W3String.splitというメソッドがJavaにはありますが
Cにはあるんですか?
agrs.lengthとやって引数を数えることができたんですが
Cではそんなのはあるんでしょうか?
調べかたが難しいです
0198デフォルトの名無しさん
2014/10/30(木) 12:27:13.37ID:5HPq9xeFstrtok
argc
0199デフォルトの名無しさん
2014/10/30(木) 13:47:47.64ID:HIs5p7W3Cの場合ポインタがあるので、すごいたくさん宣言の仕方や書き方があります
1個だけ宣言と値とアドレスの出し方覚えて
そればっかり使って書くのである程度対応ってできるでしょうか
そもそもポインタ使って書かなくて書ける気がしますし
メソッドにアドレスを渡したい時は&aって書いたほうがわかりやすいんですが
配列など大量の同じ意味のいろいろな記述の仕方は
読むための知識であり
自分で書くにはいらないんでしょうか?
0200デフォルトの名無しさん
2014/10/30(木) 14:21:35.41ID:/AIAlFmM0201デフォルトの名無しさん
2014/10/30(木) 15:15:04.84ID:HIs5p7W3EasyIDECというのをつかってるんですが
コマンドライン引数をいれて実行ってどうやってやるんでしょう
0202デフォルトの名無しさん
2014/10/30(木) 15:48:28.28ID:1rX8nkrW0203デフォルトの名無しさん
2014/10/30(木) 15:49:12.95ID:s/3Hn11s0204デフォルトの名無しさん
2014/10/30(木) 15:56:47.23ID:HIs5p7W3文章問題でよくあるやつです
argvのやつ
0205デフォルトの名無しさん
2014/10/30(木) 16:05:57.58ID:/AIAlFmM荒らしたいだけならUbuntuでも入れてみると良いと思う。
viを使っていろいろするとサイヤ人になれる。
Ctags使ってインテリセンスよりすごいとかいろいろ言えるよ。
頑張れ。
0206デフォルトの名無しさん
2014/10/30(木) 17:07:28.69ID:qqM1eCNishとかにgccベースなんてあるなら教えてくれ。
0207デフォルトの名無しさん
2014/10/30(木) 17:20:14.39ID:T0ormrYn0208デフォルトの名無しさん
2014/10/30(木) 20:30:28.60ID:RCZ8rVU+これは値
これはアドレス
メソッドの引数の形はこれ
みたいなおすすめのまとめ表ってないですよね?
0209デフォルトの名無しさん
2014/10/30(木) 20:48:20.94ID:tTw0X6PPあるいは、stl的デザインパターンがそうなのかもしれない
0210デフォルトの名無しさん
2014/10/30(木) 21:06:20.82ID:/AIAlFmM0211デフォルトの名無しさん
2014/10/30(木) 21:08:20.79ID:O+0lZGmYアセンブラの勉強をしてから戻ってくればいいさ
どんなコードを出しているかわかれば理解も深まる
gcc だとsave-tempsかな
0212デフォルトの名無しさん
2014/10/30(木) 21:43:45.71ID:RCZ8rVU+char st1[11] = "Hello";
char *st2 = "World";
strcat( st1, st2 );
これのst1が *st1の時どうやって連結するんでしょうか
0213デフォルトの名無しさん
2014/10/30(木) 21:44:57.71ID:T0ormrYn0214デフォルトの名無しさん
2014/10/30(木) 22:03:53.50ID:RCZ8rVU+char *st2 = "World";
strcat( st1, st2 );
こういうことです
0215デフォルトの名無しさん
2014/10/30(木) 22:06:54.18ID:P+CVnAvq0216デフォルトの名無しさん
2014/10/30(木) 22:09:12.41ID:RCZ8rVU+*strみたいなのが1000個あったり
0217デフォルトの名無しさん
2014/10/30(木) 22:09:31.01ID:xlcuHbGphttp://ideone.com/h5TsbX
文字列リテラルは文字分しか確保されてない固定長なので、連結用の配列が別に必要
0218デフォルトの名無しさん
2014/10/30(木) 22:10:16.25ID:xlcuHbGp0219デフォルトの名無しさん
2014/10/30(木) 22:11:17.67ID:RCZ8rVU+つなげて
つなげたもののまたサイズ測ってですか?
0220デフォルトの名無しさん
2014/10/30(木) 22:12:28.29ID:P+CVnAvq0221デフォルトの名無しさん
2014/10/30(木) 22:14:14.95ID:RCZ8rVU+0222デフォルトの名無しさん
2014/10/30(木) 22:20:13.33ID:0FdzLgz50223デフォルトの名無しさん
2014/10/30(木) 22:22:20.93ID:P+CVnAvq0224デフォルトの名無しさん
2014/10/30(木) 22:32:12.43ID:xlcuHbGp文字列リテラルは固定長配列、ポインタst1へ連結しようとすると結果は>>215の通り
新たに用意する配列が固定長なら>>219の通り、色々めんどい、
めんどいのが嫌ならstd::string、std::stringが嫌なら自前で可変長操作、
その場合はめんどくさいメモリ確保処理と解放忘れの問題が付きまとうがCを使うんだから面倒みてやってよね
http://ideone.com/LrGJJF
0225デフォルトの名無しさん
2014/10/30(木) 22:49:52.91ID:kwGwCnByCならそこでメモリを取るか、C++ならstring とか STLで楽しく。
gccなら配列の宣言時に要素数を"変数"で指定出来る。やってみ。
0226デフォルトの名無しさん
2014/10/30(木) 22:56:12.75ID:P+CVnAvq0227デフォルトの名無しさん
2014/10/30(木) 23:00:25.62ID:T0ormrYn0228デフォルトの名無しさん
2014/10/30(木) 23:05:18.38ID:P+CVnAvqまで脳内補完してくれ
0229デフォルトの名無しさん
2014/10/30(木) 23:17:46.40ID:s/3Hn11s0230デフォルトの名無しさん
2014/10/30(木) 23:20:18.21ID:cvgUvqEP0231デフォルトの名無しさん
2014/10/30(木) 23:28:31.10ID:P+CVnAvq0232デフォルトの名無しさん
2014/10/30(木) 23:32:46.58ID:P+CVnAvq対話困難は相対的なものと言える。
0233デフォルトの名無しさん
2014/10/30(木) 23:33:11.69ID:7MhAAUAK文字列の長さ管理じゃなくて「連結した文字列」の長さってのは
どこから湧いて出てきたんだ?
0234デフォルトの名無しさん
2014/10/30(木) 23:35:51.46ID:P+CVnAvq0235デフォルトの名無しさん
2014/10/31(金) 07:25:38.16ID:oaAdI0DZsprintf(pTest,"%dok.",i);
みたいな前任者のソースで発狂しそうになった事があるわ
0236デフォルトの名無しさん
2014/10/31(金) 10:54:56.54ID:dyhu2CEA*p=0;
0237デフォルトの名無しさん
2014/10/31(金) 11:29:29.39ID:9c95bT0v*n = 5;
0238デフォルトの名無しさん
2014/10/31(金) 14:35:54.19ID:xFSA8QSJたとえば
int i = 12345678901234567890;
char *pTest = "test";
sprintf(pTest,"%dok.",i);
の場合
int len = hoge(pTest,"%dok.",i);
で len に 23 が代入されるみたいな
0239デフォルトの名無しさん
2014/10/31(金) 15:05:51.16ID:aPk8p0sK0240デフォルトの名無しさん
2014/10/31(金) 15:07:29.36ID:9c95bT0v0241デフォルトの名無しさん
2014/10/31(金) 15:08:03.96ID:0xcgHm3e最後の\0は含まない
0242デフォルトの名無しさん
2014/10/31(金) 16:21:28.51ID:NwqKHC4Iどうしてもということなら、fprintf()の戻り値が出力サイズだからそれが使える。
どこにも出力したくないなら、ナルデバイス(/dev/null)に出力すればいい。
0243デフォルトの名無しさん
2014/10/31(金) 16:39:23.70ID:nkl0tAlXプログラマになってからなんと1年半これでやってました。まじ
不思議に動くから困るw
0244デフォルトの名無しさん
2014/10/31(金) 16:56:33.07ID:NwqKHC4I0245デフォルトの名無しさん
2014/10/31(金) 17:55:53.28ID:pV90KxjZlen = scprintf("%dok.", i);
でよくね?
0246デフォルトの名無しさん
2014/10/31(金) 18:46:43.08ID:RBA0S+28全部文字を消してもエラーがでてうごかないとこがあります
エラーが出ましたと言われてもどこに出たのかわからないことが多いですし。
一般的なC言語の開発環境というのは何ですか?
ecliseってjava用ですよね?
0247デフォルトの名無しさん
2014/10/31(金) 18:49:33.82ID:ejHWUQeHVisualStudioでいい
0248デフォルトの名無しさん
2014/10/31(金) 18:51:35.19ID:RBA0S+28参考書には30日たつとゆうりょうになると書いてありました
0249デフォルトの名無しさん
2014/10/31(金) 18:54:00.49ID:GUmb6A97sprintf_sだろjk
0250デフォルトの名無しさん
2014/10/31(金) 18:55:30.09ID:ejHWUQeHんなわけないだろ
そんな腐った本は捨てちまえ
0251デフォルトの名無しさん
2014/10/31(金) 19:01:14.02ID:RBA0S+28Visual Studio Express 2012 for Windows 8
これでいいんですか?
0252デフォルトの名無しさん
2014/10/31(金) 19:02:42.71ID:aPk8p0sKVisual Studio Express 2013 for desktop
を入れろ
0253デフォルトの名無しさん
2014/10/31(金) 19:08:55.24ID:RBA0S+28その単語ででてきます?ないんですけど
0254デフォルトの名無しさん
2014/10/31(金) 19:17:00.52ID:aPk8p0sKあるじゃん
0255デフォルトの名無しさん
2014/10/31(金) 19:17:52.99ID:RBA0S+284.7 GB
これでいいんですか?でかすぎません?
0256デフォルトの名無しさん
2014/10/31(金) 19:21:56.81ID:aPk8p0sK0257デフォルトの名無しさん
2014/10/31(金) 19:30:12.78ID:RBA0S+280258デフォルトの名無しさん
2014/10/31(金) 20:44:50.80ID:0cCeEQ170259デフォルトの名無しさん
2014/10/31(金) 21:22:53.88ID:zWE6Wm7I何台にもインストールするのでなければisoダンロードするひつようない
0260デフォルトの名無しさん
2014/10/31(金) 21:29:31.50ID:RBA0S+28ネットに常につなげないんですが一度いれるとずっとつかえます?
Microsoft Visual Studio Express 2013 with Update 3 for Web
これですか?
0261デフォルトの名無しさん
2014/10/31(金) 21:56:31.25ID:DZaV0AiJ0262デフォルトの名無しさん
2014/10/31(金) 22:01:12.06ID:DZaV0AiJなんでreserveがないでしょうか?
0263デフォルトの名無しさん
2014/10/31(金) 22:04:04.93ID:aPk8p0sK0264デフォルトの名無しさん
2014/10/31(金) 22:07:20.53ID:DZaV0AiJ0265デフォルトの名無しさん
2014/10/31(金) 22:15:35.68ID:aPk8p0sK先頭末尾への追加は定数時間なんだから内部のサイズを気にする必要はないだろ
0266デフォルトの名無しさん
2014/10/31(金) 22:20:43.67ID:DZaV0AiJ0267デフォルトの名無しさん
2014/10/31(金) 22:25:06.47ID:aPk8p0sK0268デフォルトの名無しさん
2014/10/31(金) 22:27:18.29ID:DZaV0AiJ0269デフォルトの名無しさん
2014/10/31(金) 22:34:12.21ID:aPk8p0sKlist.emplace_back();
とするのに元から持ってる領域のコピーなんて起きないだろ?
0270デフォルトの名無しさん
2014/10/31(金) 22:39:37.24ID:DZaV0AiJ0271デフォルトの名無しさん
2014/10/31(金) 23:11:06.70ID:1hv4dreP0272デフォルトの名無しさん
2014/10/31(金) 23:32:52.05ID:nkl0tAlX0273デフォルトの名無しさん
2014/11/01(土) 00:12:16.03ID:6A68v5BH俺が昔実装したときはvectorのリストでやったな
リングバッファだとリアロケーションが必要になったとき時間食うだろ
0274デフォルトの名無しさん
2014/11/01(土) 05:02:10.51ID:9q09lipk0275デフォルトの名無しさん
2014/11/01(土) 09:09:51.03ID:N73zy/Fb0276デフォルトの名無しさん
2014/11/01(土) 09:15:58.85ID:oG951rSt0277デフォルトの名無しさん
2014/11/01(土) 09:31:36.25ID:+aIx/l6K0278デフォルトの名無しさん
2014/11/01(土) 09:40:26.49ID:6Mb2wx730279デフォルトの名無しさん
2014/11/01(土) 13:56:35.43ID:BAlmKsTx0280デフォルトの名無しさん
2014/11/01(土) 14:02:13.63ID:hS36Mqce色々面倒なのは仕方ない。
0281デフォルトの名無しさん
2014/11/01(土) 19:03:23.79ID:NaXltOS/リンクリストや文字列の切り貼りなんかは1回作っちゃえば
使いまわすだけだし、そんなに気にならないかな。
0282デフォルトの名無しさん
2014/11/01(土) 19:05:52.28ID:bVrmggLnstring使えば便利やん。
0283デフォルトの名無しさん
2014/11/01(土) 20:09:45.57ID:T4d0WzbM0284デフォルトの名無しさん
2014/11/01(土) 21:43:00.03ID:uX1Ymwvoの意味を理解しない人がひとり
0285デフォルトの名無しさん
2014/11/02(日) 08:23:14.96ID:eOU6dP5qString *str2="ちゃんえ";
String *str3="2ちゃん";
String *str4="掲示板";
って文字を連結するにはどうしてます?
0286デフォルトの名無しさん
2014/11/02(日) 08:30:57.52ID:wiF4o1zxStringの定義は?
0287デフォルトの名無しさん
2014/11/02(日) 08:38:20.63ID:wiF4o1zxauto *s1 = reinterpret_cast<char const *>(str1);
auto *s2 = reinterpret_cast<char const *>(str2);
auto *s3 = reinterpret_cast<char const *>(str3);
auto *s7 = reinterpret_cast<char const *>(str4);
std::string 連結された文字列 = std::string(s1) + s2 + s3 +s4;
0288デフォルトの名無しさん
2014/11/02(日) 08:53:48.00ID:Lqm+QUe+型推論知ってる俺ってすげーw
0289デフォルトの名無しさん
2014/11/02(日) 11:44:43.30ID:++xaUzh4C++
でなくてCの場合です
0290デフォルトの名無しさん
2014/11/02(日) 12:13:06.00ID:CjBmvnJwstrcat(str, str2);
strcat(str, str3);
strcat(str, str4);
あるいは
sprintf(str, "%s%s%s%s%s", str1, str2, str3, str4, str5);
0291デフォルトの名無しさん
2014/11/02(日) 12:23:33.73ID:vxEoPS2xおいおい、その str は十分な広さをもった領域を指していることを断っとかないかんでしょ?
0292デフォルトの名無しさん
2014/11/02(日) 12:29:06.65ID:xEMkpyWhchar *strs[4] = {str1, str2, str3, str4};
for (int i = 0; i < 4; i++) {
strcat(str, strs[i]);
}
0293デフォルトの名無しさん
2014/11/02(日) 12:31:04.69ID:CjBmvnJwそれは常識だからな
おまいはいちいち「トイレでうんこしたら手あらえよ」って言ってもらうのか?
0294デフォルトの名無しさん
2014/11/02(日) 12:35:18.66ID:pqNT6JBN文字覚えるの面倒だから全部*strでやりたいんですが
できなくないんですね
0295デフォルトの名無しさん
2014/11/02(日) 12:38:15.66ID:UL8V4M8/0296デフォルトの名無しさん
2014/11/02(日) 12:38:16.79ID:CjBmvnJwおまいは質問する前に日本語覚えろ?
0297デフォルトの名無しさん
2014/11/02(日) 12:48:24.63ID:vxEoPS2x常識‥常識ってなんだ?誰が決めたんだ?
あとその喩えは極端だね‥あ、俺、ときどき手ぇ洗わんな‥
0298デフォルトの名無しさん
2014/11/02(日) 12:52:53.30ID:Lqm+QUe+strncpyを使ってケツを拭いたつもりになってる奴はよく見かける。
0299デフォルトの名無しさん
2014/11/02(日) 15:01:40.29ID:xEMkpyWh0300デフォルトの名無しさん
2014/11/02(日) 16:40:22.16ID:nVDzouXsくぁしく
0301デフォルトの名無しさん
2014/11/02(日) 16:48:00.05ID:dpih5k6ahttp://linuxjm.sourceforge.jp/html/LDP_man-pages/man3/strcpy.3.html
ここの「注意」んところに書いてある事を言ってるんだと思う
コピー文字数 n に、コピー元文字列の長さより小さい数を指定すると
コピー後の文字列がNUL終端されないから
その後の操作をしくじるとバッファオーバーランとかやらかす可能性がある
0302デフォルトの名無しさん
2014/11/02(日) 17:08:20.98ID:02WOdBRystr[n-1] = '\0';
常にこう書けば安心
0303デフォルトの名無しさん
2014/11/02(日) 17:17:14.55ID:IOKONguf0304デフォルトの名無しさん
2014/11/02(日) 17:26:40.22ID:ncE4y5cR0305デフォルトの名無しさん
2014/11/02(日) 17:30:09.68ID:02WOdBRy0306デフォルトの名無しさん
2014/11/02(日) 17:33:05.70ID:ncE4y5cR0307デフォルトの名無しさん
2014/11/02(日) 18:02:44.51ID:OTX65kKGそれでバッファー初期化してなくて何となく動いてる(たまにアクセスエラー吐く)コードは見たことあるな。
0308デフォルトの名無しさん
2014/11/02(日) 18:04:47.40ID:IOKONguf*cpyじゃなくて*catじゃねえ?
0309デフォルトの名無しさん
2014/11/02(日) 18:07:39.12ID:02WOdBRy0310デフォルトの名無しさん
2014/11/02(日) 18:10:30.47ID:OTX65kKGマジで言ってるなら今まで自分の書いたコード見直した方がいいぞ
0311デフォルトの名無しさん
2014/11/02(日) 18:46:18.61ID:IOKONguf0312デフォルトの名無しさん
2014/11/02(日) 18:47:04.33ID:ncE4y5cRstring + string で連結して
c_str()
すればええやん。
0313デフォルトの名無しさん
2014/11/02(日) 18:51:57.37ID:OTX65kKG>>303 のコードでいつstr[n-1]が上書きされるんだよ
0314デフォルトの名無しさん
2014/11/02(日) 19:34:46.65ID:3JcJaSAldebugモードのときだけ正常に動きます
0315デフォルトの名無しさん
2014/11/02(日) 19:36:03.97ID:3JcJaSAl>>289
0316デフォルトの名無しさん
2014/11/02(日) 20:07:54.18ID:ncE4y5cRちょっと便利なC++のstringの機能をCから使っても
ええんちゃあうん?
なんでそないC限定にする必要あるん?
0317デフォルトの名無しさん
2014/11/02(日) 20:43:34.23ID:FncLEk0A0318デフォルトの名無しさん
2014/11/02(日) 20:51:38.03ID:ncE4y5cR0319デフォルトの名無しさん
2014/11/02(日) 20:53:37.50ID:o/WdZ5W10320デフォルトの名無しさん
2014/11/02(日) 20:58:54.31ID:ncE4y5cRに変えてビルドするだけやがな。
0321デフォルトの名無しさん
2014/11/02(日) 21:13:47.58ID:PKN5AcrLlen = scprintf("%s%s%s%s", str1, str2, str3, str4);
len+\0の分で動的確保
0322デフォルトの名無しさん
2014/11/02(日) 21:20:46.80ID:KDVIc7Px普通に>>242じゃだめなの
0323デフォルトの名無しさん
2014/11/02(日) 21:23:09.43ID:OTX65kKG0324デフォルトの名無しさん
2014/11/02(日) 21:30:19.20ID:o1wy83SR0325デフォルトの名無しさん
2014/11/02(日) 21:32:53.94ID:9ZcuQJuuが、どうしたんだい?
0326デフォルトの名無しさん
2014/11/02(日) 21:36:27.68ID:PKN5AcrL出力されなかったよ
VC++2010 EE コンソール
0327デフォルトの名無しさん
2014/11/02(日) 21:36:41.36ID:o1wy83SR0328デフォルトの名無しさん
2014/11/02(日) 21:45:33.99ID:o1wy83SR0329デフォルトの名無しさん
2014/11/02(日) 21:48:28.80ID:o1wy83SR0330デフォルトの名無しさん
2014/11/02(日) 21:51:40.16ID:TOrV8LyY釣りじゃないなら、どうやって使うかを書けよ
引数が文字定数ならコンパイル時に計算されて定数処理される
0332デフォルトの名無しさん
2014/11/02(日) 21:58:29.29ID:o1wy83SR(2)#include <string>
(3)std::string型変数を宣言する。連結したい場合は+=や+を使う。
長さを知りたい場合は.size()を使う。
(4)関数で書き込む場合は引数にstd::string&を使い、関数で読み込む場合はconst std::string&を使う。
0333デフォルトの名無しさん
2014/11/02(日) 22:07:48.16ID:o1wy83SR0334デフォルトの名無しさん
2014/11/02(日) 22:10:12.70ID:TOrV8LyY組み込みで C++ サポートしてないケースは想像できないと?
0335デフォルトの名無しさん
2014/11/02(日) 22:15:11.47ID:EyycLmZD文字列の結合程度が本気でわからないはずがない
0336デフォルトの名無しさん
2014/11/02(日) 22:21:44.91ID:5r/tMWaD#include <iostream>
#include <string>
using namespace std;
struct person{
string name;
int age;
};
#define MAX 100
int main(){
person *a[MAX], *tmp;
a=new person[MAX];
......
このようなプログラムを組んだのですが、a=new person[MAX];の行で、
" 'person *' から 'person *[100]' に変換できません。 "と出ました。
以下のプログラムでは'person *[100]'の型を使っているので、
上に書いたプログラムの中で'person *'型となっているところを 'person *[100]'型に直したいのですが、
どう改変すればいいでしょうか。
初心者なので専門用語等はあまりわかりませんが、教えてくださると幸いです。
0337デフォルトの名無しさん
2014/11/02(日) 22:22:02.51ID:TOrV8LyYわかってるから、>>316 がアホみたいって言ってるだけだが
0338デフォルトの名無しさん
2014/11/02(日) 22:39:33.87ID:IyW8WEC0「'person *'型となっているところ」がどこのことを言ってるのかよくわからんけど、
そもそも配列 new なんか使わずに std::vector<person> a(MAX); じゃダメなのか?
0339デフォルトの名無しさん
2014/11/02(日) 22:42:34.26ID:FncLEk0Aそこを調べて勉強してみよう
0340デフォルトの名無しさん
2014/11/02(日) 23:24:00.04ID:5r/tMWaDvectorは使うな、とのことでした……
>>339
ggってみますね。ありがとうございます。
0341デフォルトの名無しさん
2014/11/02(日) 23:58:55.53ID:IyW8WEC0習作か。じゃ、まあ、がんばれ。
0342デフォルトの名無しさん
2014/11/03(月) 00:26:13.36ID:fxU30L/yperson *a, *tmp;
a=new person[MAX];
じゃちがうのかな
0343デフォルトの名無しさん
2014/11/03(月) 00:43:10.68ID:Yc5J/idlわからなくなったらまた聞きに来ればよい
0344デフォルトの名無しさん
2014/11/03(月) 00:50:17.68ID:qBxjH7bs学生あたりが秋月の小規模マイコン(PICとか)とかを趣味・学校の実習で使うとかだとCでってなるだろ。
Win・Linuxの初心者定番プログラムの秋月キャラLCDに文字表示をPICでやろうってしているんじゃないか
0345デフォルトの名無しさん
2014/11/03(月) 00:50:41.64ID:fxU30L/ya=(person *)malloc(MAX*sizeof(person));
やっぱりmallocの方が本質は理解できると思う
0346デフォルトの名無しさん
2014/11/03(月) 01:00:42.49ID:wj4A8VFWじゃあ代わりにdequeでもlistでもいいんじゃないの
0347デフォルトの名無しさん
2014/11/03(月) 01:05:17.67ID:GHCh+c9hその代わりC++は一ミリも理解してないって自分で証明しちゃってるしね
0348デフォルトの名無しさん
2014/11/03(月) 01:07:26.10ID:I0t195PWmallocじゃコンストラクタが呼ばれないから
危ないだろう
0349デフォルトの名無しさん
2014/11/03(月) 01:14:59.31ID:GHCh+c9h0350デフォルトの名無しさん
2014/11/03(月) 01:15:51.50ID:gzxZLKcAメモリをガバッと確保してる感じが
伝わって来るのが快感。
0351デフォルトの名無しさん
2014/11/03(月) 01:38:22.42ID:1QJRaIFfその環境でパフォーマンスが問題になるようなことなさそうだし
スマートポインタとコンテナでロジック以外の思考を外せるし
ただ、基礎学習ならきちっとCやってメモリ管理するのがええよ
後で他の言語やるときの品質が段違いになる
まあPCアプリもやる組み込みプログラマの一意見だけども、基礎がちゃんとしてないやつは品質もクソだよ
0352デフォルトの名無しさん
2014/11/03(月) 02:14:02.65ID:C1Q+kNpr20世紀からタイムスリップでもしてきたか?
0353デフォルトの名無しさん
2014/11/03(月) 02:26:04.38ID:GHCh+c9h0354デフォルトの名無しさん
2014/11/03(月) 02:38:09.75ID:wj4A8VFW0355デフォルトの名無しさん
2014/11/03(月) 02:42:16.69ID:f1DnjkKs最近の数学では
× MAX * sizeof(person)
○ sizeof(person) * MAX
らしいな
0356デフォルトの名無しさん
2014/11/03(月) 05:19:13.40ID:VWaLlR99同意します
0357デフォルトの名無しさん
2014/11/03(月) 05:38:31.91ID:gykicciK誤りを指摘されても事実を受け入れられない人は
プログラミングに向いていない
0358デフォルトの名無しさん
2014/11/03(月) 05:43:09.00ID:GHCh+c9hhttp://en.m.wikipedia.org/wiki/Standard_Template_Library
0359デフォルトの名無しさん
2014/11/03(月) 05:44:08.77ID:GHCh+c9hこっちでやってくれ
0360デフォルトの名無しさん
2014/11/03(月) 05:48:04.61ID:VWaLlR99同意します
0361デフォルトの名無しさん
2014/11/03(月) 05:54:09.09ID:MMft+ZKkつ sbrk
0362デフォルトの名無しさん
2014/11/03(月) 05:59:44.27ID:UGbZfCjU世の中訂正しなければならない誤りだらけで大変ですね!
頑張って下さい!
0363デフォルトの名無しさん
2014/11/03(月) 06:01:10.58ID:wfj2dgwM嘘ソースの代名詞のWikipediaですら「STLは標準C++ライブラリに影響を与えた」と
まともなこと書いてるなw
こっちでやってくれといいつつ自滅ソースのレスを投下するマッチポンプ乙
0364デフォルトの名無しさん
2014/11/03(月) 06:06:29.94ID:GHCh+c9h実装の欄に書いてあるの見れないの?
0365デフォルトの名無しさん
2014/11/03(月) 06:16:12.28ID:GHCh+c9hそもそもWikipediaをソースとして出したんじゃねえよ。
そんなにそれが大事な事なら正しいソースを出典に明記して修正しろっていってんだよ。
0366デフォルトの名無しさん
2014/11/03(月) 07:53:51.00ID:QwIS5woNSTLと標準C++テンプレートライブラリのどっちがどっちだっけになる
0367デフォルトの名無しさん
2014/11/03(月) 07:59:27.90ID:i5YIlJSL混ぜるな危険
0368デフォルトの名無しさん
2014/11/03(月) 08:57:12.20ID:gonBAC+u0369デフォルトの名無しさん
2014/11/03(月) 09:08:00.19ID:i5YIlJSL0370デフォルトの名無しさん
2014/11/03(月) 10:23:04.08ID:Fo7mazF8〜姉妹スレより〜
・STLは標準化前の遺物派
(ステパノフのアレ、もしくはSGIのアレ)
・コンテナ、イテレーター、アルゴ、ファンクタ
のみSTL派(string含まず)
・stringもSTL派(iostream含まず)
・テンプレートは全てSTL派
・C++の標準ライブラリは全てSTL派
・なんとなくライブラリは全てSTL派
「化石のSTLは標準ライブラリのコンテナの基礎となった」
が正しい。
標準ライブラリには「ここはSTL」という説明はなく
また化石STLと標準ライブラリの類似部分とは完全に一致でもない
0371デフォルトの名無しさん
2014/11/03(月) 10:42:57.49ID:KYPXUM4wC++使いが我が物顔でC++の文法やライブラリを
これ見よがしに貼り付けるKUSOSURE
0372デフォルトの名無しさん
2014/11/03(月) 10:50:30.70ID:Avy9gAi60373デフォルトの名無しさん
2014/11/03(月) 10:54:39.21ID:A+2eW2k6template<class T>class Counter
{
static int _count;
public :
Counter(){_count++;}
~Counter(){_count--;}
int getCount()const{return _count;}
};
複数の関数で呼び出した場合_countを共有しないようにtemplateを使って何とか出来ないかと考えてますが
なにかよい方法ありませんかね?
0374デフォルトの名無しさん
2014/11/03(月) 10:55:27.70ID:GHCh+c9h0375デフォルトの名無しさん
2014/11/03(月) 11:07:26.39ID:LFWM4IX/0376デフォルトの名無しさん
2014/11/03(月) 11:14:19.86ID:wj4A8VFW普通はそんなことせず回数を引数として渡す
0377デフォルトの名無しさん
2014/11/03(月) 11:18:05.98ID:GHCh+c9hstruct scoped_counter
{
int& count_;
scoped_counter(int &c):count_(c){count_++;}
~scoped_counter(){count_--;}
};
void f()
{
thread_local int recursive_count=0;
scoped_counter c(recursive_count);
std::cout<<recursive_count<<std::endl;
f();
}
0378デフォルトの名無しさん
2014/11/03(月) 11:28:20.75ID:A+2eW2k6そう言われればそうですね
>>377
thread_localを初めて知りました
ありがとうございます
0379デフォルトの名無しさん
2014/11/04(火) 15:04:55.11ID:0eOV+naS#include <iostream>
struct A {
std::string m;
};
int main(void) {
A a,b;
a = b;
std::cout << (void*)&a.m[0] << std::endl;
std::cout << (void*)&b.m[0] << std::endl;
}
0380デフォルトの名無しさん
2014/11/04(火) 16:12:07.44ID:0eOV+naS0381デフォルトの名無しさん
2014/11/04(火) 16:38:03.85ID:P4mL6ldIC言語のNUL終端文字列とは互換性無いぞ
a.c_str()で変換して取得しなきゃダメ
0382デフォルトの名無しさん
2014/11/04(火) 16:38:41.26ID:P4mL6ldI見なかったことにしてほしい
0383デフォルトの名無しさん
2014/11/04(火) 16:38:48.97ID:Oczj+lH9trivial classでもtrivial copyable classでも無いと思うけど何のことを言ってる?
0384デフォルトの名無しさん
2014/11/04(火) 16:44:06.72ID:0eOV+naStrivial copy constructorだよね?
0385デフォルトの名無しさん
2014/11/04(火) 16:47:31.68ID:0eOV+naS0386デフォルトの名無しさん
2014/11/04(火) 16:59:53.01ID:0eOV+naSデフォルトコンストラクタは、trivial copy constructorだよね?
0387デフォルトの名無しさん
2014/11/04(火) 17:08:12.36ID:Oczj+lH9trivialでないコピーコンストラクタを持つstd::stringを持ってるからtrivially copyable classじゃない
0388デフォルトの名無しさん
2014/11/04(火) 17:11:43.78ID:0eOV+naSデフォルトコピーコンストラクタは、trivial copy constructorだよね?
0389デフォルトの名無しさん
2014/11/04(火) 17:14:27.19ID:Oczj+lH9解ってないじゃん。違うって言ってる。
0390デフォルトの名無しさん
2014/11/04(火) 17:23:15.66ID:Oczj+lH9非trivialなコピーコンストラクタを持つstd::stringをメンバーに持っていて、それを持つクラスでコピーコンストラクタを定義しなくても(=defaultでも)std::stringのコピーコンストラクタが自動的に使われるので非trivialなコピーコンストラクタになる。
ここまで言えば良いかね
0391デフォルトの名無しさん
2014/11/04(火) 17:29:35.70ID:0eOV+naS次に、関数テンプレートのパラメーターパックで、オブジェクトの参照を渡す上手い方法はありますか?
0392デフォルトの名無しさん
2014/11/04(火) 17:38:41.85ID:0eOV+naS0393デフォルトの名無しさん
2014/11/04(火) 17:42:01.12ID:Oczj+lH90394デフォルトの名無しさん
2014/11/04(火) 18:02:51.07ID:0eOV+naS上手く行った。ありがとう。
0395デフォルトの名無しさん
2014/11/04(火) 21:19:20.68ID:0eOV+naSそれが原因で状態が異常になることはありますか?
0396デフォルトの名無しさん
2014/11/04(火) 22:39:11.74ID:0tSXKDtf0397デフォルトの名無しさん
2014/11/05(水) 20:14:45.79ID:s8dHjiG+srand関数は呼び出すのは1回でいいそうですが
みなさんどこで呼び出してますか?
グローバルでもいいのですかね
0398397
2014/11/05(水) 20:23:46.40ID:s8dHjiG+そもそもグローバルでは宣言できませんでしたね
0399デフォルトの名無しさん
2014/11/05(水) 20:39:28.14ID:CNahLZw/GUIの場合はウインドウと連動させた方がいいかも知れないけれど。
0400デフォルトの名無しさん
2014/11/05(水) 20:56:06.84ID:+x9XCqU/main() の頭で‥
0401デフォルトの名無しさん
2014/11/05(水) 21:16:30.03ID:pitXglVp0402デフォルトの名無しさん
2014/11/05(水) 21:23:54.35ID:s8dHjiG+ありがとうございます
プロジェクトの初期化で宣言することにしました
0403デフォルトの名無しさん
2014/11/05(水) 21:27:37.80ID:TObpxnP70404デフォルトの名無しさん
2014/11/05(水) 21:53:43.19ID:85jo8McV0405デフォルトの名無しさん
2014/11/05(水) 22:01:40.90ID:+x9XCqU/シードを特定の固定値にしたいときもある
0406デフォルトの名無しさん
2014/11/05(水) 22:02:53.38ID:5XZeyzta自分でmain開始後にするのが筋
0407デフォルトの名無しさん
2014/11/05(水) 22:03:45.62ID:TObpxnP70408デフォルトの名無しさん
2014/11/05(水) 22:06:32.96ID:+x9XCqU/おいおい、rand() は static な内部状態を持っているのに、それでいいのか?
0409デフォルトの名無しさん
2014/11/05(水) 22:41:24.43ID:0veuy/klVisual C++は>>407の動作するみたいだけれど
ISO/IEC 9899:2011の7.22.2.2はそれを許していない気がする。
(Visual C++はC90基準なので仕方ないのだが)
clangとgccは>>408の動作だ
0410デフォルトの名無しさん
2014/11/05(水) 22:47:53.61ID:snz2pLURそもそも、srand なんて使わないことの方が多いし
0411デフォルトの名無しさん
2014/11/05(水) 23:35:34.90ID:pitXglVp0412デフォルトの名無しさん
2014/11/06(木) 00:19:09.59ID:0hZ2pQ2e0413デフォルトの名無しさん
2014/11/06(木) 01:25:47.59ID:k48fUyn/スレッド機能が規格で規定された時点で
localtimeやrandのような内部状態を必要とする関数が
スレッドローカルになってないのは規格のミスじゃないの
0414デフォルトの名無しさん
2014/11/06(木) 02:02:20.13ID:0PDhwcQO0415デフォルトの名無しさん
2014/11/06(木) 04:06:50.93ID:ETjlkHcn違うのけ?
0416デフォルトの名無しさん
2014/11/06(木) 05:34:39.10ID:ZDjPTs8v0417デフォルトの名無しさん
2014/11/06(木) 06:10:32.85ID:Ajiece/+違うだろこのぽんこつめ
0418デフォルトの名無しさん
2014/11/06(木) 21:56:01.17ID:PInZmfNX以下のコードの場合
void hoge(){
int a;
a = 5;
printf("%d",a);
}
void main(){
while(true){
int a;
a = 5;
printf("%d",a);
hoge();
}
}
main内部の宣言aが何度も行われているのでメモリなどに良くなく、hoge内部の宣言aは宣言されては消えているので何ら問題はない
でいいのでしょうか?
またこのc言語の規格は秋付のH8マイコンに準じます(詳しい規格がわかりません)
0419デフォルトの名無しさん
2014/11/06(木) 22:04:29.24ID:34F8J4w80420デフォルトの名無しさん
2014/11/06(木) 22:25:24.71ID:q6gazN8o0421デフォルトの名無しさん
2014/11/06(木) 22:59:37.18ID:PInZmfNX>>420
回答ありがとうございます。
サンプルが
while(true){
int a;
for(;;){
}
}
となっていたのでループ内部の宣言はアウトなのかと思っていました。
0422デフォルトの名無しさん
2014/11/06(木) 23:05:27.70ID:PsvQS0pQやったらわかるけど速度の問題
0423デフォルトの名無しさん
2014/11/06(木) 23:15:03.21ID:9/FtxTPG> printf("%d", 5);
ってなると思うが...
0424デフォルトの名無しさん
2014/11/06(木) 23:15:52.96ID:WrjLC9Py0425デフォルトの名無しさん
2014/11/06(木) 23:24:05.39ID:n2KANyZystatic int a;
void main(){
while(true){
a = 5;
printf("%d",a);
hoge();
}
}
変数はすべてstaticが基本だろ?
0426デフォルトの名無しさん
2014/11/06(木) 23:34:15.28ID:vSFIErAp?つけるってマイコン使ったことないのか
仕事でC/C++野郎はマイコン命の奴だらけ
0427デフォルトの名無しさん
2014/11/07(金) 00:29:01.09ID:mpkOYS3Z0428デフォルトの名無しさん
2014/11/07(金) 01:40:55.49ID:Otut3ooB質問のポイントがはっきりしないけど、コードの品質が気になるならアセンブリ出力を見る習慣をつけよう。
0429デフォルトの名無しさん
2014/11/07(金) 02:18:03.95ID:B36GWc3kこれって構造体の最後のメンバ限定だよね?
最近、
struct {
int x;
int A[0];
int y;
};
って構造体定義を見かけたんだけど、
これのAってメンバの意図を教えてください
0430デフォルトの名無しさん
2014/11/07(金) 02:30:01.20ID:B36GWc3k関数の内部変数をすべてファイルスコープにするの?
スタックの伸縮を気にするのなら
インライン関数使えば良いんじゃない?
0431デフォルトの名無しさん
2014/11/07(金) 05:02:56.69ID:eTetUKDB>>425は荒らし目的のキチガイhoge厨なんだから構うな。
0432デフォルトの名無しさん
2014/11/07(金) 06:57:37.54ID:mpkOYS3Z0433デフォルトの名無しさん
2014/11/07(金) 07:29:54.93ID:ZCBWHjJw0434デフォルトの名無しさん
2014/11/07(金) 08:28:12.21ID:HXLLL8gCgccだとAとyが同じアドレスになった
A以降の要素に対して、Aを媒介にして配列アクセスするためとか?
0435デフォルトの名無しさん
2014/11/07(金) 09:06:38.55ID:kh0pD0TM初心者には薦めない
0436デフォルトの名無しさん
2014/11/07(金) 09:26:52.83ID:jQyGeXqUAがどのように使われているか調べろ。
でも、ファイル末の /* end */と同様に、これはうんこが書きましたという署名と考えた方が良い。
0437デフォルトの名無しさん
2014/11/07(金) 10:43:48.33ID:CS+XpD/Poffsetof使った方が未だましだ。
0438デフォルトの名無しさん
2014/11/07(金) 11:29:26.34ID:jQyGeXqUどっちにしろうんこ
0439デフォルトの名無しさん
2014/11/07(金) 11:50:09.99ID:HXLLL8gC>Aがどのように使われているか調べろ。
が確実だわね
もしどこからも使用されてなかったとしたら紛らわしいという意味でunk度が上がるけども
0440デフォルトの名無しさん
2014/11/07(金) 20:12:12.37ID:rVf6x+4g年齢順に並び替えた後に別のtxtファイルにコピーすることって可能ですか?
string使って一行一行を丸々コピーするのは可能だと思いますが、
その一行の中にある年齢の部分だけを評価することは可能ですかね?
0441デフォルトの名無しさん
2014/11/07(金) 20:16:30.34ID:jQyGeXqU0442デフォルトの名無しさん
2014/11/07(金) 20:22:48.79ID:NTsdDBOzstringなのでC++が使えると理解したが
struct kuso {
string 名前; int 年齢; enum 性別 性別;
};
std::vector<kuso> data;
:
std::sort(data.begin(), data.end(),
[](kuso &lhs, kuso &rhs){ return lhs.年齢 < rhs.年齢; });
0443片山博文MZ次期CEO ◆T6xkBnTXz7B0
2014/11/07(金) 20:23:09.34ID:GF0g7nAPqsort
std::sort
0444デフォルトの名無しさん
2014/11/07(金) 20:31:01.00ID:ucXGRKwS0445デフォルトの名無しさん
2014/11/07(金) 20:33:08.06ID:TpVib0zYそれにstringをqsortしたらまずいんじゃね
0446デフォルトの名無しさん
2014/11/07(金) 20:41:06.81ID:ucXGRKwS0447デフォルトの名無しさん
2014/11/07(金) 20:43:47.40ID:f/Sul/kM後半難しくなりすぎて辛い
ポインタのポインタとかじっくり見ていかないと理解できないけど
慣れていけばソースぱっと見てわかるようになるものなのかな?
い,extern はいらない子ぉ
何事も慣れ,ポインタのポインタだが,たいがいその「一重ポインタ」が独立した概念になっていることが多い,そのポインタをとる,ということで割合簡単に納得できる.
慣れると char ***p, とかも使いたくなるときがある.
0450片山博文MZ次期CEO ◆T6xkBnTXz7B0
2014/11/07(金) 20:55:47.89ID:GF0g7nAP配列のような連続データにアクセスするイメージ。
実データを長方形で、アドレスの指している場所を矢印で考えるとわかりやすいかな。
0451デフォルトの名無しさん
2014/11/07(金) 21:11:21.25ID:ucXGRKwSならないんじゃない?
いつ使いたくなるの?
0452デフォルトの名無しさん
2014/11/07(金) 21:19:34.39ID:DvlzUAf60453デフォルトの名無しさん
2014/11/07(金) 21:19:51.03ID:SLgxRVRb0454デフォルトの名無しさん
2014/11/07(金) 21:20:53.10ID:rVf6x+4g皆さんありがとうございます。
教えていただいた中にもわからないことがたくさんありますが、一回自分で調べてみたいと思います。
わからない箇所が出てきたらまたきます。
0455デフォルトの名無しさん
2014/11/07(金) 21:24:29.92ID:hmddJt9e0456デフォルトの名無しさん
2014/11/07(金) 21:25:04.91ID:+QwkR1Kfじゃないとデバッグの時に死ねる
0457デフォルトの名無しさん
2014/11/07(金) 21:28:24.66ID:ucXGRKwS何でポインタのポインタのポインタが使いたくなるの?
0458デフォルトの名無しさん
2014/11/07(金) 21:41:31.71ID:qAAA5o7I0459デフォルトの名無しさん
2014/11/07(金) 21:47:27.74ID:ucXGRKwS{
return new int[x * y];
}
わからんかった。
0460デフォルトの名無しさん
2014/11/07(金) 21:51:53.96ID:DvlzUAf60461デフォルトの名無しさん
2014/11/07(金) 21:52:27.42ID:sPY5lqdlこれがわかればおっけーかなと
void func(FILE **fp){
*fp=fopen("r","hoge.txt");
}
int main(void){
FILE *fp
func(&fp);
if(fp)
fclose(fp);
return 0;
}
コンパイル通してませんさせん
0462デフォルトの名無しさん
2014/11/07(金) 21:53:30.68ID:ucXGRKwS言ってることが良くわからないので、書いてみてくれる?
0463デフォルトの名無しさん
2014/11/07(金) 22:01:27.87ID:toea6tGi1行の文字列(長さはまちまち) を 配列で記憶したい
テキストエディタとかだと こういう欲求はありそう
0464デフォルトの名無しさん
2014/11/07(金) 22:04:21.07ID:ucXGRKwSそれ、ポインタのポインタでよくない?
0465デフォルトの名無しさん
2014/11/07(金) 22:06:36.52ID:ucXGRKwS0466デフォルトの名無しさん
2014/11/07(金) 22:10:50.19ID:toea6tGiまぁね 取り扱いたい世界はポインタのポインタ -(A)
ただ、関数戻り値には他の状態値(おおよそ int) を当てたいので
引数の書き換えで ってなると (A)のポインタで受けるのかなー と
(C++なら参照渡しで済む話)
0467デフォルトの名無しさん
2014/11/07(金) 22:15:38.53ID:ucXGRKwSポインタのポインタを書き換えるには、ポインタのポインタで良いでしょ。
なんで?
ねえなんで?
0468デフォルトの名無しさん
2014/11/07(金) 22:16:57.60ID:ucXGRKwSどうして?
なんでそうなったの?
0469デフォルトの名無しさん
2014/11/07(金) 22:19:44.52ID:toea6tGi{
*p = new ichar*[ 適当 ];
for ( i 回して)
(*p)[i] = new 文字列
return 行数
}
呼び出し側で
char **p = 0;
foo(&p);
こんなイメージ。 あくまで俺主観のこじつけだよ。
0470デフォルトの名無しさん
2014/11/07(金) 22:25:01.41ID:ucXGRKwSこじつけ以外の何物でもないよね。
必要ないものを必要と言い張って初学者を混乱させるのはもうやめにしない?
0471デフォルトの名無しさん
2014/11/07(金) 22:29:57.22ID:toea6tGi過去にかいたことあるコードだし… (スマートでないことは認める)
>>449,452,455 あたりが実例出してくれるのを期待してるんだが
0472デフォルトの名無しさん
2014/11/07(金) 22:33:03.84ID:SLgxRVRb>>469の[ 適当 ]が不定な場合とかあかんの?
0473デフォルトの名無しさん
2014/11/07(金) 22:37:05.24ID:DvlzUAf60474デフォルトの名無しさん
2014/11/07(金) 22:37:57.78ID:ucXGRKwSあかんのやでえ。
0475デフォルトの名無しさん
2014/11/07(金) 22:53:45.83ID:mpkOYS3Z0476デフォルトの名無しさん
2014/11/07(金) 23:01:22.02ID:g+Nte/6Cchar p[] = "abcde";
char a = GetChar(&p);
char b = GetChar(&p);
みたいな使い方するときとか
関数内でpを進めるとかなりすっきり読める
にしてもchar*** pとかはやりたくない
コード設計見直した方が楽になれる
0477デフォルトの名無しさん
2014/11/07(金) 23:44:12.29ID:1usQ6QQtこれでええやん。
Cなら
typedef int_array {
int *data;
size_t size;
}int_array;
typedef struct td_int_array
{
int_array * rows;
size_t size;
} td_int_array ;
void f(td_int_array* a)
0478デフォルトの名無しさん
2014/11/08(土) 00:17:11.56ID:VTYvswVR0479デフォルトの名無しさん
2014/11/08(土) 00:26:19.90ID:1RxyvQ81具体的にどんなふうに実行速度落ちるのか教えて
0480デフォルトの名無しさん
2014/11/08(土) 00:36:09.08ID:SdfgCKME全く心配ない。
ポインタのポインタのポインタでもすぐ慣れる。
0481デフォルトの名無しさん
2014/11/08(土) 00:40:04.20ID:9PbWBn7fネタをネタと解らない初心者にそういうのやめろよ…
0482デフォルトの名無しさん
2014/11/08(土) 00:41:17.91ID:SdfgCKME3次元だから***でそこに入れるデータの為に*で4つ。
0483デフォルトの名無しさん
2014/11/08(土) 00:44:04.66ID:SdfgCKMEポインタのポインタのポインタは何?
って聞かれたら、
それは
ポインタのポインタの、
ポインタでいいだろ。
0484デフォルトの名無しさん
2014/11/08(土) 00:46:33.07ID:9PbWBn7fネタじゃなかったんか…
それこそ要素毎にサイズ変わるわけじゃないんだから一次元で確保すりゃ良い話
0485デフォルトの名無しさん
2014/11/08(土) 00:50:12.20ID:SdfgCKMEmpiで並列化する時にメモリが1次元で確保されてるより***の方がやり易かったわ。
0486デフォルトの名無しさん
2014/11/08(土) 01:04:11.19ID:UHdmp0aU詳しい説明をお願いします。
0487デフォルトの名無しさん
2014/11/08(土) 03:41:00.25ID:D1mfqEl0見てわからんなら説明してもどうかと
http://peace.2ch.net/test/read.cgi/tech/1313183984/783
execv*() に渡す argv を下請け関数で malloc() するときに char *** が欲しくなりました。
0489デフォルトの名無しさん
2014/11/08(土) 06:19:29.67ID:VTYvswVRお母さんにキイテミロ
0490デフォルトの名無しさん
2014/11/08(土) 06:25:31.27ID:9PbWBn7fCなら使う場合もあるけどかなり限定的
0491デフォルトの名無しさん
2014/11/08(土) 06:31:04.96ID:9PbWBn7f0492デフォルトの名無しさん
2014/11/08(土) 10:06:33.29ID:gsFR/4t/申し訳ないのですが2つに続きます。
class A
{
pivate:
typedef struct tagParameter{
int* src_v;
} PARAM;
std::list<PARAM> param_list;
public:
void push(int num){
int a* = new int[num];
for( int i = 0; i < num; i++){
a[i] = i;
}
PARAM test_param{ a };
param_list.push_front(test_param);
}
void delete(){
std::list<PARAM>::iterator itr_param_list = param_list.begin();
while( itr_param_list != render_param.end() ){
delete []itr_param_list->src_v;
itr_param_list = render_param.erase(itr_param_list);
}
}
}
0493492
2014/11/08(土) 10:07:08.87ID:gsFR/4t/{
A cTest;
cTest.push(1);
cTest.push(2);
cTest.push(3);
cTest.delete();
}
この場合、 int a* = new int[5];の確保分はメモリリークを起こしますか?
デバッグしてみると起こしてるよと言われたんですがなぜだか分かりません。
最近学び始めたので至らぬ点が多いと思いますがよろしくお願いします。
0494デフォルトの名無しさん
2014/11/08(土) 10:14:29.89ID:bKZpxDk5これがrender_paramから左辺のitr_param_listを消した結果、末尾のイテレータを返してるんだけど、
なんで
itr_param_list++;
にしない?
0495デフォルトの名無しさん
2014/11/08(土) 10:16:34.53ID:bKZpxDk5とにかくerase関数の仕様を確認してみ
0496デフォルトの名無しさん
2014/11/08(土) 10:21:42.98ID:gsFR/4t/これで末尾まで回せると思ってたのですが...
0497デフォルトの名無しさん
2014/11/08(土) 10:24:04.85ID:gsFR/4t/すいません
訂正です
render_paramは全てparam_listの事です
0498デフォルトの名無しさん
2014/11/08(土) 10:33:51.53ID:RkXDkgJE0499デフォルトの名無しさん
2014/11/08(土) 11:08:16.73ID:ORkqH1Br少なくともA[0]が確実に存在することを保証するため。
初期値としては例えば"番兵"を入れておく。
0500KUSO KOTE ◆unko./w.Osri
2014/11/08(土) 11:23:44.82ID:wHqCkgVeんー、例外が出なければ特に問題ないような
http://ideone.com/xga7LL
eraseの仕様は ISO/IEC 14882:2011の
23.3.5には23.2を満たすこととあって
23.2.3p12では
The iterator returned from a.erase(q) points to the element immediately following q prior to the element
being erased. If no such element exists, a.end() is returned.
0501デフォルトの名無しさん
2014/11/08(土) 12:16:15.61ID:cySalImSそのソースだけで本当にメモリリークを起こしてると言われる?
書き間違えしてることからそのソースそのものを実際にコンパイル・デバッグして確認した結果ではないでしょ
0502デフォルトの名無しさん
2014/11/08(土) 12:36:16.04ID:EW+rnnAz>Aってメンバの意図を教えてください
「ボクはCの文法も知らないばかです」
と言う意味では
0503デフォルトの名無しさん
2014/11/08(土) 13:45:21.52ID:aL4EVk1Bコンパイラのエラーメッセージはなんと出てる?
あとコンパイラは何を使っている?
俺の予想だと、これはメモリリークを指摘したコンパイラエラーだと勘違いしていると思うんだ
0504デフォルトの名無しさん
2014/11/08(土) 13:53:32.19ID:m7dez7IQ俺の予想ではお前は超ド級ウルトラ初心者。
コンパイラがエラーメッセージが出してる(とお前は思ってる)のにデバッグできるのか?
0505デフォルトの名無しさん
2014/11/08(土) 13:57:13.48ID:3SfgPf5Mこのソース、コンパイルが通ると思う?
0506デフォルトの名無しさん
2014/11/08(土) 14:05:59.44ID:UfN+T2xC↓
質問者:このスレで質問(転記ミス多数)
↓
503:「コンパイルエラーの内容は?
↓
「デバッグと言ってるのにお前アホか
↓
503:ID変えて自演 ★今ココ
0507デフォルトの名無しさん
2014/11/08(土) 15:28:46.28ID:gsFR/4t/おっしゃる通りで、色々書いてるのですが
全部コピペしてると見づらくなるので端的に書いてみましたが
実際の問題箇所は別のところにありました。
本当に申し訳ないです...
原因はこれを更に上で持ってるクラスがあって
それがdelete関数を呼ぶ前に消えてしまっていたので
deleteされずに残ってるものがありました
実行毎にリーク数がバラバラだったので気づけました
お騒がせし申し訳ありませんでした。
今度から気をつけて質問したいと思います。
0508デフォルトの名無しさん
2014/11/08(土) 18:04:07.32ID:RkXDkgJE0509デフォルトの名無しさん
2014/11/08(土) 19:14:26.09ID:dA5KkhaHちゃんとデストラクタを使おうぜ
0510デフォルトの名無しさん
2014/11/08(土) 19:24:20.47ID:gsFR/4t/>>509
そうですね...
無闇矢鱈にポインタってのも反省します。
0511デフォルトの名無しさん
2014/11/08(土) 19:30:04.78ID:Y8q8lxOz知っておいて損は無いと思うんだがな
0512デフォルトの名無しさん
2014/11/08(土) 19:40:56.45ID:dA5KkhaH配列newじゃなくてvectorとかな
0513デフォルトの名無しさん
2014/11/08(土) 23:17:13.15ID:J9UQ3B/M>それがdelete関数を呼ぶ前に消えてしまって
手動deleteも問題だが、これは別の問題があるな
0514デフォルトの名無しさん
2014/11/09(日) 00:14:33.31ID:r2VhSYuc↓っぽい
ttp://stackoverflow.com/questions/11180378/what-is-the-cause-of-flexible-array-member-not-at-end-of-struct-error
struct {
size_t sz;
int A[];
double D[];
};
は
struct {
size_t sz;
struct {
int A;
double D;
} a__[];
};
のように使えるそうな
0515デフォルトの名無しさん
2014/11/09(日) 01:09:43.58ID:0+q+L/i70516デフォルトの名無しさん
2014/11/09(日) 07:53:36.47ID:5CcElDxt0517デフォルトの名無しさん
2014/11/09(日) 08:02:33.54ID:cg8/k+y/0518デフォルトの名無しさん
2014/11/09(日) 08:56:35.02ID:QMG6pfcl0519デフォルトの名無しさん
2014/11/09(日) 11:16:53.32ID:QMG6pfcl0520デフォルトの名無しさん
2014/11/09(日) 15:59:00.14ID:iOEsToObあれってどうなってるんですかね?
エスパーさん俺の望む回答をお願いします。
0521デフォルトの名無しさん
2014/11/09(日) 16:07:35.61ID:cg8/k+y/呼び出し元はeaxレジスタを読めばどの数値が帰ってきたのかがわかる
0522デフォルトの名無しさん
2014/11/09(日) 16:25:11.99ID:PDZuo1Amスレ違い。↓こっちいけ。
http://peace.2ch.net/test/read.cgi/tech/1187922645/
0523デフォルトの名無しさん
2014/11/09(日) 17:34:10.61ID:dgJkdaDV↑を見た後↓を見たんだけど
>>438
"アライメントをhogeりたかったのかな"ってあったので別人ですが追加質問。
http://codepad.org/VYNlYCy6
上の例でdがint境界に整列するのは期待していい?
0524デフォルトの名無しさん
2014/11/09(日) 17:45:35.10ID:Ncgt9DFnそもそも規格としてサイズ0の配列を構造体の末尾以外に置けなかったはずなので
鼻から悪魔が出てくる気がする
0525デフォルトの名無しさん
2014/11/09(日) 17:56:57.48ID:dwdWovitというか、サイズ1の配列を構造体の末尾において可変長構造体とする手法は、いにしえからの秘伝だったはず
http://www.kouno.jp/home/c_faq/c2.html#6
リッチーには嫌悪されているようだが‥C99では許容されてしまったんだね‥
0526デフォルトの名無しさん
2014/11/09(日) 18:00:21.17ID:fAYsHd+70527デフォルトの名無しさん
2014/11/09(日) 18:07:31.82ID:Ncgt9DFnで、gccはその裏ワザを使いやすいように、構造体末尾のサイズ0配列を許容した
そしてそれが規格に取り込まれた
Unixのために作られたC言語が
Unixのデファクトスタンダードなコンパイラであるgccに引っ張られてしまうのは
仕方ないことなのだ・・・
0528デフォルトの名無しさん
2014/11/09(日) 19:31:33.81ID:GOkz0EBtそんなうんこ技つかわないで、無名union使った方が良い
0529デフォルトの名無しさん
2014/11/09(日) 19:40:25.34ID:NRcwt21o0530デフォルトの名無しさん
2014/11/09(日) 19:58:52.74ID:GOkz0EBt> ILE C/C++ は、標準 C および C++ を拡張して、柔軟な配列に関する制限を緩和し、以下を可能にしています。
> 柔軟な配列メンバーを、構造体の最後のメンバーとしてだけではなく、構造体のどの部分 でも宣言できます。
どうやって使うんだろう?
0531デフォルトの名無しさん
2014/11/09(日) 20:41:05.26ID:QNknVBPXint a[0];
int b0, b1;
} u;
どうせ
&u.a[0] == &u.b0
&u.a[1] == &u.b1
なんだろ?(知らないけど)
0532デフォルトの名無しさん
2014/11/09(日) 21:02:07.94ID:Ncgt9DFnとも書いてあるから、>>531の使い方を想定してる気がする
0533デフォルトの名無しさん
2014/11/09(日) 21:51:07.15ID:XPgdycDd最適化しないでコンパイルしても実行時間変わらなかったし
ソースコードが短くなるとか見やすくなるとか以外でお願い教えて
0534デフォルトの名無しさん
2014/11/09(日) 21:56:07.97ID:HT8IGN4n揚げ足取りかな
0535デフォルトの名無しさん
2014/11/09(日) 22:06:18.03ID:M361BJ1e++は初期Cのころからあるから、初期のCでそうしたメリットは何って聞いているんだろ
0536デフォルトの名無しさん
2014/11/09(日) 22:11:39.32ID:wPGgU0yMxの内容を1加算する という極めてありがちなコードを書くときに
xを2回もタイプする必要がない。
これはコードが短いのとは別のメリット。
なぜなら人間はたいてい
「xの値に1加算した結果をxに代入」でなく
「変数xの内容を1増やす」という思考をしているから。
0537デフォルトの名無しさん
2014/11/09(日) 22:12:07.84ID:fYUcpEhO++xじゃない?
x++じゃ機能的に異なる
0538デフォルトの名無しさん
2014/11/09(日) 22:22:39.41ID:EnFInTod0539デフォルトの名無しさん
2014/11/09(日) 22:23:43.58ID:fYUcpEhOそういう使い方はしないのでは?
今までと同じでストリーム用でしょ
0540デフォルトの名無しさん
2014/11/09(日) 22:34:47.28ID:XPgdycDdじゃあx+=1と比較したときはどう?
>>537
実行したプログラムにはその一文しかないからどっちでもいいんじゃない
>>538
実行時間に差はなかったよ
0541デフォルトの名無しさん
2014/11/09(日) 22:41:14.14ID:canSqdwN>実行時間に差はなかったよ
プログラミング言語Cが作られた時代のコンピューターでの話をしているんだろ?
0542デフォルトの名無しさん
2014/11/09(日) 22:44:12.45ID:HT8IGN4n差はなかったってどの精度で言ってるの?
0543デフォルトの名無しさん
2014/11/09(日) 22:47:51.46ID:qMMOH0c1*x++ = *y++;
みたいな書き方したかっただけじゃね?
0544デフォルトの名無しさん
2014/11/09(日) 22:49:47.93ID:XPgdycDd0545片山博文MZ次期CEO ◆T6xkBnTXz7B0
2014/11/09(日) 22:53:09.64ID:XU91kGr50546デフォルトの名無しさん
2014/11/09(日) 22:54:23.29ID:fYUcpEhO文として完結してないじゃん。
式と文の違いが分かってないんじゃないの?
0547デフォルトの名無しさん
2014/11/09(日) 22:59:02.40ID:M361BJ1eCを作った時の状況って俺は知らないけど、
アセンブリ言語でINC、DEC命令があり、それらをCで++、--にしたって感じだし。
Cって読みにくい・記述大変なアセンブリ言語はいやぽで作った言語って感じだし。
0548デフォルトの名無しさん
2014/11/09(日) 22:59:04.71ID:GOkz0EBtそれは初心者の方法。アセンブラ出力して、マシンサイクルで比較するんだよ。
最近のコンパイラじゃ最適化オフにしてもx = x + 1はinc一命令になりそうだから
x = x + 1000とでも比較してみろ。
0549デフォルトの名無しさん
2014/11/09(日) 23:43:32.04ID:uhcilT9jってするためじゃないのか
0550デフォルトの名無しさん
2014/11/09(日) 23:59:15.95ID:IVLS3vrM両方使える時に意味が違ってくるような実装しちゃいかんだろ
0551デフォルトの名無しさん
2014/11/10(月) 00:28:01.45ID:pUAchLvix=x+2 相当の ++
x=x+3 相当の +++
....
x=x+1000 相当の +++++++....
なるものはそもそも存在しないので比較しようがない。
0552デフォルトの名無しさん
2014/11/10(月) 00:39:09.02ID:ks3sjnzlインクリメントか加算かの違い
ぶっちゃけ、どっちでもいいけど、インクリメントの方が若干早いはず
詳しく知りたければアセンブリについて調べてみるといい
0553デフォルトの名無しさん
2014/11/10(月) 03:47:45.66ID:x8aX3rE80554デフォルトの名無しさん
2014/11/10(月) 05:58:11.85ID:1rukL+lFもう普段は意味ないよね
0555デフォルトの名無しさん
2014/11/10(月) 06:02:50.23ID:h8HoDMBS揚げ足取りかなって予防線を張ってるのに
その予防線を突破してくるアスペっぷり見事っす
0556デフォルトの名無しさん
2014/11/10(月) 07:28:49.35ID:k5u1ANsT0557デフォルトの名無しさん
2014/11/10(月) 07:36:23.38ID:Oe+LZ9eIadd 命令は、オペランドを読まないといけないから
0558デフォルトの名無しさん
2014/11/10(月) 07:37:32.98ID:k5u1ANsTマジレスすると
下みたいなコードのとき混乱しないため ++ の方が初心者にはお薦め
#include <stdio.h>
int main(int ac, char **av)
{
int a;
char b;
int *pa = &a;
char *pb = &b;
printf("%p, %p\n", pa++, pb++);
printf("%p, %p\n", pa, pb);
pa += 1, pb += 1;
printf("%p, %p\n", pa, pb);
pa += 5, pb += 5;
printf("%p, %p\n", pa, pb);
return 0;
}
0559デフォルトの名無しさん
2014/11/10(月) 07:37:40.26ID:Oe+LZ9eIそもそも揚げ足とりにすらなってないから、スルーで正解と言うならわかる
0560デフォルトの名無しさん
2014/11/10(月) 07:45:27.63ID:k5u1ANsT++ がインクリメントでも常に inc REG に変換されるとは限らない
0561デフォルトの名無しさん
2014/11/10(月) 07:54:54.03ID:oJxK98s840年前の計算機スペックベースで設計されているから、
当時としては高速なインクリメント命令に直接変換される ++ が必要だった
ということ。
0562デフォルトの名無しさん
2014/11/10(月) 07:58:26.08ID:k5u1ANsT0563デフォルトの名無しさん
2014/11/10(月) 09:23:43.15ID:FwpJc2RO0564デフォルトの名無しさん
2014/11/10(月) 09:48:57.67ID:FwpJc2RO0565デフォルトの名無しさん
2014/11/10(月) 11:44:39.18ID:GGFW6CYo0566デフォルトの名無しさん
2014/11/10(月) 23:15:50.56ID:EMIkNzOBで、それがなにか?
0567デフォルトの名無しさん
2014/11/11(火) 02:08:43.31ID:EYkakdSCCのスタティックリンクライブラリとして吐き出してCプロジェクトにリンクして使いたいんですが、
こういった事って出来ますか?
0568デフォルトの名無しさん
2014/11/11(火) 04:15:57.98ID:wmaTj/ui0569デフォルトの名無しさん
2014/11/11(火) 10:20:25.88ID:nxSiprkx質問をごにょごにょ書いてたら
いつの間にか理解出来ていた
また今度よろぴく
0570デフォルトの名無しさん
2014/11/11(火) 10:47:07.11ID:7vWNWhS80571デフォルトの名無しさん
2014/11/11(火) 12:50:44.49ID:K9VcwXbNその過程を初心者スレか雑談スレ辺りに投下してくれてもいいのよ。
0572デフォルトの名無しさん
2014/11/11(火) 19:57:02.10ID:Ck5u9kVeわからない、というのはたいがい「なにがわからないかがわからない」のが常だからね‥ObjectOriented がわからない、とかね、困った、困った‥
0573567
2014/11/11(火) 22:24:25.32ID:JuUrGkDaスタティックリンクではなく、ダイナミックリンクですがにしたらいけました
0574デフォルトの名無しさん
2014/11/11(火) 22:44:32.19ID:FsUdFhtB取得した文字数分'\0'で埋めたstring作ってそのc_strからconst取り除いてsprintfに渡したら
いい感じにsprintfで出力した文字列をstringに入れられると思いかけたんですが
const_castってそうそう使うもんじゃないなと思ったので
下のようにc_strで取得したポインタからconst取り除くのがどれぐらい問題があるか教えてください。
std::string fmt2str(const char* format, ...){
va_list ap;
va_start(ap, format);
const int len = _vscprintf(format, ap);
std::string out(len, '\0');
_vsnprintf_s(const_cast<char*>(out.c_str()), len + 1, len, format, ap);
return out;
}
0575デフォルトの名無しさん
2014/11/11(火) 22:46:53.83ID:fMu5Ad7dそうだな。
夜道で刺されても「被告にも情状酌量の余地があり」
となるレベル。
0576デフォルトの名無しさん
2014/11/11(火) 22:49:38.23ID:zKw/3Cvz0577デフォルトの名無しさん
2014/11/11(火) 22:51:35.90ID:K9VcwXbNそこまでして危ない橋を渡りたい理由が分からん。
lenは整形済み文字列長になるのかな。
だったらこんなんでいいだろ。
--
char * out = new char[len + 1];
_vsnprintf_s(out, len + 1, len, format, ap);
std::string foo = out;
delete[] out;
return foo;
--
0578デフォルトの名無しさん
2014/11/11(火) 22:55:43.40ID:INRwCFLkC言語の前に日本語の書き方を勉強するべき。
0579デフォルトの名無しさん
2014/11/11(火) 23:47:48.31ID:FsUdFhtBありがとうございます。
未定義の動作を起こして鼻から悪魔が出ても文句は言えない系のアレと解釈しました。
危ない橋を渡る前のコードはほぼ>>577さんが提示したのと同じで、>>574で提示したのは使う予定はないです。
一瞬、一時バッファ確保するのを端折れるのではないかと思ったのでせっかくなのでみなさんに質問させてもらいました。
0580デフォルトの名無しさん
2014/11/11(火) 23:55:09.19ID:Q0YP3r9c0581デフォルトの名無しさん
2014/11/11(火) 23:59:37.42ID:FsUdFhtBboostのformat使うのはより正しい選択だと思いますし
言わんとすることはわかりますがその書き方は正しくないのでは
0582デフォルトの名無しさん
2014/11/12(水) 01:29:37.24ID:MpcbuGKwバグがわからんので、同僚に相談してたら
いきなり あー! とか言って自分のデスクに戻って
数分して いやーわかったわかった ども と
同僚を煙に巻く奴
何もしてないのに感謝される同僚 ぽかーん
0583デフォルトの名無しさん
2014/11/12(水) 02:29:47.55ID:LgpuQXWR0584デフォルトの名無しさん
2014/11/12(水) 07:29:30.27ID:KVAuCYtXout の nullpo チェックも面倒だよな
0585デフォルトの名無しさん
2014/11/12(水) 07:58:10.56ID:JtiZc+eB0586デフォルトの名無しさん
2014/11/12(水) 07:59:53.03ID:KVAuCYtX0587デフォルトの名無しさん
2014/11/12(水) 08:03:28.22ID:j3JQUEN80588デフォルトの名無しさん
2014/11/12(水) 13:58:51.14ID:SgzYB1N4そんなやつに相談するのかよ w
0589デフォルトの名無しさん
2014/11/12(水) 14:11:48.68ID:MpcbuGKw0590デフォルトの名無しさん
2014/11/12(水) 14:22:28.62ID:wkOcL4q80591デフォルトの名無しさん
2014/11/12(水) 14:49:15.09ID:6K30nyMV人間のスタッフに相談する前にテディベアのぬいぐるみに相談しろって言ってるしね
0592デフォルトの名無しさん
2014/11/12(水) 15:25:18.61ID:0LkGEnGi但し、プラスチック製。というのがあったな
0593デフォルトの名無しさん
2014/11/12(水) 17:39:31.85ID:T+u5xe5astd::promise
std::thread
std::atomic
std::packaged_task
std::async
などと沢山あるのですが、なんでこんなに沢山あるのですか?
ややこしくて何からやれば良いのか分りません。どのあたりから
手を付ければよいでしょうか?
0594デフォルトの名無しさん
2014/11/12(水) 17:53:45.14ID:zENzdlQl0595デフォルトの名無しさん
2014/11/12(水) 18:20:47.94ID:pfty6qg4今の規格では中途半端なpromise,asyncは忘れていい。
atomicはスレッド生成でなくスレッド間でデータを渡す際に使うもの
0596デフォルトの名無しさん
2014/11/12(水) 19:35:56.08ID:T+u5xe5aレスありがとうございました。参考になりました。
やりたいことはサブスレッドで実行して、戻り値をメインスレッドで
受け取りたいのですが、C#のBackgroundWorkerみたいな感じです。
まずはthreadから試してみます。
0597デフォルトの名無しさん
2014/11/12(水) 19:45:47.47ID:RxkjZTWPthreadはjoinせずにスコープを抜けると落ちる糞仕様だから注意しておけよ
0598デフォルトの名無しさん
2014/11/12(水) 19:56:55.86ID:wYiLy+NQバグがわかる経理とか営業スゲー w
0599デフォルトの名無しさん
2014/11/12(水) 20:28:43.81ID:WWVTzwfB>>598
0600デフォルトの名無しさん
2014/11/12(水) 21:34:33.33ID:MpcbuGKwさすが カーニハン先生w 存命かな。
0601デフォルトの名無しさん
2014/11/12(水) 21:36:49.13ID:kW0ZSq/y0602デフォルトの名無しさん
2014/11/13(木) 00:40:43.26ID:A3FNhulI言語仕様に無駄が多すぎるせいで糞なソースはとことん糞で可読性糞
化石言語もいいとこだな。これじゃどうがんばっても流行らないし新規開発の需要もない罠
ヘッダーファイルとかインクルードの順番とかゴミすぎ
ポインタをif文の条件に使うなアホが
VisuaStudioもeclipseと比べたらこれまたゴミ糞すぎる
オープンソース以外でまともな言語と開発環境は見たことがない
0603デフォルトの名無しさん
2014/11/13(木) 01:07:03.92ID:G+5vwsJZ0604デフォルトの名無しさん
2014/11/13(木) 01:57:12.35ID:3Bps3ihq微塵も無いと思うのだが
Java信者の思考はいつも
「Javaと異なる仕様=欠陥」だから仕方ない
0605デフォルトの名無しさん
2014/11/13(木) 02:07:44.82ID:R28Io23eまじで出来ない。脳みそのどこかが拒否してる。
麻痺してるとも言えるかorz
でも
C++は最高傑作である by ハーバートシルト
ふーんだ
0606デフォルトの名無しさん
2014/11/13(木) 02:23:06.82ID:yOQrY5EK絶対に脅かされることがない安心感は何にも代え難いものがある。
C/C++とJavaは使いどころが違うのに どちらで書くかなんて言い出す奴はあほ
0607デフォルトの名無しさん
2014/11/13(木) 04:51:27.63ID:G+5vwsJZこれって標準化されていて、使っても問題ないんでしょうか?
試したコンパイラはg++です
http://ideone.com/GvCB6A
0608デフォルトの名無しさん
2014/11/13(木) 05:28:32.95ID:HFkxt2t8C99のdesignated initializerかな
0609デフォルトの名無しさん
2014/11/13(木) 07:15:04.13ID:8nnx8trqいいえ、標準ではありません
0610デフォルトの名無しさん
2014/11/13(木) 07:30:48.73ID:G+5vwsJZまさにそれでした、ちなみに、
Hoge hoge = {
x: 3,
y: 5,
};
とも書けるって事でした
0611デフォルトの名無しさん
2014/11/13(木) 08:04:49.86ID:1iY71Yqc一部のメンバの初期化とかには便利
0612デフォルトの名無しさん
2014/11/13(木) 15:25:28.04ID:X52VxF3b0613デフォルトの名無しさん
2014/11/13(木) 16:04:07.36ID:N/yfjgH2使い続けることにしたのだろうか
0614デフォルトの名無しさん
2014/11/13(木) 16:18:30.31ID:Y2Hw988Gでもg++だと宣言の順番とおりじゃないとダメなんだよ。
使い道が全くない。
0615607
2014/11/13(木) 19:37:56.82ID:UjzPHB8zフィールド名を指定して、構造体側の順序入れ替え時にコンパイルエラーを期待するのは、実質使えないんじゃないかなと思います、
Warningなり、静的解析ツールがあれば別ですが。
今のところは、未初期化で宣言後に代入してるところを、代入コストと冗長性を取り除く程度が無難だと思ってます。
↓これを置き換え
Hoge hoge;
hoge.x = 3;
hoge.y = 5;
0616デフォルトの名無しさん
2014/11/13(木) 20:19:18.10ID:E2cMfZHoC++11以降は、Javaの出番がないような気がするけどね。
むしろ、何のためにJavaを使うの?
0617デフォルトの名無しさん
2014/11/13(木) 20:54:25.92ID:VOhXK40g0618デフォルトの名無しさん
2014/11/13(木) 21:39:30.68ID:uOTGwQ1cGCは強力だからね‥
0619デフォルトの名無しさん
2014/11/13(木) 23:29:47.64ID:NqC+qBdm趣味
Pascal-P5で遊ぶ感覚に同じ
0620デフォルトの名無しさん
2014/11/14(金) 01:15:29.62ID:4lYvxokF0621デフォルトの名無しさん
2014/11/14(金) 01:55:13.55ID:+vOKvhlv0622デフォルトの名無しさん
2014/11/14(金) 02:15:15.37ID:lsgOchF50623デフォルトの名無しさん
2014/11/14(金) 07:27:39.53ID:cGgQXSsi入門レベルのポインタ・構造体あたりまでマスターしたけど
この先どうするか迷う
仕事に使おうとか特に考えてる訳でもなくて
プログラミングっておもしろそうだなぁと思って始めた
今のところそれほど難しいとも思わないから
もう少しCを進めてみようかなとも思ってるんだけど
迷うなぁ〜
と書いたところで、
お前が何をしたいのかによるって言われて終わるんだろうな
なんか作りたいなと漠然と思ってる程度なんだけど
こう書くとたぶんお前らは
じゃVBやったら?とか言うんだろうな
じゃそうしようかな・・・
という具合で自問自答しながら、これならやっぱり書き込む必要ないかと思って
全文Deleteするんだけど、今日は書き込むボタンをぽちっとしてみるのであった
0624デフォルトの名無しさん
2014/11/14(金) 07:39:16.43ID:wpiv66DF0625デフォルトの名無しさん
2014/11/14(金) 09:27:33.82ID:4lYvxokFそこからC/C++行くならそれでいいし
0626デフォルトの名無しさん
2014/11/14(金) 12:49:35.05ID:qPlOgKHi文法を覚えたところで、それはプログラミングの前衛知識のひとつを得たにすぎない
日本語の文法覚えたことと、日本語で面白い本を書けることは別だよね
プログラミングの奥深さはその先にあるんだよ
まあ仕事でやってる人でも、特にドカタ的な人は理解してないことが多いけどね
0627デフォルトの名無しさん
2014/11/14(金) 12:50:34.62ID:qPlOgKHi0628デフォルトの名無しさん
2014/11/14(金) 14:40:04.95ID:ej2P4o/80629デフォルトの名無しさん
2014/11/14(金) 16:14:27.73ID:+bh3MIM00630デフォルトの名無しさん
2014/11/14(金) 16:50:00.43ID:9h3dP9ftwelcome to http://peace.2ch.net/test/read.cgi/tech/1411227287/
0631デフォルトの名無しさん
2014/11/14(金) 19:56:14.21ID:wTO3bI+fGUIは?
win32api
0632デフォルトの名無しさん
2014/11/15(土) 00:51:47.03ID:3fRE4a8L日本語が出来てもプロとして仕事が出来るってことじゃないしね
俺、プログラム言語(C++とか)はすごく出来る。
そうか、じゃ車のエンジン制御のプログラム(プロとしての仕事)やってって言われても
車のエンジン制御のしかたさっぱり分からん><って良くあるしね
0633デフォルトの名無しさん
2014/11/15(土) 01:49:46.43ID:ikAfBmR0やりたいことが特に定まって無く、単純にプログラミングって面白そうだなあって考えてるなら、組み込みプログラミングをオススメする。
組み込みプログラミングは、アセンブリ言語というものでもできるけど、Cでも出来る。
おすすめする理由は、組み込みプログラミングを行うとC言語の真髄が見えてくるし、
自分がCで書いたプログラムを使ってCPUが何をしているのかの理解につながる。
まあそのためにはハードウェアの勉強も同時に行わないといけないんだけど、そこも含めて面白いと思うよ。
ポインタや構造体のあたりがそれほど難しいと思わなかったなら、そこまで大変ではないと思う。
0634623
2014/11/15(土) 04:49:08.10ID:CRZDSZv3>>624
なにやら難しそうですね
>>625
C#というのは考えに入ってませんでした
ちょっと調べてみますね
>>626
今の知識では実用的なものは何も作れないので
前衛知識のもっと前の段階なのかも・・
>>630
ブックマークしておきます
>>631
ウィンドウを出したい!と思って適当にコピペしてメッセージボックスを出すプログラム
を作った事はあります。今の基本知識だとまだ早いのかなと思って
本格的にはやってないのですが、Cを続けるならその辺の本も買ってこようかなとおもてます
>>633
ハードウェア動かすのって面白そうだなぁ
個人の趣味的な範囲で何ができそうか調べてみますね
0635デフォルトの名無しさん
2014/11/15(土) 08:03:56.01ID:zy2r9BUW出すだけなら簡単だけど
アプリケーションを正しく動作させるためには深い理解が必要
0636デフォルトの名無しさん
2014/11/15(土) 13:05:26.87ID:dr/dyrN2どの辺りの知識が必要ですか?
0637デフォルトの名無しさん
2014/11/15(土) 14:54:52.30ID:g+QiKrjA月名を入力すると数字の月を出力する
数字を入力すると月名を出力する
List<String> NAMES = Arrays.asList("jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec");
Scanner sc = new Scanner(System.in);
while(true)
System.out.println(
sc.hasNextInt()?
NAMES.get(sc.nextInt()-1):
NAMES.indexOf(sc.next())+1
);
0638デフォルトの名無しさん
2014/11/15(土) 14:58:13.16ID:GzDZx6pY0639デフォルトの名無しさん
2014/11/15(土) 15:00:56.79ID:hIWmb4Rf>月名を入力すると数字の月を出力する
>数字を入力すると月名を出力する
で自分の口で説明できてるし
それに沿って実装すればいいと思う
0640デフォルトの名無しさん
2014/11/15(土) 15:41:10.41ID:RzrSosLrオブジェクト指向なら、
スッキリわかる Java入門 第2版、2014
PICマイコン、C言語で、LEDをチカチカさせたいなら、
基礎入門 ブレッドボードではじめるマイコンプログラミング
2010、青木直史
猫でもわかるC#
結局、.NETでフォームを作るのだから、VBの本でも同じ
0641デフォルトの名無しさん
2014/11/15(土) 17:19:19.54ID:CRZDSZv3ありがとうございます
全部買いたい衝動に駆られてしまって
ますます迷ってきた
特に一番上のはポチる衝動に駆られては
しかし今月はちょっと買いすぎなのではと
相反する気持ちに押しつぶされそうに・・・
そしてふと目に入った>>637に没頭
なんとか組み上がってよかった
もちろんこの板の人に見せたら怒られそうなプログラムなので見せないけど!
0642デフォルトの名無しさん
2014/11/15(土) 17:27:50.80ID:YbHrBULy"abcd\nefg"を"abcd\\nefg"に
"\"Hello World\""を"\\\"Hello World\\\""みたいな
0643デフォルトの名無しさん
2014/11/15(土) 17:45:36.75ID:roR/GD990644デフォルトの名無しさん
2014/11/15(土) 18:54:25.87ID:B5DjQnZ70645デフォルトの名無しさん
2014/11/15(土) 18:55:35.52ID:1QOYN7FT0646デフォルトの名無しさん
2014/11/15(土) 19:05:46.79ID:OpYgM50z0647デフォルトの名無しさん
2014/11/15(土) 21:38:04.57ID:B5DjQnZ7あざす
調べてみます
0648デフォルトの名無しさん
2014/11/16(日) 06:47:56.72ID:nIuEkFSjある情報の集合体があって、各々のクラスが所持してます
使用方法は、自クラスで値を変更・参照
他クラスに渡す時は、変更はせず値を参照するだけなのですが
この集合体は構造体かクラス、どちらの方がよろしいのでしょうか
クラスのprivateに置いてゲット関数を駆使して使うか
引数をconstにして構造体で渡すか、と悩む点はそこかなと思ってるのですが
よろしければ、より良い方法を教えていただけないでしょうか
0649デフォルトの名無しさん
2014/11/16(日) 07:28:48.66ID:1qsvk//V但し、常に全てのメンバにアクセスするような場合(座標値など)は構造体でも可。
0650デフォルトの名無しさん
2014/11/16(日) 07:31:35.73ID:RFsNZWfoそれ自体に明確な概念があって適切な名前を付けられるかによる。
>>649のように「参照するだけ」とか手段で決める設計は禄なものではない
0651648
2014/11/16(日) 07:45:38.91ID:nIuEkFSjメンバ数は10個もないです
毎フレームアクセスします
頻繁にアクセスする、しないでの違いは何なのでしょうか
>>650
全て関連性があって名前も付けられます
どのような設計が理想なのでしょうか...
0652デフォルトの名無しさん
2014/11/16(日) 08:02:51.02ID:us5izt0Qそもそもそのデータを所持するベースクラスがあるのではないのか
0653デフォルトの名無しさん
2014/11/16(日) 08:53:36.96ID:nIuEkFSj他クラスの物の値を見たいから渡すんですが
ポインタか参照渡しで渡したかったのでconstは必須かなと
0654デフォルトの名無しさん
2014/11/16(日) 09:13:04.70ID:ETwRgil2変更させたくないならget一択
> 引数をconstにして構造体で渡すか、
何を言ってるのか、わからない
0655デフォルトの名無しさん
2014/11/16(日) 09:35:11.58ID:luMgT/mi0656デフォルトの名無しさん
2014/11/16(日) 09:40:05.18ID:xgxY7FoW↓ こんなことじゃないの?
BがAを使用した処理をするとき
B::処理(const Aの情報 aInfo) {
val1 = aInfo.Val1;
}
とするか
B::処理(A a) {
val1 = a.getVal1();
}
0657デフォルトの名無しさん
2014/11/16(日) 10:02:16.85ID:1qsvk//V丸投げなら宿題スレに。
そうでないなら書けたところまででも晒して味噌。
0658デフォルトの名無しさん
2014/11/16(日) 10:07:48.99ID:CXE/Z8t2とてつもないカレー臭がした
0659デフォルトの名無しさん
2014/11/16(日) 13:34:23.92ID:HF3ds5dGstructかclassかはその集合体の設計による。
一律に決めることは不可能。
各々のクラスからその集合体を取得する方法についても
一律に決めることは不可能。
ついでにC++に構造体というものは無い。
0660デフォルトの名無しさん
2014/11/16(日) 15:00:46.52ID:HA7YiNAr連続体とか流動体はないの?
0661デフォルトの名無しさん
2014/11/16(日) 17:25:16.93ID:Wd4CRM47for each (auto & i : vec);
みたいな書き方を見たんだけど これってVC拡張構文?
0662デフォルトの名無しさん
2014/11/16(日) 18:34:38.18ID:LKP1iDPW「みたいな」ならその通り
0663デフォルトの名無しさん
2014/11/16(日) 18:51:07.78ID:HjQlf/SxBaseを仮にread-writeクラスとして、
渡す時は継承したreadクラスを渡す
0664デフォルトの名無しさん
2014/11/16(日) 18:55:31.97ID:+rfLdjIVVC じゃなくて C++11
超便利
0665デフォルトの名無しさん
2014/11/16(日) 19:00:42.32ID:lkRhIZkq・for each (x in container ) { ... } はVC拡張
・for (x : container) はC++11
だったはず
0666デフォルトの名無しさん
2014/11/16(日) 21:05:38.62ID:3K4iGnZzプログラミング言語としての一貫性に欠けているという印象をいつまで経っても払拭できない。
そういうコンテキスト依存な振る舞いが、C++のバージョン(98とか11とか14とか)によってすら多種多様だから
もはや誰にとって使える言語なのかすら怪しくなっている。
0667デフォルトの名無しさん
2014/11/16(日) 21:08:22.97ID:myCTRLQ/0668デフォルトの名無しさん
2014/11/16(日) 21:09:13.42ID:lkRhIZkqいわゆる動的型付け言語の大半に当てはまらないか
0669デフォルトの名無しさん
2014/11/16(日) 21:10:48.50ID:dxyXFI3Oやろうと思えば細部まで指定できる
言語だろ。
0670デフォルトの名無しさん
2014/11/16(日) 21:14:44.80ID:cY/Bodh6> コンテキスト依存な振る舞いが多様すぎ
たとえば?
0671デフォルトの名無しさん
2014/11/16(日) 22:30:58.84ID:oso6sJPD俺は>>666ではないけど
文脈依存っていってるから↓こういうのじゃないの。
template<typename T>
class x {
typedef typename T::type type;//typename必要
};
void f() {
x<unko>::type i;//typename付けない
}
typenameの有無をよく間違えるんだけど、型が複雑になると
VCもgccも間違ってコンパイル通っちゃうことがあって後で困る
0672デフォルトの名無しさん
2014/11/16(日) 22:33:35.62ID:dxyXFI3O0673デフォルトの名無しさん
2014/11/16(日) 22:43:48.15ID:CXE/Z8t2コンパイラにとっての基準が明確かでなく
人間にとって複雑かどうかを議論していた筈だが。
テンプレートのT&&が左辺値参照になるとか
最初何言ってるか わからんかったわ
0674デフォルトの名無しさん
2014/11/16(日) 22:53:56.88ID:3K4iGnZzでも、そういう人ならわざわざC++なんて使うまでもないのでは?
0675デフォルトの名無しさん
2014/11/16(日) 23:08:35.79ID:lkRhIZkq「継承でメンバ関数のオーバーロードするな」とか
そういう主張だと思ってた>文脈
何にせよ
>「こういう場合はこうなる」っていうような、コンテキスト依存な振る舞いが多様すぎて
の例がほしい
でないと行き違いから無駄な口論が起きる可能性が
0676デフォルトの名無しさん
2014/11/16(日) 23:22:58.24ID:myCTRLQ/知ってる人は正しく使えるんだからC++を普通に使うだろう
0677デフォルトの名無しさん
2014/11/16(日) 23:24:29.01ID:UMGldnne人間にとって複雑かどうかを議論していた筈だが。
0678デフォルトの名無しさん
2014/11/16(日) 23:29:11.49ID:T1dR1Jiw同等の機能をもっとシンプルに実装できるんならそれに越したことはないが
0679デフォルトの名無しさん
2014/11/16(日) 23:30:11.42ID:myCTRLQ/人間の方からコンピューターに近づく必要があるだろう
その過程で人間にとっては複雑だがコンピューターにとっては理解できる状況があり
その状況を許容できるかどうかなんじゃないか
0680デフォルトの名無しさん
2014/11/16(日) 23:36:26.91ID:CXE/Z8t2例えば、クラスがある条件を満たすとデストラクタがthrow()になる
なんて仕様があって2003と2011で異なるとか?
0681デフォルトの名無しさん
2014/11/17(月) 08:32:36.71ID:gmExUzMV仕様通りに作ることさえままならないほどに難しいことは明らか
0682デフォルトの名無しさん
2014/11/17(月) 09:37:56.16ID:mUd/fe7Pまさか
int hoge;
typedef int hoge;
とか
struct _tag {
int hage;
} hoge;
typedef struct _tag {
int hage;
} hoge;
とか
int *p = &fuga;
*p = fuga;
とかね
どうみても言語仕様です
0683デフォルトの名無しさん
2014/11/17(月) 10:03:04.71ID:zVrhBdcJ0684デフォルトの名無しさん
2014/11/17(月) 10:04:42.76ID:19EKBw410685デフォルトの名無しさん
2014/11/17(月) 10:06:13.28ID:UC4i9yVVいまさら新しい言語作っても普及しなきゃな
0686デフォルトの名無しさん
2014/11/17(月) 10:08:27.43ID:zVrhBdcJ0687デフォルトの名無しさん
2014/11/17(月) 10:20:30.29ID:UGS3JGAV良い言語だよ(震え声)
0688デフォルトの名無しさん
2014/11/17(月) 11:00:39.33ID:zVrhBdcJ人気が無いのは事実
0689デフォルトの名無しさん
2014/11/17(月) 12:01:26.61ID:YO3uKPa9原理主義はclang
妥協はvc++、ruby
学術、企業排斥がjava
計算がfortran
いちもつの形で優劣語り、民主主義と専制の優劣論と同じ
アリストテレスの時代より低レベルだよ
0690デフォルトの名無しさん
2014/11/17(月) 17:40:40.50ID:9IlXlMUxint i;
for (i = 0; i < 3; i++) {}
か
for (int i = 0; i < 3; ++i) {}
0691デフォルトの名無しさん
2014/11/17(月) 17:41:54.53ID:4tgMBGll0692デフォルトの名無しさん
2014/11/17(月) 17:43:17.84ID:W6zY66U4いつの時代からタイムスリップしてきたんだおまいは
0693デフォルトの名無しさん
2014/11/17(月) 17:46:43.14ID:4tgMBGllC言語のソースコードを、コンパイラが標準ではC++とみなしてコンパイルするものがある。
オプションまたは拡張子によってC言語でコンパイルするとエラー。
0694デフォルトの名無しさん
2014/11/17(月) 17:47:47.13ID:5RaFTbYRC99ではどうやらその制限は撤廃されてるらしい
0695デフォルトの名無しさん
2014/11/17(月) 18:43:10.92ID:kTSddzTmgccでもvcでも先頭以外で使えるでしょ
どんなKUSOコンパイラ使ってるのかと
0696デフォルトの名無しさん
2014/11/17(月) 18:43:27.78ID:YO3uKPa9その質問からして、for文の右が普通と理解しておくべし
ヒント:変数のライフタイム
0697デフォルトの名無しさん
2014/11/17(月) 18:52:25.52ID:dcxHMyQi0698デフォルトの名無しさん
2014/11/17(月) 18:57:21.65ID:5RaFTbYR0699デフォルトの名無しさん
2014/11/17(月) 19:19:04.77ID:JwoO3TScint main(argc, argv)
int argc;
char **argv;
{
return 0;
}
か
int main(int argc, char **argv)
{
return 0;
}
0700デフォルトの名無しさん
2014/11/17(月) 19:21:43.32ID:2R07lXEB0701デフォルトの名無しさん
2014/11/17(月) 19:30:18.07ID:UGS3JGAV0702デフォルトの名無しさん
2014/11/17(月) 20:30:48.55ID:BlRB4zD6coutとsetwとsetfillとかの、C++の出力機構だけを使うのか、
伝統的なCのprintfを使うのか、どっちが「普通」なの?
0703デフォルトの名無しさん
2014/11/17(月) 20:39:21.64ID:wDZI4MU9質問が意味をなさない
0704デフォルトの名無しさん
2014/11/17(月) 20:46:11.35ID:oWS5dSpx私の場合、ことがタイムスタンプ付きでプリミティブな型の変数を出力したい程度なら、
strftime()で加工してC++ストリームに出力するなぁ。
規模が大きなプロジェクトだと、Cストリームを使う設計にすることが多いからそれに倣うけど。
0705デフォルトの名無しさん
2014/11/17(月) 20:54:59.75ID:BlRB4zD6Cで済むものならCの範囲内の機能を使っても特に問題ないってことですね。
参考にします。ありがとうございます。
0706デフォルトの名無しさん
2014/11/17(月) 21:03:50.15ID:oWS5dSpx混ぜるな危険。
CストリームとC++ストリームが混ざるとお互いにバッファリングするから出力がぐだぐだになる。
std::coutとstderrで使い分けるといいかも。
0707デフォルトの名無しさん
2014/11/17(月) 21:12:40.39ID:SaVb0FGbiostreamが許されるのは小学生までたよね?
0708デフォルトの名無しさん
2014/11/17(月) 21:20:58.49ID:V8HVQGu70709デフォルトの名無しさん
2014/11/17(月) 21:22:21.11ID:wGcJazVGどっちが正義ですか?
0710デフォルトの名無しさん
2014/11/17(月) 21:25:31.36ID:r/WM0zDC0711デフォルトの名無しさん
2014/11/17(月) 22:29:23.40ID:7csJSq0gどうして馬鹿は意地でもiostreamを使おうとするの?
0712デフォルトの名無しさん
2014/11/17(月) 22:39:09.25ID:hTsgrynh0713デフォルトの名無しさん
2014/11/17(月) 22:40:22.63ID:SYXJMOnDiostreamで似たような事やろうとするとめんどくさそうで敬遠してる
0714デフォルトの名無しさん
2014/11/17(月) 23:07:36.14ID:gdFZqRGjint x;
A():x(10){}
A(int x):x(x){}
void out(){ cout<< x <<endl;}
}
A a;
a.out(); //10が出力される
a=100;
a.out(); //100が出力される
このコードの
a=100; みたいな書き方って前から出来ましたっけ
0715デフォルトの名無しさん
2014/11/17(月) 23:35:30.92ID:3Sx5Cyxb0716デフォルトの名無しさん
2014/11/18(火) 00:34:50.11ID:WzDrd9gQ出来たって、いまは(C++14では)出来なくなったのか
0717デフォルトの名無しさん
2014/11/18(火) 00:39:38.49ID:c4Wts7yi0718デフォルトの名無しさん
2014/11/18(火) 20:24:39.51ID:sykrFrlo0719デフォルトの名無しさん
2014/11/18(火) 22:25:12.43ID:56ogmGVy複数のプロセスからひとつのファイルを編集するので排他処理をしたいです。
実際に使われている方法の例を教えてください。
ロックファイルの有無で書き込み可能か判断する方法はそのロックファイルも同時に開かれるのではないかと疑問です。
0720デフォルトの名無しさん
2014/11/18(火) 22:40:23.76ID:OSrGz7tV0721デフォルトの名無しさん
2014/11/18(火) 22:52:59.72ID:SgXcxZ00> ロックファイルの有無で書き込み可能か判断する方法はそのロックファイルも同時に開かれるのではないかと疑問です。
(まともなファイルシステムなら)ファイルの作成は排他制御されてて両方が成功することはない
0722デフォルトの名無しさん
2014/11/18(火) 22:53:24.09ID:/aEHbgmj0723デフォルトの名無しさん
2014/11/18(火) 23:12:34.11ID:e2sYYLsk実際に運用されてるものではどんな方法をとっているのでしょうか。
できるだけ環境依存でない方法でやりたいです。
0724デフォルトの名無しさん
2014/11/18(火) 23:13:27.02ID:OSrGz7tV0725デフォルトの名無しさん
2014/11/18(火) 23:22:00.07ID:y3qZQj9X0726デフォルトの名無しさん
2014/11/19(水) 00:01:37.87ID:AizLP6wxまあいよいよの時はオレオレライブラリの中に閉じ込めてしまえば済むと思う
0727デフォルトの名無しさん
2014/11/19(水) 00:21:25.75ID:orlH/5gthttp://fox.2ch.net/test/read.cgi/poverty/1416286592/
0728デフォルトの名無しさん
2014/11/19(水) 09:28:25.98ID:aYvM2PU2ファイルは共有モードで開き、ミューテックスで排他状態を管理、判定
単一プロセスだけが書き込むように設計変更(ライタープロセス)
書き込み要求を9に入れて処理し完了したら通知を返す
複数プロセスが別々のファイルに書き込むように設計変更
読み出しを複数ファイルに行うような読み込みの冗長化
後ろ二つは、使える場面が少ない上で複雑になるから、大体は簡単なミューテックスを使う
ミューテックスがOSにないならアセンブラを降臨させる必要が出るかも(まあ組み込みOSでも普通は持っている)
0729デフォルトの名無しさん
2014/11/19(水) 09:32:03.02ID:Uep2bTnS0730デフォルトの名無しさん
2014/11/19(水) 09:37:13.71ID:TAm49o8Y労害は無駄な妄想の駄文が続くからまさに害
0731デフォルトの名無しさん
2014/11/19(水) 13:46:36.09ID:lnFQGeQL批判しかしないからまさに害
0732デフォルトの名無しさん
2014/11/19(水) 13:58:20.60ID:XZRMe/Sn0733デフォルトの名無しさん
2014/11/19(水) 14:48:44.23ID:AqLEOsVc批判しかないからまさに害
0734デフォルトの名無しさん
2014/11/19(水) 15:02:18.08ID:JZ2oYyd9生きる希望が湧いた
ありがとう
0735デフォルトの名無しさん
2014/11/19(水) 15:20:48.91ID:aYvM2PU20736デフォルトの名無しさん
2014/11/19(水) 15:51:07.43ID:o9La4VRdけっきょく標準では無理そうですね。
ミューテックスは非対応でしたが調べてみてflockが使えそうなのでそれにします。
ありがとうございました。
0737デフォルトの名無しさん
2014/11/19(水) 18:42:02.60ID:rTt0jg+8役に立たない情報かもしれないけど一応書いとく。
SQLiteの初期の頃に、プロセス間の排他について検討したらしいんだけど、
この時色々調べるとファイルロックのメカニズムはほとんどのOS上の
ネットワークファイルシステムでバグを持っていたそうです。
それらのOSにはWindowsやほとんどのUNIXも含まれたそうです。
それでもSQLiteは排他にファイルロックを使っています。
0738デフォルトの名無しさん
2014/11/19(水) 19:18:52.40ID:jPM8lQ7K0739デフォルトの名無しさん
2014/11/19(水) 19:33:57.83ID:lJVSEwou0740デフォルトの名無しさん
2014/11/19(水) 19:51:12.13ID:I9gi/U1m0741デフォルトの名無しさん
2014/11/19(水) 19:55:01.82ID:0+0ozXC30742デフォルトの名無しさん
2014/11/19(水) 21:09:22.71ID:HgpOn/aO0743デフォルトの名無しさん
2014/11/19(水) 22:41:48.17ID:6cylO/7k俺は前者で習った
後者で書いて提出したら減点食らった
駅弁大じゃダメだねと思った瞬間
0744デフォルトの名無しさん
2014/11/19(水) 23:13:16.99ID:lnFQGeQL0745デフォルトの名無しさん
2014/11/19(水) 23:16:54.54ID:ZVUHk6wVそんな糞コンパイラ捨てろ
0746デフォルトの名無しさん
2014/11/19(水) 23:20:25.00ID:6cylO/7k0747デフォルトの名無しさん
2014/11/19(水) 23:21:08.62ID:RhGiIiwr0748デフォルトの名無しさん
2014/11/19(水) 23:26:00.46ID:ZVUHk6wVライフタイム解析くらいまともなコンパイラならするだろ
差が出るとしたら糞コンパイラ
0749デフォルトの名無しさん
2014/11/19(水) 23:32:10.15ID:RhGiIiwr0750728
2014/11/20(木) 00:00:18.90ID:FbfCAEzw0751デフォルトの名無しさん
2014/11/20(木) 00:01:26.40ID:+/B6pK/oしやすいと何が嬉しいの?
0752デフォルトの名無しさん
2014/11/20(木) 00:04:38.11ID:lJVSEwou0753デフォルトの名無しさん
2014/11/20(木) 00:08:52.85ID:3nar01e/0754デフォルトの名無しさん
2014/11/20(木) 00:10:22.32ID:FbfCAEzwこの点には、結果論は通用しない。 結果がでないならば、努力に意味が存在しないという論法は通じない。
その願望を実現できない原因を作っているのは、言語を使って実装した技術者の配慮不足、技術不足、能力不足
要件を定めた人間の配慮、設計した人間の配慮に原因があるからね。
簡単に言えば、スコープ内で有効となる変数の多さが最適化不能の原因であるから。
つまり、実装者や設計者、要件定義者の期待に最大限応えるように実装できるから嬉しいって事だよ。
長文すまん
0755デフォルトの名無しさん
2014/11/20(木) 00:17:08.20ID:+/B6pK/o0756デフォルトの名無しさん
2014/11/20(木) 00:23:23.59ID:FbfCAEzw0757デフォルトの名無しさん
2014/11/20(木) 00:27:48.12ID:iMtuPlC8コンパイラで困憊
0758デフォルトの名無しさん
2014/11/20(木) 00:39:38.38ID:MP59TUjQまとめの釣りか何かの思惑を持った釣りなんだから、もう少しと加減してやれよ(笑)
大人げなさすぎ
0759デフォルトの名無しさん
2014/11/20(木) 00:40:31.86ID:+/B6pK/oそうかな。スコープの狭さだけでレジスタに割り当てるべきかどうか決めていいという判断も才能ないよ
0760デフォルトの名無しさん
2014/11/20(木) 01:00:30.07ID:IYQ0XwaG0761デフォルトの名無しさん
2014/11/20(木) 05:57:45.82ID:aPNBJfLJfor文に書くとコンパイラによって変数のスコープが違うから気をつけろ
0762デフォルトの名無しさん
2014/11/20(木) 06:32:05.36ID:Pm9nmJfNんなこたあ、ありえない。
0763デフォルトの名無しさん
2014/11/20(木) 07:07:10.01ID:aPNBJfLJHPだと違うよ
0764デフォルトの名無しさん
2014/11/20(木) 07:10:37.55ID:aPNBJfLJ0765デフォルトの名無しさん
2014/11/20(木) 07:16:27.97ID:TrsJQyqJVC++6は違った
まぁ、そんな規格違反の化石みたいなコンパイラを未だに使う特殊な所なんて考慮する必要無いと思うけど
0766デフォルトの名無しさん
2014/11/20(木) 07:30:09.37ID:7GcQ+ika0767デフォルトの名無しさん
2014/11/20(木) 07:40:37.65ID:Jys9W+Tp説明できないだけだろ
長文のわりに中身ないし w
>>762
http://msdn.microsoft.com/ja-jp/library/84wcsx8x.aspx
0768デフォルトの名無しさん
2014/11/20(木) 07:47:03.35ID:s9FNVDVg当時のGCC信者のストレスのはけ口でした
0769デフォルトの名無しさん
2014/11/20(木) 08:12:06.27ID:MP59TUjQやっぱり宗教と同じだったgnu
0770デフォルトの名無しさん
2014/11/20(木) 11:29:21.42ID:LdyOscpn思い切って言えば、規格の方がおかしいと思うことが多い。
MSが拡張した製品を出す→規格に取り込む。
こういう流れで、規格に取り込むときに互換性を無くすんだろうけど、
余計なことをせずにそのまま取り込んだほうが合理的だと思う。
もともと製品として出せるレベルの合理性が確認されているわけだし、
その時点のユーザーの100%がMS式を使ってるわけだし。
わざわざ互換性を失わせる方式で、しかも互換性を失わせるためだけに
不合理な方法を選ぶ。
こういうのは、規格の方に文句言ったほうが良いよ。
とくにHTML。
0771デフォルトの名無しさん
2014/11/20(木) 11:35:22.48ID:LdyOscpn逆のことが言いたかった。
ネットワークが関係なければ、ファイルロックはうまく機能するとSQLiteでは
判断されている。
>>740
まあそういう面もあるのかも、意識はしてないけど。
0772デフォルトの名無しさん
2014/11/20(木) 11:53:30.91ID:0P/OJcH8>もともと製品として出せるレベルの合理性が確認されているわけだし、
>その時点のユーザーの100%がMS式を使ってる
MSユーザーの100%がMS式を使ってるのは当たり前。
MSだけでものを考えないでほしい。
GCCの仕様をC99に取り込む→VC対応せず
VCのセキュリティ関数をC11に取り込む→GCC対応せず
特定製品の仕様を(自分の合理性を理由に)そのまま取り込むと
こうやって統一が崩れて、結果互いに不利益を被るんだよ。
0773デフォルトの名無しさん
2014/11/20(木) 14:04:37.26ID:uBJa9BCk0774デフォルトの名無しさん
2014/11/20(木) 15:37:43.36ID:SmJh4MHHUnicode規格を読んでなくてencoding formとencoding schemeの
区別がついていない人ほどBOMの文句を言う
その前にBOMはMSが考えたものじゃないだろう
0775デフォルトの名無しさん
2014/11/20(木) 16:05:46.92ID:uBJa9BCk0776デフォルトの名無しさん
2014/11/20(木) 17:06:18.44ID:vDq2Fi8gコード
#include <iostream>
#include <string>
int main()
{
int n;
std::string text;
std::cin >> text;
std::cout << text << std::endl;
return 0;
}
で、intの数字を指定回数にしたいんだけど、どうしたらいいだろう
0777デフォルトの名無しさん
2014/11/20(木) 17:08:35.31ID:7mTde6YP0778デフォルトの名無しさん
2014/11/20(木) 17:22:41.60ID:NeVUFuiv0779デフォルトの名無しさん
2014/11/20(木) 19:16:30.04ID:SvNYG/UjMSというかVC++のUTF-8でBOMが必須とされてるってことが問題なんだよな
0780デフォルトの名無しさん
2014/11/20(木) 19:17:49.80ID:SvNYG/Uj0781デフォルトの名無しさん
2014/11/20(木) 22:44:25.64ID:bga69PqZconst unsigned char* dest = new unsigned char[i];
memcpy_s((void*)dest, i, src, i);
という処理で、srcが100文字より短くて、例えば
unsigned char src[] = "適当な文字列";
でもmemcpy_s()はエラーしませんか?
0782デフォルトの名無しさん
2014/11/20(木) 22:59:56.49ID:TrsJQyqJしませんが、
そもそもconst付けるべきではないし、自分の対応出来る範囲外でconstが付けられてるのであれば、やるべきではありません。
0783デフォルトの名無しさん
2014/11/20(木) 23:11:04.53ID:bga69PqZレスありがとうございました。
>そもそもconst付けるべきではないし
const unsigned char* dest = new unsigned char[i];
の部分でしょうか?
もしそうなら、何故const を付けるべきではないのでしょうか?
良く分らないので、解説お願いいたします。
0784デフォルトの名無しさん
2014/11/20(木) 23:14:33.58ID:YC7+DKYP0785デフォルトの名無しさん
2014/11/20(木) 23:16:10.61ID:TrsJQyqJ逆になぜ付けたのか?
それを考えないと進歩しないよ
0786デフォルトの名無しさん
2014/11/20(木) 23:19:24.53ID:E8T6u/jH許されるのはtemplateが使えない為にtemplate的な処理をしたいって時くらい、
mallocとか、qsortとか
0787デフォルトの名無しさん
2014/11/20(木) 23:38:21.76ID:Qdw9eGqa0788デフォルトの名無しさん
2014/11/20(木) 23:39:19.91ID:bga69PqZ>>785
このconstはアドレスがconstで、中身はconstでないからmemcpy_sで書き換えても問題ないとおもったのですが。
ちがいますか?
それにvisual studio 2013のc++で問題なく実行できたので、この解釈で良いと思ったのですが。
0789デフォルトの名無しさん
2014/11/20(木) 23:45:31.10ID:YC7+DKYPこうゆうキャストはバグの元だからやめた方がいい
0790デフォルトの名無しさん
2014/11/20(木) 23:49:30.22ID:bga69PqZレスありがとうございます。
(void*)を取ると、
visual studio 2013のc++で
IntelliSense: 型 "const unsigned char *" の引数は型 "void *" のパラメーターと互換性がありません
というエラーが出たので、付けました。
0791デフォルトの名無しさん
2014/11/20(木) 23:51:37.32ID:TrsJQyqJ違う
const char*は(char const*も同じ)
const charのアドレス
つまりアドレスの先のデータが不変
アドレスだけ変更せずにデータは可変であればchar のアドレスを不変 、
char * const と書く
0792デフォルトの名無しさん
2014/11/20(木) 23:52:18.46ID:YC7+DKYPを消して
const unsigned char *
を
unsigned char *
にしてみろ
0793デフォルトの名無しさん
2014/11/20(木) 23:54:32.52ID:wb16m4+gんなこたーない
非constにキャストするのがいけないのであって
中身を書き換えるものをconstにすることは何ら問題ない
0794デフォルトの名無しさん
2014/11/21(金) 00:04:32.30ID:3E36WIhF教科書みたいな間違えだなw
0795デフォルトの名無しさん
2014/11/21(金) 00:07:17.75ID:ld0A0Iic>reinterpret_castなキャストは悪よ、
許されるのはtemplateが使えない為にtemplate的な処理をしたいって時くらい、
>mallocとか、qsortとか
は?
mallocにreinterpret_castなど必要ないし
qsortの比較関数をreinterpret_castしたら未定義動作だぞ
0796デフォルトの名無しさん
2014/11/21(金) 00:18:10.19ID:zGskniPq解説ありがとうございました。
私が、勘違いしていました。
>>792
確かに、
unsigned char *
にしたら、
(void*)無くても行けました。
この数日、このあたりが良く分らなくて混乱していたのですが、ようやく理解できました。
みなさんありがとうございました。
ちなみに、
unsigned char *const dest = new unsigned char[i];
と書いてもいいんですよね?
0797デフォルトの名無しさん
2014/11/21(金) 00:25:40.51ID:XqCFqcOoいいよー
そう書いてもキャストせずにコンパイル通るでしょ。
明示的にキャストしなければコンパイルエラーになるような物に遭遇したらまず疑おう
0798デフォルトの名無しさん
2014/11/21(金) 01:36:11.80ID:PVkCBhk2本来聞きたかった事がぶっとんだようだが
memcpy_s(dest, i, src, i);
はdest, srcの中身に関係なくiバイト分コピーするので
> という処理で、srcが100文字より短くて、例えば
> unsigned char src[] = "適当な文字列";
> でもmemcpy_s()はエラーしませんか?
みたいなときはmemcpy_sのエラーにはならないがsrcの範囲外アクセスで未定義動作になる
0799デフォルトの名無しさん
2014/11/21(金) 01:49:01.16ID:zGskniPqああ、そうでした。
聞きたかったのはそっちです。
>srcの範囲外アクセスで未定義動作になる
srcのデータとその後ろに続いている何らかのデータが合計100文字コピーされるという保証は無いですか?
保証でなくても、実際はそう言う動作をするかどうか知りたいです。
0800デフォルトの名無しさん
2014/11/21(金) 02:14:02.43ID:XqCFqcOoそういう動作をするときもあるしメモリアクセスエラーでクラッシュすることもある。
0801デフォルトの名無しさん
2014/11/21(金) 02:18:51.80ID:zGskniPqメモリアクセスエラーが起きるのは
どんな時ですか?
src領域の後ろにアクセスできないメモリ領域が有るということですよね。
0802デフォルトの名無しさん
2014/11/21(金) 02:24:39.48ID:99Z7byug0803デフォルトの名無しさん
2014/11/21(金) 03:08:14.12ID:zGskniPq>むしろメモリ領域がない場合は?
それは、srcがメモリの末尾の0xFFFFFFFFあたりに
確保された場合でしょうか?
ところで32bitプログラムなら
0x00000000
から
0xFFFFFFFF
までの範囲であれば、どこでも読み出すことは可能なのでしょうか?
memcpyなどの関数で。
0804デフォルトの名無しさん
2014/11/21(金) 03:35:15.74ID:XqCFqcOoいいえ。
Access violation〜 read of address〜
ってエラー見たことないか?
簡単に発生させれるから試してみたらいい
for(uintptr_t p=0;;p++){std::cout<<*reinterpret_cast<int*>(p);}
って感じで。
0805デフォルトの名無しさん
2014/11/21(金) 03:44:09.77ID:zGskniPqレスありがとうございました。
確かにアクセスバイオレーション出ました。
質問なのですが、
0x00000000
から
0xFFFFFFFF
の範囲で、アクセスしても良い領域、出来ない領域が、
OSやコンパイラなどに応じて決まっているのでしょうか?
それとも、mallocやnewや変数宣言などでユーザーが確保
した領域のみアクセス可能なのでしょうか?
0806デフォルトの名無しさん
2014/11/21(金) 03:48:55.16ID:5L3ce8w20807デフォルトの名無しさん
2014/11/21(金) 03:51:02.70ID:zGskniPq何故ですか?
書くんじゃなくて、読むだけならいいじゃないですか?
0808デフォルトの名無しさん
2014/11/21(金) 03:55:58.16ID:XqCFqcOo意味のない値を読んで嬉しいか?
0809デフォルトの名無しさん
2014/11/21(金) 03:58:02.58ID:zGskniPqいや別に嬉しい嬉しくないというような個人の感想の問題では無くて、
読みだして誰か困るんでしょうか?
読み出せないようになっている理由を知りたいです。
0810デフォルトの名無しさん
2014/11/21(金) 03:59:49.20ID:+Z/9Kx3Z0811デフォルトの名無しさん
2014/11/21(金) 04:01:58.86ID:zGskniPqなるほど。
それはOSがそういう機能を持っているということですか?
実行したアプリが未割当領域を呼び出した時点でそれを
検出して実行を停止させるというような機能を。
それなら納得できます。
0812デフォルトの名無しさん
2014/11/21(金) 04:04:36.63ID:XqCFqcOoMMUでググれ
0813デフォルトの名無しさん
2014/11/21(金) 04:06:15.60ID:XqCFqcOo0814デフォルトの名無しさん
2014/11/21(金) 04:08:51.89ID:zGskniPqMMUは、OSがメモリを管理する時に使われるようなしくみ
ということは、なんとなく知っていますが、
今は、アプリが自分自身のアドレス空間をアクセスしたいわけですから、
その場合もMMUが、未割当領域いか否かをチェックして、
管理しているんでしょうか?
0815デフォルトの名無しさん
2014/11/21(金) 04:21:19.09ID:+Z/9Kx3Z0816デフォルトの名無しさん
2014/11/21(金) 05:14:58.64ID:kxkPWKPJ通常は32bitプロセスの場合は0x7fffffffまで、LAAフラグがセットされていれば0xcfffffffまでアクセスできる
それぞれ2GB、3GBだ
64bitプロセスの場合はOSによって異なるけどずっと広い
OSが常駐する物理メモリ領域を空けておかないといちいち仮想記憶が働くとスラッシングがひどくて使い物に
ならなくなるからだ
メモリマップトI/O領域は同じ論理アドレスでも異なる物理アドレスを指しているから問題ない
0817デフォルトの名無しさん
2014/11/21(金) 07:30:05.11ID:hRQqxbacWindowsの場合、アドレスが4KiBごとに分割され
それぞれ物理メモリのどこかに対応づけられていたり
スワップ領域のどこかに対応付けられている。
これは使用する領域だけで大部分は対応先の無いアドレスになる。
なので未割り当てのアドレスにアクセスすると落ちる。
正確にはCPUが発生させるイベントをWindowsが拾ってプロセスを落とす。
管理はオペレーティングシステムが行う
0818デフォルトの名無しさん
2014/11/21(金) 08:00:57.25ID:R5E6cwETなんか違和感あるbit列だが
そういうもんなんだっけ?
0819デフォルトの名無しさん
2014/11/21(金) 08:09:55.07ID:zGskniPqmallocやnewや変数、定数などで確保した領域は実メモリに実体が確保されるということでしょうか。
私はてっきり
0x00000000〜0xFFFFFFFF
までのどのアドレスでも、読み出せば初期化されていない値が入っていると思ったのですが、
そうではないんですね。
なんとなく分ってきました。
0820デフォルトの名無しさん
2014/11/21(金) 08:20:17.03ID:iFQePu0Oでも、まぁいいか。
0821デフォルトの名無しさん
2014/11/21(金) 09:10:33.76ID:FWzVUasR環境による
というか、仮想記憶まわりを習得してからくるといい
0822デフォルトの名無しさん
2014/11/21(金) 12:43:57.53ID:S1MzF4aW1. メモリー空間に I/O デバイスがあるようなマシンでは、勝手に読み出されるとデバイスの状態が変わってしまうものもあるので、読んではいけない
2. メモリーやデバイスがない空間にアクセスするとメモリー等からの応答がなくハングアップするため、タイムアウトでエラーにするマシンもある
3. 管理していない領域にアクセスするようなプログラムはどうせ間違っているので早めに知らせる親切機能
>>818
0xbfffffff のことと思うけど、色々おかしいからそのレスはスルーでいい
0823デフォルトの名無しさん
2014/11/21(金) 20:07:28.62ID:zGskniPqかなり分って来たつもりなんですが、819の内容で、
どのあたりが分っていないように見えますか?
>>821
仮想記憶まわりは、だいたい分っているつもりです。
>>822
>1. メモリー空間に I/O デバイスがあるようなマシンでは、勝手に読み出されるとデバイスの状態が変わってしまうものもあるので、読んではいけない
>2. メモリーやデバイスがない空間にアクセスするとメモリー等からの応答がなくハングアップするため、タイムアウトでエラーにするマシンもある
上の1,2は一般的には正しいと思うのですがWindows7ではそんな心配は無いですよね?
>3. 管理していない領域にアクセスするようなプログラムはどうせ間違っているので早めに知らせる親切機能
そういう機能がWindows7にあるということで良いでしょうか?
0824デフォルトの名無しさん
2014/11/21(金) 21:16:18.12ID:S1MzF4aW> 上の1,2は一般的には正しいと思うのですがWindows7ではそんな心配は無いですよね?
ユーザープログラムなら普通は心配しなくていい
デバイスドライバとか作る人だと気にする必要があるケースもある
> そういう機能がWindows7にあるということで良いでしょうか?
そう言うこと
仮想記憶をサポートする OS は大抵その機能を持っている
0825デフォルトの名無しさん
2014/11/21(金) 21:24:56.12ID:mR7VdkCXなお、アプリケーション=win32サブシステムのアプリケーションな
0826デフォルトの名無しさん
2014/11/22(土) 06:23:30.95ID:18N8Upow>どのあたりが分っていないように見えますか?
newしたときに確保されるのは実メモリでなく仮想メモリだ。
仮想メモリにアクセスした際に実メモリへの割り当てが透過的に行われるけど
断じて「new=物理メモリ確保」ではない。
その証拠に搭載メモリより多くのメモリをnewする事が出来る
0827デフォルトの名無しさん
2014/11/22(土) 07:49:03.54ID:tLc6zRT60828デフォルトの名無しさん
2014/11/22(土) 11:10:14.61ID:rrzuQBQtゆニックスもライナックスもリンゴも同じ
親切機能って表現に大きなお世話という意味合いを感じるが、
プロセッサのメモリプロテクション機能は、原因箇所特定に寄与する有難いものだ
ところで、自分のプロセスの仮想記憶じゃなく、他プロセスのメメントモリを読み書きしたいんじゃないの?
0829デフォルトの名無しさん
2014/11/22(土) 20:38:43.75ID:lo0ztgzP0830デフォルトの名無しさん
2014/11/23(日) 02:16:01.41ID:MIt+PTOIhttp://msdn.microsoft.com/ja-jp/library/ms229713%28v=vs.110%29.aspx
0831デフォルトの名無しさん
2014/11/23(日) 04:51:47.94ID:wESAxUXt0832デフォルトの名無しさん
2014/11/23(日) 05:15:33.10ID:Da0DiwLcスレッド 0xc54 はコード 0 (0x0) で終了しました。
スレッド 0x1efc はコード 0 (0x0) で終了しました。
スレッド 0x1c64 はコード 0 (0x0) で終了しました。
みたいなのが、勝手に出力ウインドウに出るんですが、私のプログラムでは
サブスレッドを実行していないのですが、何でこういうメッセージがでるのでしょうか?
0833デフォルトの名無しさん
2014/11/23(日) 05:34:48.34ID:gLhfEvRo0834デフォルトの名無しさん
2014/11/23(日) 08:03:43.87ID:D8Ghfy88新・明解C言語 入門編 大型本 ? 2014/8/11
柴田 望洋 (著)
http://www.amazon.co.jp/dp/479737702X
演習問題の解答が書籍の中には書いてないので誰かつくって!
旧版のは誰かがサイト作ってくれたんだけど、新版のはない
まぁ大体わかるんだけど、お手本あると勉強になるな〜・・と
0835デフォルトの名無しさん
2014/11/23(日) 08:19:25.97ID:5M0zvydY初心者じゃない人がそんな新しい入門書なんて持ってるわけないじゃん
0836デフォルトの名無しさん
2014/11/23(日) 08:38:26.65ID:D8Ghfy88この程度のはした金、どぶに捨てるがごとく払えるはずだよ
むしろもうお金をはらっているという感覚がない程度
すごすぎ!
0837デフォルトの名無しさん
2014/11/23(日) 09:15:34.52ID:fFcgGO6W荒らしは失せろ クズ
0838デフォルトの名無しさん
2014/11/23(日) 10:55:26.91ID:fVyePvWVわかんないの宿題スレで質問してあんたがまとめれば
0839デフォルトの名無しさん
2014/11/23(日) 10:59:51.23ID:K4bM7kRY宿題スレに投げればいい
0840デフォルトの名無しさん
2014/11/23(日) 13:23:18.15ID:1B0EBCFb右辺値参照と移動セマンティクスに関する質問です
Class class::makeInstance_A(){
Class instance();
return instance;
}
Class class::makeInstance_B(){
Class instance();
return std::move(instance);
}
Class rInstance = class::makeInstance_A/B();
というコードがあるとして、Aの場合、rInstanceにはinstanceをコピー、
つまり異なるメモリ領域が確保され、instanceの領域は破棄。
Bの場合、rInstanceにはinstanceがムーブ、
つまりメモリ領域は同一でポインタの所有権のみが移動する。
という認識で合っていますか?
0841KUSO KOTE ◆unko./w.Osri
2014/11/23(日) 13:34:56.32ID:tffEMZrqやや違います。
ローカルの変数には特別なルールがあって移動になります。
Class g_unko;
Class class::makeInstance_A(){
return g_unko;//コピー
Class instance();
return instance; //ムーヴ★12.8p32
Class instance2();
return std::move(instance2); //ムーヴ
}
ついでにさらに特別なルールがあって、二つ目と三つ目は
ムーブもコピーも省略されることがあります。(12.8p31)
0842KUSO KOTE ◆unko./w.Osri
2014/11/23(日) 13:53:15.49ID:tffEMZrq[関数<ローカル>]→(copy/move)→<テンポラリ>→(copy/move)→<rInstance>
の流れに於いて、
AもBも>>841の通り
[関数<ローカル>]→(move)→<チンポラリ>→(move)→<rInstance>
となります。
オブジェクトは別なのでアドレスは変わりますが
内部で持っているであろう大きな実データは所有権の移動になります。
補足として、オブジェクトの生成自体を省略する機能があり
AやBは
[関数<ローカル>]→(move)→<rInstance>
とすることが1998および2003年規格でゆるされており
Aに限ってはさらに
[関数<rInstanceに直接構築>]→(何もなし)→<rInstance>
と省略することが2011年規格で許されています。
0843デフォルトの名無しさん
2014/11/23(日) 14:06:19.03ID:YQdbMQXkNRVOはISO/IEC 14882:1998からだ
(12.8 Copying class objects段落15)
0844デフォルトの名無しさん
2014/11/23(日) 14:24:20.89ID:Da0DiwLctrue/false/undefinedみたいな3つの値を保持できる型は
ないのでしょうか?enum使うしか無いですか?
0845デフォルトの名無しさん
2014/11/23(日) 14:26:35.19ID:fTQ9KYulC++ならenum class
0846デフォルトの名無しさん
2014/11/23(日) 14:32:24.60ID:Da0DiwLcレスありがとうございます。
ちなみに、どういう名前が良いでしょうか?
お勧めが有りましたら教えて下さい。
bool3 なんておかしいでしょうか?
0847デフォルトの名無しさん
2014/11/23(日) 14:50:09.41ID:1Nfd05K/triad だったかな
enumで、equal(0)、little(-1)、greater(1)を定義して昔使ってた
1のスペルが長いから使わなくなったけど
0848デフォルトの名無しさん
2014/11/23(日) 14:59:59.02ID:1Nfd05K/条件分岐のifで三分岐が書けないから、使いづらいよ
毎回switch使うとdefaultを書くはめになるから面倒臭い。
それでも今改めて検討するなら、positive negative agreeかな
0849デフォルトの名無しさん
2014/11/23(日) 15:04:52.26ID:gdfAswf60850デフォルトの名無しさん
2014/11/23(日) 15:20:55.05ID:Da0DiwLc>条件分岐のifで三分岐が書けないから、使いづらいよ
どういう意味ですか?
if(b==positive)
else if(b==negative)
else if(b==agree)
else
とすればいいのではないですか?
ところで、agreeってどういう意味ですか?
>>849
レスありがとうございます。
>enum nullable_bool一択だろ
うーん、せっかくのアドバイスにケチ付けて申し訳ないですが、
ちょっと名前が長いなあと思います。出来ればもう少し短めでお願いします。
0851デフォルトの名無しさん
2014/11/23(日) 15:24:24.13ID:JoMNOld10852デフォルトの名無しさん
2014/11/23(日) 15:37:48.05ID:Utfzjpb0変なテクニックはコードも変になりがち
0853デフォルトの名無しさん
2014/11/23(日) 16:01:14.92ID:oZ3ksEmxtriなのにboolとか意味不明だし
欠損状態とtrue/falseは対等じゃない。
目的でなく実装で名前を付けてしまった悪い例
0854デフォルトの名無しさん
2014/11/23(日) 16:11:48.33ID:Utfzjpb0未初期化部分とか、最小値取る時に初期値をint.Maxにしてお茶を濁してる部分とか
0855デフォルトの名無しさん
2014/11/23(日) 16:45:33.95ID:65N6pjsH0856デフォルトの名無しさん
2014/11/23(日) 16:49:23.08ID:65N6pjsHC# だと bool? が使えて結構便利
0857デフォルトの名無しさん
2014/11/23(日) 17:11:44.48ID:5M0zvydYtriなboolがどこに出てくるん?
んー、そういうときは int.max ではなくて、データの1番目をいれるものだろう?
0859デフォルトの名無しさん
2014/11/23(日) 17:22:10.96ID:Da0DiwLcそれだとundefinedにならないですよね?
0860デフォルトの名無しさん
2014/11/23(日) 17:24:10.93ID:5M0zvydY0861デフォルトの名無しさん
2014/11/23(日) 17:41:09.44ID:wsMb6fv60862デフォルトの名無しさん
2014/11/23(日) 18:33:54.34ID:pl8PYAOzhttp://en.m.wikipedia.org/wiki/Three-state_logic
0863デフォルトの名無しさん
2014/11/23(日) 19:09:16.93ID:5M0zvydYだからどこにboolが出てくるんだよ
日本語わからないの?
0864デフォルトの名無しさん
2014/11/23(日) 19:12:35.00ID:Da0DiwLc0865デフォルトの名無しさん
2014/11/23(日) 19:52:42.16ID:pl8PYAOz中身読んだか?
読んでまだそんなこと言ってるなら、君には多分技術者としての素養がないよ。
0866デフォルトの名無しさん
2014/11/23(日) 19:55:34.90ID:fEdSPzxK>>865は設計はおろか、人とのコミュニケーションも難しいことだろう
0867デフォルトの名無しさん
2014/11/23(日) 20:26:23.70ID:pl8PYAOztrue = Logic 1, false = Logic 0, undefined = Z (High Impedance) の対応もつけられないアホ w
0868デフォルトの名無しさん
2014/11/23(日) 20:31:54.35ID:5M0zvydYtriboolって命名がダメって言ってる所にそれにかすってすらいない例を持ってきて人をアホ呼ばわりするアホ
0869デフォルトの名無しさん
2014/11/23(日) 20:41:42.10ID:pl8PYAOz表面しか見れないアホは要らんよ w
0870デフォルトの名無しさん
2014/11/23(日) 22:49:33.48ID:QHZ/jO6T0871デフォルトの名無しさん
2014/11/23(日) 22:55:35.63ID:x3sx5vaMtriboolでもなんでもいいけど、個人的には3値とるならenum使えと思うよ
解りづらいしな
一生メンテする気がないなら他人がぱっと見でわかるコードにしておくのが無難
0872デフォルトの名無しさん
2014/11/23(日) 23:11:00.89ID:1B0EBCFb遅レスすみません、ありがとうございます
コンパイラはかなり賢いんですね
0873デフォルトの名無しさん
2014/11/24(月) 00:10:46.55ID:G/tZ4hCG0874デフォルトの名無しさん
2014/11/24(月) 00:16:40.01ID:I0DBtIu0後学のために詳しく教えてほしい
0875デフォルトの名無しさん
2014/11/24(月) 00:16:57.90ID:ALHBj7yp酸性、アルカリ性、中性、両性のメタファーとして4値の真偽なんていかがでしょう
0876デフォルトの名無しさん
2014/11/24(月) 00:25:01.30ID:buByWekPそれなら、!演算子の結果に悩むなw
0877デフォルトの名無しさん
2014/11/24(月) 00:31:06.24ID:y8DryCQN0878デフォルトの名無しさん
2014/11/24(月) 00:32:48.39ID:jBEYKG9y0879デフォルトの名無しさん
2014/11/24(月) 00:32:59.83ID:VgrvAE4cbool型が有ったとして、その構造体に完全にデータを代入するまでは
bool型メンバーの値も未定なので、そういう場合にundefinedみたいな
状態があればいいと思うんですが、皆さんそんなことないですか?
0880デフォルトの名無しさん
2014/11/24(月) 00:43:52.75ID:G/tZ4hCGいいや、ブール代数は多値だよ。実質2^n値だけど
0881デフォルトの名無しさん
2014/11/24(月) 01:03:31.94ID:ALHBj7yp>>844
0882デフォルトの名無しさん
2014/11/24(月) 01:04:41.19ID:ALHBj7yp0883デフォルトの名無しさん
2014/11/24(月) 01:23:16.88ID:VgrvAE4cC#のbool?をC++で使うにはどうすればよいでしょうか?
0884デフォルトの名無しさん
2014/11/24(月) 01:26:49.71ID:y8DryCQNboost.optional
0885デフォルトの名無しさん
2014/11/24(月) 01:26:59.45ID:t3vESlZp0886デフォルトの名無しさん
2014/11/24(月) 03:30:49.42ID:eOmEBZPcH/L/Hi-Z
の
tristate
が
しっくりくる
0887デフォルトの名無しさん
2014/11/24(月) 08:11:59.50ID:/Xnwup+Zまだ言ってるのか、理解力がないってかわいそうだな w
0888デフォルトの名無しさん
2014/11/24(月) 08:21:36.74ID:WTWvjjrT>目的でなく実装で名前を付けてしまった悪い例
↓
>tristate
>が
>しっくりくる
そうか、ならしゃーない。
かわいそうに
0889デフォルトの名無しさん
2014/11/24(月) 08:56:23.58ID:/Xnwup+Z> >tristate
> >が
> >しっくりくる
誰もそんなこと書いてないけど?
悪い電波でも受信したかな w
0890デフォルトの名無しさん
2014/11/24(月) 09:23:19.32ID:UcDfBJd5で二値論理を作ったGeorge Booleの
ことでしょう?
Booleがboolになるのはどうしてですか
0891デフォルトの名無しさん
2014/11/24(月) 09:34:10.88ID:G/tZ4hCGBooleが形容詞的になったのがbooleanで、その省略形がbool
integerからintみたいなもん
0892デフォルトの名無しさん
2014/11/24(月) 10:02:00.54ID:O1Ntu5SUグーグルに頼り、考えない人間は魑魅魍魎、死霊と同じだね(はあと)
などとは思っていない
思い付いただけ
0893デフォルトの名無しさん
2014/11/24(月) 10:04:34.46ID:gIu/y3Pi0894デフォルトの名無しさん
2014/11/24(月) 14:38:53.74ID:/I9QN6kR0895デフォルトの名無しさん
2014/11/24(月) 18:30:37.50ID:VgrvAE4cclass A{
public:
// B b; //(1) error C2079: 'A::b' が 未定義の class 'B' で使用しています。
B *pb; //(2) OK
};
class B{
public:
A a;
};
void main(){
B b;
}
典型的な循環参照だと思うのですが、(1)でビルドすることは絶対に不可能でしょうか?
VS2013C++です。
0896デフォルトの名無しさん
2014/11/24(月) 18:47:29.38ID:eOmEBZPcclass B;
class A{
public:
B b;
B *pb;
};
class B{
public:
A a;
};
void main(){
B b;
}
0897デフォルトの名無しさん
2014/11/24(月) 18:51:38.30ID:VgrvAE4cレスありがとうございます。さっそく試したのですが、
VS2013C++では、
error C2079: 'A::b' が 未定義の class 'B' で使用しています。
となります。
0898デフォルトの名無しさん
2014/11/24(月) 18:54:51.55ID:t3vESlZpポインタで持ちなさい
0899デフォルトの名無しさん
2014/11/24(月) 19:06:15.00ID:VgrvAE4cそうですか。不可能の理由はサイズが決められないからですよね?
でも、たとえばClassBのサイズを100バイトくらいと仮定して
ClassAを作ってみて、それで余ればBのサイズを少し減らして
調整すれば、原理的にはA、Bを最適なサイズに確保できると思うんですが、
間違っていますか?
コンパイラはそんな事しないんでしょうか?
0900デフォルトの名無しさん
2014/11/24(月) 19:10:38.87ID:t3vESlZp分かってるのか?
0901デフォルトの名無しさん
2014/11/24(月) 19:16:51.59ID:2ztRFgH6b.a.bは別のインスタンスになるぞ
本当にそんなことがしたいのか
0902デフォルトの名無しさん
2014/11/24(月) 19:21:08.49ID:VgrvAE4cああ、そういうことですか
長年の疑問が解消しました。ありがとうございました。
ポインタにします。
0903デフォルトの名無しさん
2014/11/24(月) 19:33:30.62ID:NFvfX/bb絶対お前c#やらjavaから入っただろ
0904デフォルトの名無しさん
2014/11/24(月) 20:34:31.39ID:VgrvAE4cBasicです。
もう一つ教えて下さい。
class A{
public:
int i;
};
class B{
public:
A *pa;
};
A funcA(){
A a;
a.i = 100;
return a;
}
B funcB(){
B b;
b.pa = &funcA(); // これは問題ないですか?
return b;
}
void main(){
B b = funcB();
printf("i=%d\n", b.pa->i);
}
VS2013C++で実行したら100と表示されるのですが、この
プログラムに何か問題ありますか?
特に &funcA()の部分が自分でも良く分りません。適当に&を付けたら
実行できたのですが、問題無いですか?
0905デフォルトの名無しさん
2014/11/24(月) 20:41:15.67ID:rmxUU+lCそのオブジェクトはfuncBを抜けた時点で消滅してるから問題あり
0906デフォルトの名無しさん
2014/11/24(月) 20:42:02.01ID:t3vESlZp0907デフォルトの名無しさん
2014/11/24(月) 20:46:42.95ID:VgrvAE4c>そのオブジェクトはfuncBを抜けた時点で消滅してるから問題あり
やっぱり、そうですねよ。
>>906
funcBの中でnew Aして、そこにfuncA()の中身を代入するべきですよね。
それ以外に、スマートな書き方ありますか?
0908デフォルトの名無しさん
2014/11/24(月) 21:02:01.20ID:dftsfJT8生ポを使うな。
素人はスマポを徹底しろ。
0909デフォルトの名無しさん
2014/11/24(月) 21:07:59.02ID:VgrvAE4cアドバイス有難うございます。
私は生ポのほうが好きで、スマポというのは使ったことが有りません。
素人では有りません。馬鹿にしないでください。
0910デフォルトの名無しさん
2014/11/24(月) 21:10:25.81ID:2ztRFgH6適当に&つけたら動いたとかアホなこと言ってる時点でもな
0911デフォルトの名無しさん
2014/11/24(月) 21:13:09.93ID:eOmEBZPcclass B;
class A{
B &rb;
B *pb;
public:
A() : rb(){}
};
class B{
A &a;
public:
B() : a(){}
};
int main(int ac, char **av)
{
B b;
return 0;
}
0912デフォルトの名無しさん
2014/11/24(月) 21:20:34.82ID:TkA4SUlHテスト
0913デフォルトの名無しさん
2014/11/24(月) 21:21:32.17ID:t3vESlZp参照に参照先が設定されてないからコンパイルエラーになります
0914デフォルトの名無しさん
2014/11/24(月) 21:21:41.92ID:VgrvAE4c素人ではありません。ちょっとした勘違いです。
>>911
サンプルありがとうございました。VS2013C++では、
IntelliSense: 参照の既定の初期化は使用できません
IntelliSense: 参照の既定の初期化は使用できません
error C2440: '初期化中' : 'int' から 'B &' に変換できません。
error C2440: '初期化中' : 'int' から 'A &' に変換できません。
error C2439: 'B::a' : 指定されたメンバーは初期化できません。
error C2439: 'A::rb' : 指定されたメンバーは初期化できません。
残念ながらビルド出来ませんでした。
0915デフォルトの名無しさん
2014/11/24(月) 21:22:42.60ID:eOmEBZPcclass A;
class B;
class A{
B &rb;
B *pb;
public:
A(B &b) : rb(b){}
};
class B{
A &ra;
public:
B(A &a) : ra(a){}
};
int main(int ac, char **av)
{
A a(b);
B b(a);
return 0;
}
0916デフォルトの名無しさん
2014/11/24(月) 21:24:54.95ID:t3vESlZp>A a(b);
bはどのインスタンスだよ
0917デフォルトの名無しさん
2014/11/24(月) 21:28:15.50ID:ALHBj7ypバカではありません、マヌケです
0918デフォルトの名無しさん
2014/11/24(月) 21:31:27.67ID:VgrvAE4cサンプルありがとうございました。
残念ながら、
error C2065: 'b' : 定義されていない識別子です。
となり、ビルドできません。
0919デフォルトの名無しさん
2014/11/24(月) 21:36:57.08ID:7nGMfz2S今の理解だとスマポ使っても所有者以外にナマポで渡して、そちらでもスマポ作ってとか
ヤバイことしそう。
オブジェクト指向の概念を十分に理解した上で、unique_ptr,shared_ptr,weak_ptrの仕様と用法をなぜそうなっているのか理解できるまで、クラス設計は後回しにした方が身のため。
0920デフォルトの名無しさん
2014/11/24(月) 21:37:58.70ID:ALHBj7yp>>915
LLかなにか?
0921デフォルトの名無しさん
2014/11/24(月) 21:53:02.13ID:VEx2A02b0922デフォルトの名無しさん
2014/11/24(月) 22:01:44.63ID:eiqZfCRw久々にこの板で有意義なレスみたわw
0923デフォルトの名無しさん
2014/11/24(月) 22:55:54.03ID:gw5zpG2I0924デフォルトの名無しさん
2014/11/24(月) 23:30:24.37ID:y8DryCQN0925デフォルトの名無しさん
2014/11/24(月) 23:49:50.50ID:ik0PDj3i救いようのない馬鹿が生ポ好きなのはわかったから
まずここから始めろ
http://ideone.com/P21Tmb
weak_ptrとか100年早い
0926デフォルトの名無しさん
2014/11/25(火) 00:49:38.08ID:uMipTR6Dこれぞ本当のナマポの不正受給ってやつだな
0927デフォルトの名無しさん
2014/11/25(火) 08:19:31.66ID:3Ci+Pzd7誰が上手い事を家といいましたか?
0928デフォルトの名無しさん
2014/11/25(火) 08:28:03.33ID:UdE9jlSPC#でも循環参照したらGCの対象にならないからちょっと違う
0929デフォルトの名無しさん
2014/11/25(火) 08:32:59.22ID:UdE9jlSPまずはインスタンスを保持するポインタがどれかを理解してからじゃないと
0930デフォルトの名無しさん
2014/11/25(火) 08:43:19.72ID:HvA4xOWn0931デフォルトの名無しさん
2014/11/25(火) 08:48:17.73ID:CLbrlRsg0932デフォルトの名無しさん
2014/11/25(火) 08:52:36.35ID:HvA4xOWnC#はルートオブジェクトから参照を辿れなくなったオブジェクトをGC対象にする仕組みだから
0933デフォルトの名無しさん
2014/11/25(火) 08:53:43.04ID:UdE9jlSP0934デフォルトの名無しさん
2014/11/25(火) 12:27:21.60ID:/9fLtCNp0935デフォルトの名無しさん
2014/11/25(火) 19:38:31.70ID:ljgVcsVa>ルートオブジェクトから参照を辿れなくなったオブジェクトをGC対象
初耳です。
そのルートオブジェクトとは何なのか
詳しく教えてください。
0936やしきかがしん
2014/11/25(火) 20:32:31.73ID:LEZt+yYGやっぱ、すっきやねん(C++が)〜♪
0937デフォルトの名無しさん
2014/11/25(火) 20:52:38.91ID:3Ci+Pzd7たしか、スタティックや、ローカルに宣言したオプジェクトをルートオプジェクトと呼び、
そこから始まる参照をルート参照と呼ぶじゃなかったかな
取り敢えず、GC信者の福音って訳じゃない
0938デフォルトの名無しさん
2014/11/25(火) 20:56:51.30ID:CLbrlRsg非newオブジェクトに辿りつけないnewオブジェクトが自殺する感じか
0939デフォルトの名無しさん
2014/11/25(火) 21:21:47.41ID:FGvDDOcS・どのクラスの静的変数からも辿ることができない
・どのスレッドの実行中関数のローカル変数からも辿ることができない
の二つの成立で回収される。
ここで、自身を静的変数につなぎ止め直す処理のデストラクター
を持つかどうかは考慮されない
0940デフォルトの名無しさん
2014/11/25(火) 21:33:36.00ID:rPvMoqx20941デフォルトの名無しさん
2014/11/25(火) 21:36:37.46ID:QlEjMTFr0942デフォルトの名無しさん
2014/11/25(火) 21:55:12.18ID:fynCX/ktmark and sweep方式な。
>>940
途中return、例外送出などでdelete書くの非常に煩わしいと思うんだけど
0943デフォルトの名無しさん
2014/11/25(火) 22:19:06.72ID:Raj0M4wHものによるだろ。例えば業務システム開発で
・1日24時間365日フル稼働で1年間止まってはならない
・もし止まったら940は家族が一人殺される
・ソースコード規模は10万行
・ただしプログラム書くのは>>940じゃなくて>>940の部下
この条件でGC無しで行こうとする奴は勇気がある
0944デフォルトの名無しさん
2014/11/25(火) 22:27:07.70ID:ZF5zgvJUfunction(Class* pointer)
{
GlobalObject.push_back();
}
push_back()を実行すると クラスポインターの示してる値が変わるんだけど原因は何でしょうか?
0945デフォルトの名無しさん
2014/11/25(火) 22:30:55.79ID:9d8G7Mns0946デフォルトの名無しさん
2014/11/25(火) 22:40:23.25ID:ZF5zgvJU確かに疲れているかもです
見間違いでした。
変更されるのは、クラスポインタの値ではなく
クラスポインタが示すオブジェクトのメンバ変数の値が変わっていました。
-175256356.... みたいなあり得ない値に変更されていました。
0947デフォルトの名無しさん
2014/11/25(火) 22:46:23.68ID:9d8G7Mnshttp://ideone.com/q0Pvyn
こういうことだな。
もしこれと違うならメモリ破壊を疑った方がいい
0948デフォルトの名無しさん
2014/11/25(火) 23:35:10.06ID:HvA4xOWn出したものは"必ず"片付ける。例外無し!
誰しもそれが当たり前で、確実に出来るんだったらいいけどさ。
GCというのは、使い終わったのをポイッと手放すだけで、
掃除機がいつの間にか片付けてくれるんだよ。
0949デフォルトの名無しさん
2014/11/26(水) 03:31:06.56ID:WCMEKjWn共有するclassはそれ毎に独自GC管理class作ってるわ
一元管理してるから再利用しやすい
0950デフォルトの名無しさん
2014/11/26(水) 03:55:47.24ID:l/cGeknv0951デフォルトの名無しさん
2014/11/26(水) 04:36:03.25ID:WCMEKjWnつかそれがマイテンプレートライブラリでコード使い回し
0952デフォルトの名無しさん
2014/11/26(水) 08:25:44.93ID:7CQDlMk8なにその条件、極論だろとは思えず、至極普通な最低条件だから困る
0953デフォルトの名無しさん
2014/11/26(水) 08:33:40.65ID:L6p97yKn0954デフォルトの名無しさん
2014/11/26(水) 09:41:59.46ID:Y5jv1E1Sと心から信じていて、循環参照だかグローバル参照だかで
リークさせてるバカ
0955デフォルトの名無しさん
2014/11/26(水) 10:03:58.78ID:dntXOEXZ自分自身を家族のひとりとしてカウントするならなんだかんだありそうな気がする
0956デフォルトの名無しさん
2014/11/26(水) 12:38:39.38ID:DgWOX6kiこの条件でノー天気に CG 信じられる奴が羨ましいわ w
0957デフォルトの名無しさん
2014/11/26(水) 12:39:36.09ID:DgWOX6ki0958デフォルトの名無しさん
2014/11/26(水) 12:51:11.92ID:vRGIjOgX0959デフォルトの名無しさん
2014/11/26(水) 12:53:51.47ID:vRGIjOgXナマポ使うやつ途中で例外出てもリークしないようになってるか?
0960デフォルトの名無しさん
2014/11/26(水) 13:47:51.53ID:GB07jGa20961デフォルトの名無しさん
2014/11/26(水) 14:26:54.83ID:l/cGeknv0962デフォルトの名無しさん
2014/11/26(水) 17:07:51.26ID:PbLBjk0Rhttp://ideone.com/ylIKrs
不十分なソースでしたので汚いソースですが書いてみました。
関数funで push_back()後のvalの値がなぜ0になるのか教えていただけないでしょうか。
0963デフォルトの名無しさん
2014/11/26(水) 17:14:10.02ID:B90JxfI9複数人で開発したり、個人でもある程度の規模になったらGC使わないと厳しいだろ
0964デフォルトの名無しさん
2014/11/26(水) 17:34:36.85ID:dntXOEXZGCじゃなくスマートポインタでもいいんじゃないかな。
0965デフォルトの名無しさん
2014/11/26(水) 17:41:29.74ID:4+IZANOnpush_back()でメモリの再確保が行なわれたため
それ以前のvectorの要素へのポインタは無効になる
0966デフォルトの名無しさん
2014/11/27(木) 08:48:59.26ID:2R7FVY88大規模開発は、ダイナミックなメモリアロケーションを禁止するだろ。
それが出来ないからJAVAは嫌われる。
有限のリソースを使いきるまで使うより、上限を定めて稼働させてしきいに達したら警告、上限で落っことした方が運用しやすく、調整しやすく、復旧しやすい。
無制限のリソースを利用したがるプログラムとは、要件設計者の怠惰だと思うよ
0967デフォルトの名無しさん
2014/11/27(木) 09:12:38.34ID:wnS1kX6Pそういう要件があるのは否定しないけどさ、それが唯一みたいな言い方すんのどうなん?
0968デフォルトの名無しさん
2014/11/27(木) 09:25:15.07ID:4bCHH5yg使用量が減らなかったり、緩やかに、それこそ日単位でゆっくり増え続けてたりしたらメールでメンバに飛ばすようにしておいて、
bad_alloc予想日付計算して、その日までに稼働率の低い時にバグフィックス版に置き換え、みたいな事やってたな。
0969デフォルトの名無しさん
2014/11/27(木) 09:33:58.13ID:6VTT5nov0970デフォルトの名無しさん
2014/11/27(木) 09:45:07.39ID:vRuUOYe5firefox さんのこともっとdisってあげてくだしあ
0971デフォルトの名無しさん
2014/11/27(木) 09:47:58.84ID:vRuUOYe5毎日 Apache 再起動するのが一番安直かつ確実な対策だったというオチまで付いたわ
0972デフォルトの名無しさん
2014/11/27(木) 09:56:19.51ID:5OfvJX0BOSは何?
0973デフォルトの名無しさん
2014/11/27(木) 10:19:27.99ID:4bCHH5yg確かに原因見つけるまではそんな感じだったなw
0974デフォルトの名無しさん
2014/11/27(木) 12:30:46.57ID:cuJ5rv8l一般的にと言うことだろ
まあ、上限に達したら落とすとか普通は許されないけどな w
0975デフォルトの名無しさん
2014/11/27(木) 12:45:27.01ID:cuJ5rv8lWindows じゃね?
非 Windows で MaxRequestsPerChild 知らんとか終わってると思うし。
0976デフォルトの名無しさん
2014/11/27(木) 14:18:10.96ID:QnPNQERt一日三回くらい再起動してる
0977デフォルトの名無しさん
2014/11/27(木) 19:04:52.00ID:2R7FVY88まあね
落ちたら内部からも袋叩き。
2ちゃんでまた障害と言われる訳だね
いい加減、オラクルは自動でトランザクションをリランしろと
リナックスのオラクルはバグ大杉
0978デフォルトの名無しさん
2014/11/27(木) 23:10:24.54ID:YHce4I76昔はWindows自体そんな扱いだったような…
>>975
共有メモリとか、稼働中のモジュールを0にすることに意味があるんだとしたらそれではダメな場合もあるんじゃね?
>>976
Chromeはリークリーク言われてるけど、レンダリングプロセスを定期的に全滅させれば相当持つんだよなぁ…
>>977
高い金払ってるんだろうからそこはオラクルに直させようぜ
0979デフォルトの名無しさん
2014/11/27(木) 23:41:43.48ID:7MU1hacI0980デフォルトの名無しさん
2014/11/28(金) 02:25:25.60ID:8rikF3wo今でもアプリケーションレベルではたまにあるよ。符号付きで見てて25日で問題出す奴もいる。
IE8でJavaScriptのsetTimeoutの予定時刻が起動から49日以上だと0秒扱いになる環境もあったな。
(逆に即タイムアウトする秒数を調べて、該当環境の連続稼働時間を見積もれる場合がある)
0981デフォルトの名無しさん
2014/11/28(金) 04:56:00.89ID:BzFzdO6B>Chromeはリークリーク言われてるけど、レンダリングプロセスを定期的に全滅させれば相当持つんだよなぁ…
Chromeはタブ毎にプロセスが分かれてるのが大きい
firefoxはシングルプロセスシングルスレッドで親亀こけたら皆こけるから糞
0982デフォルトの名無しさん
2014/11/28(金) 11:00:19.70ID:leaE7DCy0983デフォルトの名無しさん
2014/11/28(金) 12:56:39.33ID:Kneo5h4m0984デフォルトの名無しさん
2014/11/28(金) 18:32:11.79ID:B+LAgn9V0985デフォルトの名無しさん
2014/11/28(金) 21:56:02.95ID:QcGoPiazhttp://peace.2ch.net/test/read.cgi/tech/1417179292/
0986デフォルトの名無しさん
2014/11/28(金) 22:31:29.58ID:pEhfczy30987デフォルトの名無しさん
2014/11/28(金) 23:10:58.60ID:E/QvI1Jvでも世の中の大多数は低脳だしね
0988デフォルトの名無しさん
2014/11/28(金) 23:42:17.83ID:8rikF3wo0989デフォルトの名無しさん
2014/11/29(土) 00:59:39.55ID:tqE5jCC50990デフォルトの名無しさん
2014/11/29(土) 02:27:08.95ID:qtzzkgpz0991デフォルトの名無しさん
2014/11/29(土) 08:16:56.77ID:VBQ2wmG10992デフォルトの名無しさん
2014/11/29(土) 09:08:43.14ID:TOiOa/Ze0993デフォルトの名無しさん
2014/11/29(土) 11:22:38.86ID:IKUaO2mTなるのは余程の無能(低能ですらない)でない限り無理だろ?
0994デフォルトの名無しさん
2014/11/29(土) 11:24:54.93ID:r+/3cWk00995デフォルトの名無しさん
2014/11/29(土) 12:11:48.25ID:v9PxAgfuブラウザがメモリリークしても、ブラウザだけ再起動すればすむ話ではないでしょうか?
と言いたいのだと思います。
だが、スマフォだとメモリが少ないからリークが酷いとソシャゲプレイ中にブラウザを何度も再起動するはめになるから、ヤダーと彼らは訴えたいのだと思います。
アイマスがブラゲかプゲラかは知らないけれど、カード引いてライトが回っている時に落ちるといやなんだろう
てか業務時間中にカンコレやんなカスドも
0996デフォルトの名無しさん
2014/11/29(土) 12:14:27.90ID:TOiOa/Ze0997デフォルトの名無しさん
2014/11/29(土) 19:40:17.30ID:H7nG43zB次スレ立ってねぇのに埋めんなボケ
0998デフォルトの名無しさん
2014/11/29(土) 19:43:17.67ID:H7nG43zB【初心者歓迎】C/C++室 Ver.94【環境依存OK】(c)2ch.net
http://peace.2ch.net/test/read.cgi/tech/1417257762/
0999デフォルトの名無しさん
2014/11/29(土) 19:51:30.59ID:8ToAVulJ1000デフォルトの名無しさん
2014/11/29(土) 19:52:57.62ID:8ToAVulJ10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。