トップページ⇒tech
1001コメント287KB

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

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2015/02/24(火) 22:01:58.64ID:13AsGslF
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

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

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

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

■長いソースを貼るときはここへ。■
 http://codepad.org/
 http://ideone.com/
0002デフォルトの名無しさん2015/02/24(火) 22:03:06.67ID:13AsGslF
STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

#include <stdafx.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0003デフォルトの名無しさん2015/02/24(火) 22:04:15.37ID:13AsGslF
----テンプレここまで----
0004デフォルトの名無しさん2015/02/25(水) 19:25:45.94ID:mKx2rGPv
いちお月様ー貴様
0005デフォルトの名無しさん2015/02/26(木) 20:19:51.49ID:tVqEyAds
#endif
0006デフォルトの名無しさん2015/02/26(木) 21:05:38.68ID:MirCIX3E
#ifndef NDEBUG
>>1さんありがとうごじます
#endif
0007デフォルトの名無しさん2015/02/28(土) 12:34:02.28ID:fHGpMEcn
お前らのせいで template template parameters のデフォルト引数が書けなくて
猥らにも未使用な属性を露出するはめになっちゃたじゃねぇかorz
0008デフォルトの名無しさん2015/02/28(土) 12:41:42.34ID:a/G4RwQW
>>7
どこのこと?
template<template<typename T> class a = ★> struct X;
template<template<typename T=★> class a> struct X;
0009デフォルトの名無しさん2015/03/02(月) 14:48:17.71ID:+sP2klOG
非名前空間にある関数と同じ名前を
もつインスタンス関数を持つクラス内で
前者の関数をコールするためには
どのようにしますか?
0010デフォルトの名無しさん2015/03/02(月) 14:58:01.57ID:vmAwrSSK
::func
0011デフォルトの名無しさん2015/03/02(月) 15:45:16.86ID:hivCPt76
#define private public
0012デフォルトの名無しさん2015/03/02(月) 16:33:55.97ID:+sP2klOG
>>10
ありがとうございま
自分の位置から相対的に何個上とかは無理なんですね。
した
0013デフォルトの名無しさん2015/03/02(月) 22:45:25.74ID:+22kW03l
インナークラスが、アウタークラスに、勝手には依存できないのさ
0014デフォルトの名無しさん2015/03/03(火) 07:50:54.20ID:9xo9xj4t
値渡しのconstはオーバーロードという名のクライアントの要求にあるわけじゃないですか。
しからば仮引数をconstにして定数演算の最適化に利用したいライブラリー開発者の
要求に答えることができませんね。
0015デフォルトの名無しさん2015/03/03(火) 07:57:57.25ID:ed5OtmA4
日本語でおk
0016デフォルトの名無しさん2015/03/03(火) 12:52:29.95ID:0H9O2eaz
薄気味の悪い文章だ。
00175602015/03/03(火) 20:26:26.70ID:2pykA5xk
NGW: じゃないですか
0018デフォルトの名無しさん2015/03/04(水) 10:28:20.17ID:eysaIXjg
>>14
その const はオーバーロードに影響しないから、宣言では const 無しにしといて
定義で勝手に const つけていいんだよ。
0019デフォルトの名無しさん2015/03/04(水) 13:40:22.05ID:sEOnXYVe
関数ローカルのPOD変数にconstつけるかつけないかで最適化に影響するようなコンパイラなんてあるん?
めんどくせえな
0020デフォルトの名無しさん2015/03/04(水) 13:53:30.81ID:l8MsMF4o
constつけられる場所には全てつけてるよ
すごく安心する^^
0021デフォルトの名無しさん2015/03/04(水) 16:10:12.02ID:dDcQZ4yU
>>20
return には付けないよな?
0022デフォルトの名無しさん2015/03/05(木) 10:19:45.44ID:dDo/Jz4C
今さら変えられんが、デフォがconstであるべきだったな
0023デフォルトの名無しさん2015/03/05(木) 10:36:20.48ID:h/XJ3WoQ
llvmかよ
0024デフォルトの名無しさん2015/03/05(木) 20:20:43.01ID:gRAg7Udc
const int f();
const unko g();

decltype(g())はconst unkoだけど
decltype(f())がconst intでなくintになる糞仕様を何とかして欲しい
0025デフォルトの名無しさん2015/03/05(木) 20:21:32.63ID:1Acz44Yd
decltype((f()))なら?
0026デフォルトの名無しさん2015/03/05(木) 20:37:31.42ID:Z1VFzrPe
関数呼び出し式はもともとid式ではないなら、
カッコ増やしても変わらないはず。
0027デフォルトの名無しさん2015/03/05(木) 21:01:30.77ID:6vcov9qd
decltypeはなんでこんな糞仕様になってしまったのか・・・
0028デフォルトの名無しさん2015/03/06(金) 15:15:40.83ID:waWP92ey
auto i = 5;
これで i が const int になったら、それこそ糞だろ
0029デフォルトの名無しさん2015/03/06(金) 18:42:23.03ID:Ff67jPYI
出た
「配列がconstポインター」と同等レベルの初心者
0030デフォルトの名無しさん2015/03/06(金) 20:09:28.66ID:waWP92ey
言語障害か、こいつ
0031デフォルトの名無しさん2015/03/07(土) 05:03:12.99ID:95kHk/4r
decltypeの糞仕様と基本型のconstの特別扱いの糞の両方がある。
>>24はdecltypeの問題ではないな
0032デフォルトの名無しさん2015/03/07(土) 16:23:52.47ID:ZJ5WVqXi
>>31 「基本型のconstの特別扱い」ってなぁに?
0033デフォルトの名無しさん2015/03/07(土) 20:18:27.72ID:lexZIoDv
基本型の特別扱いなどというものは存在しない
非クラス型に限ってprvalueはconstが剥がれるというルールが有るだけだ
0034デフォルトの名無しさん2015/03/07(土) 20:22:10.62ID:3PLc8m1Q
const char*か
しかしとんでもねえルールだ
0035デフォルトの名無しさん2015/03/07(土) 20:40:48.24ID:kgoMpLop
c++11のenumはprimitiveか否か
0036デフォルトの名無しさん2015/03/07(土) 21:05:31.66ID:URfbPLhP
まずそのprimitiveとやらの定義を訊こうか
0037デフォルトの名無しさん2015/03/08(日) 21:49:24.84ID:U2m6dpOF
プリミティブ=JAVAドカタ発見器
0038デフォルトの名無しさん2015/03/09(月) 09:01:55.53ID:C5HzDcEX
rubyはプリミティブが無い
Javaはプリミティブの配列は0に初期化される
C++はプリミティブがconstがはがれる
0039デフォルトの名無しさん2015/03/09(月) 09:36:27.85ID:PKrvJtFu
fundamental types
0040デフォルトの名無しさん2015/03/09(月) 23:03:22.24ID:1gPhoGUH
C++にはプリミティブというものが無い
>>38はJAVAドカタに相違ない
0041デフォルトの名無しさん2015/03/10(火) 01:36:49.84ID:UgYMz3L+
何をしたときに「constがはがれる」なんて動作するの?
0042デフォルトの名無しさん2015/03/10(火) 06:44:41.25ID:zWP2NH7t
どう見ても勘違い君だから触るなよ...
0043デフォルトの名無しさん2015/03/10(火) 07:58:07.67ID:kBEgSjWh
>>24にかかれてるだろタコ
0044デフォルトの名無しさん2015/03/10(火) 12:15:36.74ID:UgYMz3L+
n3936 の 7.1.6.2 p4 で decltype の示す型が規定されているけど、
「constがはがれる」なんてルールは見当たらないよ。
0045デフォルトの名無しさん2015/03/10(火) 18:25:09.32ID:W9aR9hFL
>>44
decltypeの問題ではないよ
Clause 5
0046デフォルトの名無しさん2015/03/10(火) 22:07:24.79ID:dg/tj86w
>>44
ISO/IEC 14882:2014 5段落6
『If a prvalue initially has the type“cv T,”where T is a cv-unqualified non-class, non-array type, the type of the expression is adjusted to T prior to any further analysis.』

↓コンパイルエラーに注目
http://ideone.com/sEQARr
0047KUSO KOTE ◆unko./w.Osri 2015/03/10(火) 22:13:59.15ID:dg/tj86w
ついでにISO/IEC 14882:2014 3.10p4
『class and array prvalues can have cv-qualified types; other prvalues always have cv-unqualified types. See Clause 5.』
0048442015/03/11(水) 00:50:13.29ID:vDxY1toS
>>45-47
把握した。ありがとう。
0049デフォルトの名無しさん2015/03/11(水) 04:33:40.33ID:vLo4R3vK
何のための誰得な仕様なの
0050デフォルトの名無しさん2015/03/12(木) 17:23:13.27ID:4A2VUCCf
sprintfでコピーされる文字列長を
コピーせずに知る方法を教えて下さい
0051デフォルトの名無しさん2015/03/12(木) 18:12:07.63ID:nvy6f4L6
前にも同じ質問あったな
0052片山博文MZ ◆T6xkBnTXz7B0 2015/03/12(木) 18:15:54.41ID:ul3bYXTG
>>50
CRTのソースをみてエミュレートする
0053デフォルトの名無しさん2015/03/12(木) 21:34:37.05ID:sWZMM9R0
snprintfをバッファ長ゼロで呼ぶ
0054デフォルトの名無しさん2015/03/12(木) 22:04:33.17ID:DBsYm82i
sprintfを使わない
0055デフォルトの名無しさん2015/03/12(木) 22:27:34.87ID:L+z6pulG
>>53
ありがとうございます。

>>52,54
とんでもない無能ですね。やる気を出してください
0056デフォルトの名無しさん2015/03/12(木) 22:39:08.25ID:cIZ+bXYz
めんどくさいからsnprintf_sに固定長渡して
失敗したら諦めてるわ
0057デフォルトの名無しさん2015/03/12(木) 23:23:28.91ID:h4ieQffB
めんどくさいからstd::to_string()して+でくっつけてる
0058デフォルトの名無しさん2015/03/13(金) 20:15:23.30ID:krOXv2Oj
>>50
何でそんなことしたいんだ?
コピー後の文字列長を求めれば確実なんじゃないか?
0059デフォルトの名無しさん2015/03/13(金) 20:33:22.46ID:9FB9uPZE
>>58
馬鹿なんですか
コピーしきれなかったらどうするんですか
ちゃんと考えてものを言ってください
0060デフォルトの名無しさん2015/03/13(金) 20:39:02.80ID:5+Y+ymKY
数字は10進数で桁数を出す。
文字列はstrlenあればいけるだろ。

っていうか、バッファーのところNULLにしたら概要出してくれるんじゃなかったっけ。
0061デフォルトの名無しさん2015/03/13(金) 21:08:46.46ID:krOXv2Oj
>>59
大き目にバッファを用意しておけばいいだろ
0062デフォルトの名無しさん2015/03/13(金) 21:09:58.39ID:9FB9uPZE
>>60
16進数だったり桁数指定だったり指数表示だったりいろいろあるでしょう
それを全部自前でやれとは回答としてはゼロ点ですね
脳味噌入って無いんですか
0063デフォルトの名無しさん2015/03/13(金) 21:15:27.03ID:5+Y+ymKY
最後まで読まないで人罵倒することしか頭にない変態紳士め。
0064デフォルトの名無しさん2015/03/13(金) 21:38:20.63ID:5+Y+ymKY
あれ?バッファにNULL渡したら死にやがった。
昔出来ると読んだ記憶があったんだが、何だっけな。
snprintf使っておくのがベターなのか?
正直すまんかった。
0065デフォルトの名無しさん2015/03/13(金) 21:52:28.16ID:5+Y+ymKY
ttp://ideone.com/cPifEZ
土下座しろ。
0066デフォルトの名無しさん2015/03/13(金) 22:07:58.66ID:nMWoJLTD
なにこの1人相撲。
あとなんで+2なん?
0067デフォルトの名無しさん2015/03/13(金) 22:10:48.20ID:5+Y+ymKY
適当。C言語嫌いなんだよ。C++でvector使ってるから。
土下座マダー?
0068デフォルトの名無しさん2015/03/13(金) 22:34:12.55ID:nMWoJLTD
>>67
誰に何故土下座を要求してんの?
0069デフォルトの名無しさん2015/03/13(金) 22:35:27.72ID:5+Y+ymKY
>>62
脳みそ入ってない奴に解かれてやんの。
ど げ ざ。
0070デフォルトの名無しさん2015/03/13(金) 22:38:30.75ID:nMWoJLTD
>>69
解くってsnprintf 使う方法は>>53 で既出なのにマジで何がしたかったのか解らん
0071デフォルトの名無しさん2015/03/13(金) 22:40:50.94ID:5+Y+ymKY
動くコード書いたのにこの仕打ちとは、世知辛い世の中だ。
それに質問主理解してなかったジャン。
0072デフォルトの名無しさん2015/03/13(金) 22:44:40.53ID:nMWoJLTD
俺もC言語面倒くさくて嫌いだが、こんなアホっぽいのがC言語嫌いC++使うとか言ってるからC言語使いからC++が低く見られるのかもな…
0073デフォルトの名無しさん2015/03/13(金) 22:45:45.34ID:5+Y+ymKY
監視すんのめんどくさくなったからもういいや。
あー、書き損。
0074デフォルトの名無しさん2015/03/14(土) 02:22:29.77ID:Zay2tm1W
いいかげんC++はインラインメソッドとメンバ変数の後方参照が出来るようになって欲しい。
いちいちコード分けるの面倒。
0075デフォルトの名無しさん2015/03/14(土) 03:26:27.12ID:t/iyHNA+
いやできるだろ何言ってんだ
0076デフォルトの名無しさん2015/03/14(土) 09:03:28.14ID:Z0HeSYTJ
hppインクルードするだけで使える形のライブラリ書いてるが、関数本体が
長くなると一覧性が悪いな。
関数メンバのプロトタイプ宣言みたいなものが欲しいわ。
0077デフォルトの名無しさん2015/03/14(土) 09:10:57.91ID:lGpxwPy8
>>74
どういうコードがコンパイル通るようになってほしいのですか?
0078デフォルトの名無しさん2015/03/14(土) 09:39:53.35ID:wEOVq8GH
>>76
関数メンバってなに?
0079デフォルトの名無しさん2015/03/14(土) 10:07:34.92ID:uyiCZLkr
なんか頭悪い発言スレ化してきてるな
0080デフォルトの名無しさん2015/03/14(土) 15:05:27.63ID:UmboQnI7
大丈夫。頭悪いのはちゃんと回答してくれてる人達に毎度茶茶入れてるキチガイ一匹だけだから。
こんなキチガイ二匹もいる訳がない。
何度ここで勉強させてもらったか。ここがなかったら未だにポインタも分からんかったまである。
0081デフォルトの名無しさん2015/03/14(土) 16:26:44.67ID:dIU+dE4A
最近 ID をたぶらかす方法を覚えたみたいだな、例のドカタキチガイちゃん
また全板にわたって盛大にやってくれ
0082デフォルトの名無しさん2015/03/14(土) 20:20:37.60ID:Zay2tm1W
>>7
ようするにヘッダに全部書きたい。
hppとcppを行き来するのが面倒だから。
0083デフォルトの名無しさん2015/03/14(土) 21:22:48.28ID:Zay2tm1W
そんでよく分からないのは、
クラス内クラス同士の場合、後方参照が許されてるっぽいのに、
グローバル空間だとダメなところ。

class out
{
  class A{ /*A内からBのメソッドが呼べる*/ };
  class B{ };
};

class A{ /*A内からBのメソッドが呼べない*/ };
class B{};

これなんで?中途半端くない?
0084デフォルトの名無しさん2015/03/14(土) 21:44:48.40ID:wcL59cGU
          ,. -‐‐‐- 、
         / !      ヽ
        _,!-y-‐-、-、   |
        ゞヽ}i⌒ヽ\ \ {
        }〉ソー-// 入 ヽ、
        >仝\//__,.ゝ、  >   コーホー
       o|ii_ii_:|oニ二三____,.>'
    ''''''} ̄~フハ      ;/;' /_,;,7'
   ;;;''''/_  / | | `ー-‐'´_,,,/' ,,/r'~`ヽ';
     ,r'~ `V ヽニニニ二、-'{ 十 )
0085デフォルトの名無しさん2015/03/14(土) 23:13:17.18ID:2sFyhS5H
っ フレンドクラスー!!
0086デフォルトの名無しさん2015/03/15(日) 02:45:54.75ID:IG+uIRAd
フレンドクラス関係ない。
0087デフォルトの名無しさん2015/03/17(火) 00:05:55.94ID:kOLN6eD/
ポインタ渡しと参照渡しとスマートポインタ渡し?のどれが一番いいの?
どれも欠点があるみたいでわけわかんないんですけど。
0088デフォルトの名無しさん2015/03/17(火) 00:09:07.00ID:sovfZ05h
使いどころによるとしか言えないだろそんなもん
0089デフォルトの名無しさん2015/03/17(火) 00:09:50.83ID:eWM9qhCG
値の変更があるとき ->ポインタ渡し。
値の変更が無いけどスライシングなくしたい -> 参照渡し
メモリを共有したい ->スマポ。

というルールで俺はやってる。
0090デフォルトの名無しさん2015/03/17(火) 00:19:08.83ID:kOLN6eD/
>>89
ありがとうございます。
そのヒントを手がかりに調べてみます。
0091デフォルトの名無しさん2015/03/17(火) 00:37:01.74ID:dRjYd+3d
基本全部const参照と右参照でいいよ
他が必要な時が来たら設計を見直してそれでも必要なら使えばいい
0092デフォルトの名無しさん2015/03/17(火) 01:04:58.99ID:02ciAWXG
値の変更無い時はconst参照な。const大事
0093デフォルトの名無しさん2015/03/17(火) 02:51:28.32ID:b30KLGb3
みんなセッターとかゲッターとかまじめに書いてるの?
0094デフォルトの名無しさん2015/03/17(火) 03:05:03.26ID:t2ppCg0V
雪駄と下駄はまじめに履いてる
0095デフォルトの名無しさん2015/03/17(火) 03:11:27.51ID:Sby901wn
>>93
ゲッター/セッターという概念そのものが設計ミス
0096デフォルトの名無しさん2015/03/17(火) 03:17:18.62ID:Vi/eJRXz
setter/getter は簡単なものなら、クラスの本体に直接、

inline 指定して、コードを書いておく
0097デフォルトの名無しさん2015/03/17(火) 12:25:05.62ID:D7FiHOLw
セッターゲッターは書くな。どうしても必要になったら書けばいいだけ。

参照じゃなくてポインタはnullptrが普通にありえるかどうかかな。
0098デフォルトの名無しさん2015/03/17(火) 12:40:05.23ID:tVRGZdcr
必要もないのに書くバカいるの?
0099デフォルトの名無しさん2015/03/17(火) 12:42:17.16ID:VlE2ZkQf
メンバ変数ごとに書いてたらあほらしいしおかしいわな
0100デフォルトの名無しさん2015/03/17(火) 12:51:30.17ID:fdD6RiQU
>>98
本当に結構いるから困る
全部書くのがルールだと思ってやがる
0101デフォルトの名無しさん2015/03/17(火) 13:35:18.13ID:XYhjQqq+
必要あってもゲッター書かないことを模索しろよ
少なくとも内部データ構造丸裸にするゲッターは抽象が実装に依存する
0102デフォルトの名無しさん2015/03/17(火) 15:09:22.39ID:9wYhQc5T
もうそれpublicでいいじゃん!レベルならともかく
そういうの以外についても?
0103デフォルトの名無しさん2015/03/17(火) 19:28:48.97ID:u03+oswx
内部状態を必要以上に晒すなって話。逆転する方法で済む場合もある
B b=A.GetB(); X.Use(b); → A.Accept(X){ B b; X.Use(b); }
0104デフォルトの名無しさん2015/03/17(火) 19:40:38.77ID:V9Y5nR4b
(1) 先に内部のデータ構造を作って
(2) そのあとそれらを丸ごと外に見せるためにゲッターを作る
(3) いつもそうやってクラスを作ってる

そういう行動パターンならまずいだろうな
0105デフォルトの名無しさん2015/03/17(火) 19:46:02.32ID:V9Y5nR4b
抽象と実装の依存を逆転させるのはやめなさい

と忠告されて
それを受け入れて
日々の業務で配慮できる人は
職業プログラマの中の何人に一人いるというのか?!
0106デフォルトの名無しさん2015/03/17(火) 19:53:35.11ID:02ciAWXG
まず外部に出す入力、出力のインターフェースを作ってから中身作るから
eclipseに付いてるメンバー変数からgetter,setterの自動生成の機能とか存在意義が解らんよね
0107デフォルトの名無しさん2015/03/17(火) 20:05:43.00ID:b30KLGb3
C#はその辺うまくやってるんだよな。
C#のプロパティとか、一見変数にアクセスしているように見えて実はメソッド呼び出しだったりするので、
最初は気持ち悪いと思ったんだけど、あれって実は、
セッター/ゲッターを書かなくい言い訳のために存在しているんだよね。
メンバ変数をパブリックで公開しておいて、
プロパティ化の必要が出たらプロパティに出来るっていう。
0108デフォルトの名無しさん2015/03/17(火) 20:15:21.53ID:u03+oswx
俺今 java 土方だけど、むしろ必須。Alt + Shift + R が体に染みつくレベル
0109デフォルトの名無しさん2015/03/17(火) 20:55:09.34ID:he3uyXd7
セッターゲッターってデバッグ時にブレークポイント置いて、いつどの関数が値を参照・変更しているか調べるのに使っているのですが、本来そういう用途に使うものですか?
0110デフォルトの名無しさん2015/03/17(火) 20:56:44.35ID:dX8V8eXl
アクセッサー一言で済む言葉をゲッターセッターというやつ何なの?
0111デフォルトの名無しさん2015/03/17(火) 21:05:50.88ID:he3uyXd7
>>110
それはね、そんな事に拘らない大人の人たち。君も早く童貞捨てて男になりなさい。
0112デフォルトの名無しさん2015/03/17(火) 21:24:18.48ID:/0y2c5YQ
>>107
後発言語だけたってそのあたりは上手だよな
リエンジニアリングのリスクさえなければ一気に普及しそうなんだが
俺も個人的にはC++よりはこっち使いたい
0113デフォルトの名無しさん2015/03/17(火) 21:29:18.26ID:vq5GH1Dg
>>110
accessorはsetter含む定義と含まない定義があってな
0114デフォルトの名無しさん2015/03/17(火) 21:52:40.02ID:R3SqHR4I
セタゲタが悪いってのは幻想な
例えばコレクションのカウントプロパティとか概念上そこにあるのが自然なプロパティなんていくらでもある
悪いのは何も考えずにセタゲタを拒否するやつと何も考えずにセタゲタ全部のフィールドに対して作るやつ
0115デフォルトの名無しさん2015/03/17(火) 22:01:29.52ID:x4nvlXOr
>>114
先にメンバ変数があって
後からゲッタセッタを足したらアウトだけどな
0116デフォルトの名無しさん2015/03/17(火) 22:02:49.01ID:CGA6ytOR
考え方が極端すぎるな
0117デフォルトの名無しさん2015/03/17(火) 22:04:13.61ID:Fctsf0UD
>>110
アクセサ == ゲッタ
アクセサ != セッタ
0118デフォルトの名無しさん2015/03/17(火) 22:04:55.08ID:7rYotda6
クラスの実装を変えてsetter, getterをチョコチョコ変更してたらクソだわな。
0119デフォルトの名無しさん2015/03/17(火) 22:09:07.60ID:iAsbPPSN
先にデータ構造の設計を完了して
そのあとプライベートメソッドを作って
最後にパブリックメソッドを足していくことを普通だとしてる人は
だいたい半分くらいいるから

両派はずっと相容れないよ
0120デフォルトの名無しさん2015/03/17(火) 22:13:26.49ID:fdD6RiQU
>>114
カウントを保持しない、または把握しないコレクション設計なんていくらでもあるじゃん
0121デフォルトの名無しさん2015/03/17(火) 22:23:24.43ID:R3SqHR4I
>>120
君は実にバカだな
そういう概念のコレクションならばそれらしくカウントプロパティをなくせば良い
ただそれだけのこと
適切なプロパティは善であることに揺るぎはない
0122デフォルトの名無しさん2015/03/17(火) 22:28:42.46ID:Z3zuZFzt
(A) ほぼ当たり前のように、いつもせsetter/getterを付ける。例外的に稀に作らない。

(B) 原則としてsetter/getterを作らない。例外的に稀に作る。

どっちがいい?
0123デフォルトの名無しさん2015/03/17(火) 22:34:15.15ID:RTMNGUZk
どっちも極端なんだよ
必要なら作ればいい
0124デフォルトの名無しさん2015/03/17(火) 22:34:40.85ID:R3SqHR4I
どっちもダメ
設計で吟味された適切なプロパティを作るだけ
原則などない
0125デフォルトの名無しさん2015/03/17(火) 22:34:47.57ID:02ciAWXG
必要なら結果的に作られる。
それだけ多いか少ないかなんてどうでもいいんだよ
0126デフォルトの名無しさん2015/03/17(火) 22:53:38.53ID:7rYotda6
インターフェースってーの?
どうやったらどう動くかってのがクラス設計でしょ。
で、データ構造が決まってくると。
getsetを必然としてしまうと、クラスの振舞とデータ構造が切り離せないじゃん。
0127デフォルトの名無しさん2015/03/18(水) 00:13:21.55ID:24dY5kJQ
getXXXやsetXXXが必要なら作る。
その実装がメンバ変数のgetterやsetterであるかはどうでもいい。
複雑な処理の計算結果だったり
それのmutableなキャッシュを返すとかでも
0128デフォルトの名無しさん2015/03/18(水) 00:38:14.26ID:Z4+04rL5
あえていえば、getter/setterなんてこだわるなよと言いたい。
そんなのただの結果でしかないのだからもう少しちがうネーミングを求む。

隠蔽できてないじゃんと。
0129デフォルトの名無しさん2015/03/18(水) 00:52:08.37ID:OuG/w9AN
>>124
> 設計で吟味された適切なプロパティ

というのは、過去の実績としてメンバー変数の何割がそれに該当するくらいの存在比になる?
0130デフォルトの名無しさん2015/03/18(水) 12:48:34.31ID:3T5MyfTZ
>>127
支持。
0131デフォルトの名無しさん2015/03/18(水) 20:44:08.00ID:h6vLXlXO
ほとんど構造体がわりにしか使ってないような用途のクラスに
セタゲタ用意するのは萎えるね。
0132デフォルトの名無しさん2015/03/19(木) 00:02:03.88ID:01sO/RrA
別スレでも質問したのですが、
class cLoadText
{
public:
cLoadText() : PI(3) {}
void Setting();

private:
//色々

vector <int> PI;
};

void cLoadText::Stting()
{
PI.resize(5);
}

このようにresizeすることが出来ません。
「配列は初期化子リストでのみ初期化できます」と出てしまいます。

resizeの仕方を教えて下さい
0133デフォルトの名無しさん2015/03/19(木) 00:11:59.77ID:pYPIUQ8y
ttp://ideone.com/TeSyph
コンパイル通るんだから隠さず全部張れ
0134デフォルトの名無しさん2015/03/19(木) 00:15:04.16ID:01sO/RrA
>>133
すみません
ありがとう御座います
0135デフォルトの名無しさん2015/03/19(木) 01:35:08.96ID:noU2qMQu
setter/getter は、無条件に全メンバ、作る方が、
迷いが無くて、一々考えなくてよいから速い

途中で必要になって、置換して作ると、
かえって時間がかかるし、バグも出る

最初からクラスの本体内に、
inlineで定義しておけば、コスト0
0136デフォルトの名無しさん2015/03/19(木) 01:54:09.95ID:YOg3jQUC
そしてカーズは考えるのをやめた
0137デフォルトの名無しさん2015/03/19(木) 02:16:07.81ID:noU2qMQu
人は愚かだからね。
そりゃ、関心事のほとんどは、人間に対するものだよ

いかに実装・詳細を見せないか。
それらを見せると人は、色々と考えて、間違いを犯す!

まさに、*FILE なんてそう。
くわばらくわばら。実装・詳細に近寄るべからず!
ひたすら隠ぺいするのみ!
0138デフォルトの名無しさん2015/03/19(木) 20:06:01.05ID:ygDVwDTU
>>135
現実的にはそんなことはないような。
考えなくて済む利点を言うなら、デフォルトで書かないというのが間違いないね。
0139デフォルトの名無しさん2015/03/19(木) 23:10:24.61ID:xsGoZORT
>>135
> setter/getter は、無条件に全メンバ、作る方が、
> 迷いが無くて、一々考えなくてよいから速い

今は何割くらいがそちらの派閥なの?
0140デフォルトの名無しさん2015/03/20(金) 00:35:53.57ID:kFbLT/qS
釣りだろ。
そこまで愚かな方針がたとえあったとしても続くわけがない。
0141デフォルトの名無しさん2015/03/20(金) 01:15:14.54ID:bGDqKCOV
最初にメンバー変数から作ります。

仕様が出来る頃には実装もテストも終わってます。
( ̄ー ̄)ドヤッ
0142デフォルトの名無しさん2015/03/20(金) 05:05:59.33ID:dOiGdIE8
君らは、一体どういう作り方をしているの?

get_a { return 0; }

一般的にはテスト駆動開発で、
ひとまずコンパイルが通るように、スタブから作っておく

これでひとまず動くから、客の要望も聞ける。
メンバ変数などの詳細は後
0143デフォルトの名無しさん2015/03/20(金) 09:07:31.87ID:IjoHJbl9
大半の実装を終えてからパブリックメソッドの設計に取りかかる奴がいるんだよな
0144デフォルトの名無しさん2015/03/20(金) 14:24:27.22ID:+Z7yaCvp
>>143
実装がとても難しくて、その実現が最優先な場合、それはありだと思う。
0145デフォルトの名無しさん2015/03/20(金) 15:07:04.79ID:bD2AVuY9
実装が難しいからpublicは後から考える?
中学生レベルの話をしてるのか?
0146デフォルトの名無しさん2015/03/20(金) 15:18:37.09ID:OqdH58/s
>>144
パブリックの設計を後回しにすることを正当化できるほどの難しい実装って具体的に何を実装するときですか?
0147デフォルトの名無しさん2015/03/20(金) 15:48:08.81ID:p3Xq9eSj
研究レベルのことなんじゃね?
0148デフォルトの名無しさん2015/03/20(金) 17:36:32.96ID:che7vf9K
難しいときほどインターフェースから決めていくんじゃねーの?
0149デフォルトの名無しさん2015/03/20(金) 17:52:47.00ID:+Z7yaCvp
実装が難しくて専門家に好きなようにやってもらうときとかさ。あるだろう?
0150デフォルトの名無しさん2015/03/20(金) 18:05:23.46ID:ieC2O0gO
>>149
具体的に何のコード?
0151デフォルトの名無しさん2015/03/20(金) 19:20:14.19ID:+Z7yaCvp
>>150
言えないけど一種のシミュレーション。
必要なデータは参照できてる状態で、自然なインタフェースとしてはcalcメソッド一発なんだけど、多段に分けて制御を途中で返すプログラムができてきた。
複雑さの問題と資源的な問題で、そうせざるを得ないと判断したが、インタフェースとしては当初の想定とは異なるものになった。
まあ>>145さんにとっては中学レベルの問題でしょうがね。
0152デフォルトの名無しさん2015/03/20(金) 19:49:46.66ID:UWqpI5yE
>>151
> インタフェースとしては当初の想定とは異なるものになった。

当初に想定してんじゃん

実装終えてからインターフェースの設計をする実例になってないし
0153デフォルトの名無しさん2015/03/20(金) 19:58:45.01ID:kFbLT/qS
心の中で想定してたけど設計はしてないんだろ。
0154デフォルトの名無しさん2015/03/20(金) 20:00:27.00ID:69NtnG64
設計はしてても詳細実装をしてみたら変わってくるのはよくあること。
最初からインターフェース無視して作るとかはないだろ。
0155デフォルトの名無しさん2015/03/20(金) 20:08:43.90ID:kEq90xmY
インターフェースを定めて
このインターフェースに合うように作ってくださいと外部に依頼して
分かりましたそれで作りますと仕事を請け負おうわけでしょ?

納品する際に実装の難しさを理由にインターフェースは違っていますなんて言ったら
検品通らないですよ
0156デフォルトの名無しさん2015/03/20(金) 20:22:41.27ID:Daap3Bvc
>>154
そゆこと

>>155
業務系アプリかなんかのプログラマーの人?
0157デフォルトの名無しさん2015/03/20(金) 21:26:43.40ID:hI8+B7Y0
>>144
「とても難しくて」の難しさが伝わってこないんですけど
プログラミング始めて何年くらいの方なんですか?
0158デフォルトの名無しさん2015/03/20(金) 21:31:35.74ID:kFbLT/qS
>>157
>>151に書いてあることで想像できない?

プログラミングの難しさではなく、問題そのものが難しい場合だね。
0159デフォルトの名無しさん2015/03/20(金) 21:32:12.44ID:8sMOXdGr
>>157
アルゴリズムから考案しなきゃならないような、
とても難しいプログラムを開発した事無いのか?
0160デフォルトの名無しさん2015/03/20(金) 21:33:41.99ID:g2iYv7QR
それとインターフェースと何が関係するのか
0161デフォルトの名無しさん2015/03/20(金) 21:38:51.88ID:kFbLT/qS
一言でいうとトレードオフだよ。

自然なインタフェースはだいたい事前に思い浮かぶし、その通りにできれば何も悩まない。
厳密な解が求まらないとか、現実的な時間内に解けないとか、どういう制約が出てくるか、それをどう回避できるかとかは
実装してみないとわからないがけっこうある。

そういうときは「妥協したインタフェース」になるんだよ。どう妥協すべきかなんて事前に計算でないだろ?
0162デフォルトの名無しさん2015/03/20(金) 21:52:06.18ID:69NtnG64
数値解析とかやってると、こういう方針でいこうと思ってもなんだかんだで効率悪いしインターフェース変えようとか普通にある。
そもそも、数値解析をやるということは客に納品する職業プログラマじゃなくて自家用だし、それで破綻はしない。
0163デフォルトの名無しさん2015/03/20(金) 21:55:54.93ID:8R4gJpo3
>>159
具体的にどのようなものが該当?
0164デフォルトの名無しさん2015/03/20(金) 22:00:53.80ID:en+bkcOB
>>162
> インターフェース変えようとか普通にある。

変えればいいじゃん
変えるなという話は出てないし

インターフェース定めてそれに従って実装する
インターフェースの問題点が発覚したら新しいインターフェースを定める
新しく定められたインターフェースに従って実装する
これでいいじゃん

実装に依存してインターフェースを設計することを正当化する理由として「変わるから」は使えないよな?
0165デフォルトの名無しさん2015/03/20(金) 22:03:54.72ID:8t27nLZP
>>164
仕事でやるなよ
そのうち刺されるぞ
0166デフォルトの名無しさん2015/03/20(金) 22:12:18.95ID:kFbLT/qS
最初は >>143-144 から始まっている。
インタフェースを変える変えないではなく、インタフェースを後決めにすることについての是非。
0167デフォルトの名無しさん2015/03/20(金) 22:14:32.67ID:7R8SYIun
・開発中は他人と連携しない
・開発が落ち着いたらインターフェイスを整える
なら別にいい
0168デフォルトの名無しさん2015/03/20(金) 22:19:29.65ID:F6uSjiv/
ホウレンソウできない奴は
インターフェース仕様に従わないものを勝手に作って
土壇場まで言わないんだよな
0169デフォルトの名無しさん2015/03/20(金) 22:45:10.74ID:8sMOXdGr
>>163
顔認証
0170デフォルトの名無しさん2015/03/20(金) 23:45:12.21ID:Jj6lQhtW
この議論がsetter,getterをメンバー毎に作るかって話とどう関係すんのか解らない。
いつの間にか話変わってた?
0171デフォルトの名無しさん2015/03/20(金) 23:59:08.21ID:5AkEDrBF
>>170
メンバー毎に作るのは
まずメンバーができて
そのあとメンバーに合わせてインターフェースができることになるのでは?
0172デフォルトの名無しさん2015/03/21(土) 00:47:15.31ID:+cCVLyHf
雪駄とかは基本的に作らんな。
手続きを公開しておけば変数単体を参照する需要ってあんまりないと思うんだけど。
配列見せろとかは多少目をつむるけど。
クラスが仕事だ。って感じやね。俺の場合。
0173デフォルトの名無しさん2015/03/21(土) 01:59:58.45ID:wTPdkcAS
俺なんかは趣味プログラマーだから、classじゃなくて全部structだぜ。
全メンバpublicだし、細々した短いメソッドも作らん。メンバ変数に直接アクセスしてガシガシ。
そっちの方が実装するのが断然早い。
一人でやってるからできる芸当だな。うらやましいだろ。
プログラミングなんて職業にしても何も楽しいことないと思うね。
自分が思うように気ままに書いたほうが絶対楽しい。
0174デフォルトの名無しさん2015/03/21(土) 02:12:27.71ID:2Cfhk+vt
それはあんた、複数人で開発してみたいってのが見えるよ
0175デフォルトの名無しさん2015/03/21(土) 03:15:42.83ID:UFfQG/bW
>>173
1人で作ってるとお前みたいなゴミプログラマーに邪魔されなくていいよね
0176デフォルトの名無しさん2015/03/21(土) 05:28:54.71ID:FH7eF9wx
俺なんかは趣味プログラマーだから、classじゃなくて全部グローバル変数だぜ。
全メンバグローバルだし、細々した短いメソッドも作らん。グローバル変数に直接アクセスしてガシガシ。
そっちの方が実装するのが断然早い。
一人でやってるからできる芸当だな。うらやましいだろ。
プログラミングなんて職業にしても何も楽しいことないと思うね。
自分が思うように気ままに書いたほうが絶対楽しい。
0177デフォルトの名無しさん2015/03/21(土) 05:39:53.81ID:+cCVLyHf
C/C++使う意味ねー。
0178デフォルトの名無しさん2015/03/21(土) 05:53:50.49ID:ayQ8HKxK
実際、ソースファイル1つで終わるくらいのミニツールとかだと
publicやグローバル上等の方が効率的に開発できるんだよな。
0179デフォルトの名無しさん2015/03/21(土) 06:04:26.82ID:qnP8SmNL
>>170
難しいアルゴリズムやってるんだぞ、ってどや顔したい構ってちゃんがいただけ
気にしなくていいよ
0180デフォルトの名無しさん2015/03/21(土) 06:48:23.51ID:pHXUpzh9
仕事は辛いが1人じゃ絶対に手を出せないようなシステム弄るのは楽しいよね
バカ高いライセンス料金とかも会社負担だし
あと客相手だと要求自体が厳しいからスキルアップしやすい
0181デフォルトの名無しさん2015/03/21(土) 06:54:53.47ID:VwMzQXBk
>>170
例えば座標を保持するとして、中身を直交座標で作ってたけど極座標でデータを保持した方が良いとなったとき、
getsetで実装データ直いじりにしてたら呼び出し側も全部書き換えだわな。
データのアクセスと実装が分離してた方がいいよね。
そういう話。
0182デフォルトの名無しさん2015/03/21(土) 07:54:44.50ID:siPVs/24
>>181
いや、その場合はget,set経由にしているのが生きる例なのでは?
0183デフォルトの名無しさん2015/03/21(土) 08:04:04.44ID:ajuKLkKm
>>181
そういう意味ではgetter/setterで分離されているだろ。
データメンバと一対一対応すること自体が目的じゃないんだから、その状態を維持するために
わざわざインターフェースを変更したりしないだろう。
0184デフォルトの名無しさん2015/03/21(土) 08:09:28.65ID:33k4bkbj
>>176
コードを書くときは、誰かが読むということを考えながら書く癖をつけたほうがいいぞ。趣味で書いてたとしても、時間が経つと人はやったこと忘れるから。
0185デフォルトの名無しさん2015/03/21(土) 09:04:57.36ID:tIU7X1pC
日本人が日本語に慣れてない外人の為に綺麗な文法で文字を書くことは必要ないでしょ
どんな汚い文でも「日本でおk」なんていわれることはあっても読めないことはないのだから
0186デフォルトの名無しさん2015/03/21(土) 09:34:51.56ID:NjRKtIY1
内部で文字列メンバーを抱えてるクラスが
getterで文字列クラスへのconst参照を外に見せてたら
文字列クラスを別のクラスに変えようとしても難しくなるよな?
0187デフォルトの名無しさん2015/03/21(土) 09:37:29.49ID:tIU7X1pC
オブジェクトのハンドルを返しては行けないのはあたりまえでしょ
0188デフォルトの名無しさん2015/03/21(土) 09:42:23.82ID:leCA2lLq
>>186
string返すようにすりゃ
実質問題でないだろ。
それも嫌なら内部にstringも
持っておけば良い。
0189デフォルトの名無しさん2015/03/21(土) 09:48:07.07ID:DIvWRuL5
コンテナ的なクラスだったら個々の要素に直接アクセスする方法があるべきだが、
そうじゃないクラスならそうじゃない。

あたり前か。
コンテナ的(悪く言えばオブジェクトの寄せ集め)なクラスしか作ったことない初学者だと、
「要素にアクセスできなきゃ意味ないし、getter/setter必要でしょ?」
と思い込んでしまうのかもしれない。
0190デフォルトの名無しさん2015/03/21(土) 09:49:17.97ID:kqW1gpJ+
>>185
同じ内容でも、ぐちゃぐちゃの文は読みにくく意味を取るのに余計な時間が掛かるし、
矛盾やら抜け漏れが起こりやすく、それが存在するかどうかも分かり難い。

要するにバグを含む可能性が高く、バグを直すのもそのぐちゃぐちゃの文に
手を入れないといけないとかメンテ性も悪いってことだな。
0191デフォルトの名無しさん2015/03/21(土) 09:53:39.63ID:DIvWRuL5
クラス入門記事とかで、ベクタークラスやストリングクラス中心に説明していると、
要素アクセスのことが最大の関心事なってしまうのかもしれん。
0192デフォルトの名無しさん2015/03/21(土) 10:07:24.24ID:eyl+kM++
csに汚染された僕は要素参照したいならポインタかスマポの配列にすればいいじゃないって思うんだ
set_Itemとget_Itemをメンバに追加して参照を返すop []とは決別するんだ
きっとcppの世界も安全で美しい世界になるよ
0193デフォルトの名無しさん2015/03/21(土) 10:10:12.71ID:nP6je3/T
IDが新しい言語っぽい
0194デフォルトの名無しさん2015/03/21(土) 10:14:13.18ID:HlA0yPUF
getter/setter乱造に対して、ここでは

カプセル化の失敗
実装依存インターフェース設計

この2点が問題点として挙げられてるわけだな

他にないの?
0195デフォルトの名無しさん2015/03/21(土) 14:23:38.37ID:ayQ8HKxK
まわりくどい、ってのは?
0196デフォルトの名無しさん2015/03/21(土) 16:19:49.11ID:CQIci0mN
>>195
何と比べて何がまわりくどい?
0197デフォルトの名無しさん2015/03/21(土) 21:05:22.24ID:wTPdkcAS
C#だと、メンバ変数をpublicで公開しておいても、
あとでプロパティに書き直せるんだぜ?
自動実装プロパティもあるから、
public int member { get; set; }
これだけでsetter/getterが用意されるんだぜ?
C++11にこういった仕組みがあれば良かっただけの話。
何故入らなかったんだろうね。
0198デフォルトの名無しさん2015/03/21(土) 21:15:06.83ID:H4vnCtpe
>>197=どうしようもないバカ
Think different? by 2ch.net/bbspink.com
0199デフォルトの名無しさん2015/03/21(土) 21:17:03.16ID:Wq5Rp15Z
え?
Think different? by 2ch.net/bbspink.com
0200デフォルトの名無しさん2015/03/21(土) 23:20:45.67ID:fi0av/ji
フィールドを丸出しの痴漢野郎が後からプロパティで取り繕うたって手遅れだよ
0201デフォルトの名無しさん2015/03/21(土) 23:29:26.96ID:/1WUKsZg
>>197
それはC#の欠点
0202デフォルトの名無しさん2015/03/22(日) 00:30:02.17ID:w9cAhcxl
>>196
publicで変数を公開するのと比べて。
0203デフォルトの名無しさん2015/03/22(日) 06:36:44.03ID:FADneXJj
変数の直接アクセスがダメって怒られたからgetter量産したJAVAドカタにしか見えない。
C++はリフレクションが無いんだからせめて
public virtual int member {get;set;} とか
public int member {get; private set ;}
にしないと意味無くね?
0204デフォルトの名無しさん2015/03/22(日) 10:48:32.65ID:EAPeSLEN
C++信者の教条主義にはうんざりだ
その正しい設計とやらが品質や生産性に与える影響の定量的データって存在するの?
0205デフォルトの名無しさん2015/03/22(日) 10:53:20.85ID:PKxDsRUX
c++はむしろそう言うの一番緩い気がするんだが。
仕様自体がなんでもありのカオス過ぎる。
0206デフォルトの名無しさん2015/03/22(日) 11:13:05.90ID:9ijd/r0x
>>205
信者の話だろ
俺の回りにはいないからよく知らんけど
0207デフォルトの名無しさん2015/03/22(日) 11:57:54.47ID:UD5BMgeo
そもそも境界を明確にしたくてやってる。getter/setter を何も考えすに増やしたら、境界が穴だらけで確認も一苦労だし
境界を動かしたくなっても大変だ

C++ だと境界があっても侵入してくる友達とかもいるしなあ
0208デフォルトの名無しさん2015/03/22(日) 11:59:13.94ID:FHqRUY0c
なんでも教条主義的なのは良くないね。
そういうやつはstd::pairのfirstメンバとsecondメンバもアクセッサ用意しろとか言うのかな?
0209デフォルトの名無しさん2015/03/22(日) 12:17:43.18ID:EAPeSLEN
境界を明確にすると、生産性や品質が向上するの?
定量的データは存在するの?
0210デフォルトの名無しさん2015/03/22(日) 12:19:03.03ID:CvAUvH6J
有るよ
0211デフォルトの名無しさん2015/03/22(日) 12:25:19.22ID:B74/Dr8M
>>204
カプセル化しろだとか
実装依存でインターフェース作るなだとか
それらは言語非依存の話だろ
0212デフォルトの名無しさん2015/03/22(日) 12:29:28.68ID:a4d1QeSf
>>208
コンテナは特例だろ
コンテナは全クラスの中の一割にも満たないだろうし
0213デフォルトの名無しさん2015/03/22(日) 13:19:59.45ID:f09FMk3S
>>212
うん、そうだね。
上の方でも書いたが、クラス入門記事を書いたサイトなんかでvectorを例にあげたものが結構多くて、ミスリードさせてる面があると思う。
コンテナを入門例にする弊害はもうひとつあるげど。
0214デフォルトの名無しさん2015/03/22(日) 14:24:44.71ID:KqEpS/vg
標準ライブラリはスネークケースなのに
なんでお前らはキャメルケースなの?
標準をリスペクトしろよ
0215デフォルトの名無しさん2015/03/22(日) 14:33:07.47ID:CvAUvH6J
標準と区別しやすい方が良い
0216デフォルトの名無しさん2015/03/22(日) 20:42:54.20ID:MxnNmn3I
関数テンプレートの部分特殊化を勉強中なのですが、テンプレートを駆使して実装すると、
ややこしいので実装に非常に苦労するのと、その時はどうにか理解できて動かせたとしても、
あとで見直すと何の処理しているのか思い出すのに時間がかかります。

それなら、部分特殊化などはせずに、それぞれの型に応じて、似たような関数を必要な個数だけ
書き下すほうが私には分り易いのですが、みなさんはどうでしょうか?
0217デフォルトの名無しさん2015/03/22(日) 20:51:01.26ID:+PdyLyEl
型はTYPEとして認識してるから、テンプレートのほうが抽象化されてて読みやすい。
0218デフォルトの名無しさん2015/03/22(日) 21:17:57.52ID:85Ajb4qC
C++のテンプレートはいわゆる黒魔術的なもので個人の知識欲を満たすには良いのですが現場では全く推奨されていません
テンプレートの利用は最小限で済むようにしっかりと設計をしましょう
0219デフォルトの名無しさん2015/03/22(日) 21:21:40.65ID:st2tKls6
んなこたー無い

そりゃ科学技術を悪魔の所業だと恐れる未開人の反応
0220デフォルトの名無しさん2015/03/22(日) 21:23:06.87ID:OTwiJSdy
テンプレート使うと型が曖昧になるとか言われてしまった
0221デフォルトの名無しさん2015/03/22(日) 21:26:54.53ID:+PdyLyEl
>>220
抽象化ってそういうもんだし、型を用途別に認識してるような人間には読みにくいと思う。
もっと透過的に総合的にTYPEとして認識していれば読みやすい。
0222デフォルトの名無しさん2015/03/22(日) 21:35:56.06ID:LZ22PPBw
この世界にはあなた方が思う以上に未開人がまだまだ居るんです
業務で書いたコードは誰が保守するかわかりません
ユーザーの事を真摯に考えるならば、テンプレートの多用は避けましょう

事実として設計が良くできたシステムではテンプレートの利用はそれほど多くなりません
逆に言えばテンプレートを多用していると、設計が雑なのではないかと疑ってよいでしょう

基本的なオブジェクト志向が出来ていれば実装する言語はなんでも構わないはずです
UMLで記述された設計書がC++でしか実装出来ないものになるでしょうか?
他の言語にはC++のテンプレートはありません
他の言語で実装できるものになぜテンプレートを使う必要があるのでしょうか
0223デフォルトの名無しさん2015/03/22(日) 21:39:47.48ID:+PdyLyEl
楽するためとコード量減らすため。
逆にウィローの密度が上がって上級者向けになる。

個人的には、組み込み型をそのままテンプレートクラスにしたものが欲しい。
継承してoperator*実装するわ。色々イテレーションさせるために。
0224デフォルトの名無しさん2015/03/22(日) 21:44:01.30ID:st2tKls6
設計が良くできていれば、template使った方がメンテ性は格段に上がる。
特に大がかりなプログラムになれば成る程ね。

規格もコンパイラやライブラリさえどうにかなるなら、その時点でなるべく新しい方にしておいた方がいい。
記述性もメンテ性も上がるし、諸々のサポートも長く続くしね。
0225デフォルトの名無しさん2015/03/22(日) 21:45:05.48ID:FHqRUY0c
>業務で書いたコードは誰が保守するかわかりません
レベルの低い人はいるが、それと共に生きていくか、切り捨てて競争に勝ちにいくのか。
会社によるとしか言いようがないな。
0226デフォルトの名無しさん2015/03/22(日) 21:47:00.39ID:+PdyLyEl
https://www.youtube.com/watch?v=cRDVQOduEx8
頑張れ明日のプログラマー。
0227デフォルトの名無しさん2015/03/22(日) 21:51:40.37ID:st2tKls6
>>222
つまりc++の殆どの標準ライブラリは設計の良くできていない糞と

まあ一部本当に糞な部分が存在するのは確かだが
0228デフォルトの名無しさん2015/03/22(日) 22:23:27.08ID:MxnNmn3I
templateの発想は良いと思うのですが、記述方法を
もう少し簡素に出来ないのかなと思います。
0229デフォルトの名無しさん2015/03/22(日) 22:25:20.60ID:Es/fnACy
ポインタ本を読んで分からないことがあったので質問させて下さい。

char str[10];
str="ABC";

これがダメな理由が分からないです。
静的領域に'A','B','C'という配列が出来て、"ABC"という文字列は配列の先頭アドレスを示すから
strという配列の先頭アドレスに、"ABC"を格納したアドレスが入るということではないのでしょうか?

本にはスカラやら色々書いてますがいまいち理解できませんでした。
0230デフォルトの名無しさん2015/03/22(日) 22:27:18.64ID:XbO38xnH
char str[10]の時点で、メモリのある場所に10個分のcharのデータが確保される
strはその場所を示してるだけで、後で変更不可能
0231デフォルトの名無しさん2015/03/22(日) 22:31:21.35ID:Es/fnACy
あ、そうか・・・
言われてみればそのとおりですね。 ありがとうございます。なぜこんなことで数時間悩んでたんだ・・・
0232デフォルトの名無しさん2015/03/22(日) 22:32:46.32ID:+PdyLyEl
char[10]っていう型なので、char*との型変換はサポートしてない。
0233デフォルトの名無しさん2015/03/22(日) 23:07:06.07ID:XatTIShe
いやでもSFINAEを多用したテンプレートバリバリの他人のソースコードを読みたいと思うか?
限度って物があると思う。
0234デフォルトの名無しさん2015/03/22(日) 23:15:40.78ID:+PdyLyEl
ある程度パターンあるからそれを知ってるかの違いだと思う。
constexper出来たのでSFINAEは減ってくと思う。
0235デフォルトの名無しさん2015/03/23(月) 00:27:31.31ID:M3nkBPPX
関数テンプレートを使うとソースコードが美しくなくなるのが
最大の問題だと思う。
templateとかtypenameとか似たよな名前が沢山出てくるのも変だし、
typenameでもclassでもいいとかも変だし、
特殊化する時に構造体使うのも変だし、全てが変だ。
テンプレートという考え方自体は良いと思うが実装のしかたに難があるなあ。
0236デフォルトの名無しさん2015/03/23(月) 00:34:57.95ID:nQj6e6EY
typenameの規制緩和は今度入る予定だ。
定型文だからそれこそ、そういう型だと思うべきでは?
0237デフォルトの名無しさん2015/03/23(月) 01:09:02.68ID:jYOEZXcw
緩和つーても、あれっぽっちじゃねえ。
typename前置みたいな糞ルールを片付けてくれるんならまだしも。

あとexport廃止も何だかねえ。
翻訳フェーズが再帰的にループするのは制御構造として別に汚くないのに。
0238デフォルトの名無しさん2015/03/23(月) 01:43:52.38ID:NupNPfA+
汎用的な処理以外でのtemplateは
設計ミスか黒魔術かもしれない
0239デフォルトの名無しさん2015/03/23(月) 02:09:57.00ID:mg7QYnuC
言語なんて自然言語を含めて変なところなんていくらでもある
C++イディオムについて行けないなら自分の知性を疑え
0240デフォルトの名無しさん2015/03/23(月) 05:44:33.15ID:xwACqlut
>>229-232
const char * s1 = "ab";
const char * const s2 = "cd";
char s3[] = "ef";

ここで、s1, s2 は変数だが、s3 は変数ではなく!、
配列の先頭アドレスの別名

ちなみに、書き込みできない rodata(ReadOnly)領域には、
ab, cd, s2

書き込みできる data 領域には、
ef, s1 が入る

また、書き込みできない rodata/text 領域は、
ファイルにデータがあるため、
スワップ領域に書き込まれないし、

同じアプリの複数プロセスで、
データが共有されるため、エコであり、
なるべく、const にした方がよい
0241デフォルトの名無しさん2015/03/23(月) 06:23:51.77ID:XTpYB3rU
C/C++ プログラムのコンパイルと実行
http://7ujm.net/linux/1.html
を見てコンパイルしていますが上手いこといきません。

ソースは次のとおりです。
0242デフォルトの名無しさん2015/03/23(月) 06:24:51.10ID:XTpYB3rU
# vi test.cpp
# cat test.cpp
#include <stdio.h>

class test{
public :
void out(){
printf("test test");
}
};

int main(char*args []){
test t;
t.out();
getchar();
return 0;
}
# gcc -o test.exe test.cpp
test.cpp:10:5: 警告: ‘int main(char**)’ の第一引数は ‘int’ であるべきです [-Wmain]
int main(char*args []){
^
test.cpp:10:5: 警告: ‘int main(char**)’ は 0 個または 2 個の引数のみとります [-Wmain]
/tmp/ccMmfykR.o:(.eh_frame+0x4b): `__gxx_personality_v0' に対する定義されていない参照です
collect2: エラー: ld はステータス 1 で終了しました
# g++ -o test.exe test.cpp
test.cpp:10:5: 警告: ‘int main(char**)’ の第一引数は ‘int’ であるべきです [-Wmain]
int main(char*args []){
^
test.cpp:10:5: 警告: ‘int main(char**)’ は 0 個または 2 個の引数のみとります [-Wmain]

何が原因なのでしょうか??
0243デフォルトの名無しさん2015/03/23(月) 06:31:49.23ID:91/eC9il
int main()
0244デフォルトの名無しさん2015/03/23(月) 06:33:26.87ID:nQj6e6EY
mainは規格上
<type> main(void);
<type> main(int,char**);
であると厳密に規定されていたと思う。
char**単体では何個の引数が入力されたか知ることは難しい。
0245デフォルトの名無しさん2015/03/23(月) 07:31:35.40ID:U7lhbTJw
>>244
ひとつ抜けとる
0246デフォルトの名無しさん2015/03/23(月) 07:34:25.08ID:nQj6e6EY
え?イジワルしないで追記してよ。
0247デフォルトの名無しさん2015/03/23(月) 07:53:36.32ID:QGdOu4B9
char**単体で何個の引数が入力されたか分かるやつ
0248デフォルトの名無しさん2015/03/23(月) 07:56:05.98ID:nQj6e6EY
え?標準C/C++でそんなことできるの?
0249デフォルトの名無しさん2015/03/23(月) 08:43:56.61ID:jYOEZXcw
(void)と(int,char**)以外は未定義じゃなく処理系定義だからな。
gccのアチラ製らしい尊大な言いぐさで242が混乱した、
本来なら「対応していません」と言う「べき」だった、
そういうことだ。
0250デフォルトの名無しさん2015/03/23(月) 08:52:32.61ID:h9PpfwFW
>>249
ここはC/C++スレではなくC++スレ
0251デフォルトの名無しさん2015/03/23(月) 09:15:36.21ID:U7lhbTJw
>>246
環境変数
0252デフォルトの名無しさん2015/03/23(月) 09:22:50.40ID:0V7gGH5J
>>249
そんな、うんこサイトで勉強するな。
0253デフォルトの名無しさん2015/03/23(月) 09:28:02.11ID:nQj6e6EY
>>251
あー、パースしないといけないから結構めんどくさいな。
Linuxの場合は環境変数のハッシュがあるんだっけか。
windows使ってるけどそんなことしないからなぁ。
0254デフォルトの名無しさん2015/03/23(月) 09:33:33.74ID:RnMSimPV
>>253
デタラメが多すぎてまるで狂った人のようになってる
0255デフォルトの名無しさん2015/03/23(月) 09:39:51.18ID:0V7gGH5J
envpが環境変数のハッシュ…
お里が知れるな
0256デフォルトの名無しさん2015/03/23(月) 09:49:40.19ID:h9PpfwFW
SJISののろいだな
0257デフォルトの名無しさん2015/03/23(月) 11:39:33.90ID:g/PuNzsZ
コピーコンストラクタとoperator=って、記述内容がいつもほぼ同じなんだけど、
二つの処理を共通化してしまうと、なにか問題でもありますか?

コピーコンストラクタでは *this = rhs; とだけ書いてしまって、
operator=だけにメンバの代入処理を記述するという方法です。
0258デフォルトの名無しさん2015/03/23(月) 11:51:57.29ID:octrM0VV
>>257
やるべきことはそれの逆だ。
0259デフォルトの名無しさん2015/03/23(月) 11:59:13.30ID:g/PuNzsZ
>>258
すみません、ちょっとよくわからないのですが、
operator=からコピーコンストラクタを呼び出せるということですか?
0260デフォルトの名無しさん2015/03/23(月) 12:03:23.29ID:/01WT41o
代入したい時は=を使いたいでしょ。関数にオブジェクトをコピーしたい時に
はコピーコンストラクタが必要でしょ。

=の演算子のオーバーロード時にコピーコンストラクタを使いたければどうぞ。
0261デフォルトの名無しさん2015/03/23(月) 12:04:45.20ID:/01WT41o
>>260

関数にオブジェクトをコピー
↓
関数の引数を通してオブジェクトをコピー
0262デフォルトの名無しさん2015/03/23(月) 12:12:34.45ID:h9PpfwFW
慣れの問題
そのるーるに馴染まなければ
代替"言語"を提示しましょ
0263デフォルトの名無しさん2015/03/23(月) 12:16:08.78ID:+XT1kww+
例を書いてみて
0264デフォルトの名無しさん2015/03/23(月) 12:38:38.58ID:h9PpfwFW
?
0265デフォルトの名無しさん2015/03/23(月) 12:55:42.31ID:octrM0VV
>>259
foo& operator =(const foo& src)
{
foo tmp(src); //コピーコンストラクタ
tmp.swap(*this); //情報入れ換え
return *this;
}
というイディオム
0266デフォルトの名無しさん2015/03/23(月) 13:09:01.60ID:g/PuNzsZ
>>265
fooクラスにswap(const foo& src)というメンバ関数を作成して、
そこにメンバの代入処理を記述するということですか?

そうなると、結局はコピーコンストラクタと同じような代入処理が
別のメンバ関数に存在することになりませんか?
0267デフォルトの名無しさん2015/03/23(月) 14:17:51.12ID:octrM0VV
>>266
代入ではなく入れ換え(swap)。
たとえば大きな配列をぶら下げたポインタだとしても、個々の要素を相互コピーなどせずポインタ値だけすげ替えればよい。
std::swapとかでぐぐってみれば?
0268デフォルトの名無しさん2015/03/23(月) 14:18:47.27ID:octrM0VV
>>266
そのswapにはconstはダメ
0269デフォルトの名無しさん2015/03/23(月) 19:39:09.35ID:jYOEZXcw
>>250
3.6 Start and termination[basic.start]
3.6.1 Main function[basic.start.main]
2 An implementation shall not predefine the main function. This function shall not be overloaded. It shall have a return type of type int, but otherwise its type is implementation-defined.
0270デフォルトの名無しさん2015/03/23(月) 22:13:35.52ID:KsjCjkkH
>>267
ポインタじゃないメンバは結局コピーなんだから>>257のやりたいことに対する回答としては的外れだな。
そもそも>>265のイディオムは、Effective C++では、他のオブジェクトをポインタで保持するクラスで自己
代入の場合でも安全にコピーする方法として紹介されているものだし。
ちなみに>>257の質問については、コピーコンストラクタからoperatoe=()を呼ぶのもその逆も間違いで、
共通部分があればそれをprivate関数にして両者から呼ぶようにするべきと説明されている。
0271デフォルトの名無しさん2015/03/23(月) 22:14:58.99ID:fVAELCtW
Effective C++で説明されてるってこと?
0272デフォルトの名無しさん2015/03/23(月) 22:39:04.03ID:KsjCjkkH
最後の段落のことであれば、そう。第3版p.57あたり。
0273デフォルトの名無しさん2015/03/23(月) 22:55:22.72ID:k7XREfiY
>>270
>ポインタじゃないメンバは結局コピー
std::vectorを値で持ってる場合とかは?

>自己代入の場合でも安全にコピーする方法
自己代入と言うより例外安全性の問題でしょ?

あと、Effective C++じゃなくてExceptional C++だったと記憶している。
0274デフォルトの名無しさん2015/03/23(月) 23:00:57.34ID:2qhNLH+n
&amp;hearts;
0275デフォルトの名無しさん2015/03/23(月) 23:05:30.55ID:k4Iv9Yid
こいつは多分swapがnothrowで実装できる場合が多い事を知らないし
例外安全性に対する認識もないんだろうな
その辺りの前提が無いとcopy & swapは回りくどく無駄な処理に見えても不思議ではない
0276デフォルトの名無しさん2015/03/23(月) 23:25:28.43ID:qYKKxyMs
結
0277デフォルトの名無しさん2015/03/23(月) 23:26:08.37ID:qYKKxyMs
結局どうなの?
0278デフォルトの名無しさん2015/03/24(火) 00:06:03.95ID:ci+F9ib3
毛っ、け、け、け(青森県の方言)
0279デフォルトの名無しさん2015/03/24(火) 07:00:15.11ID:OlMq8+E5
swapが意味あるメンバ以外はコピー代入で記述することになるから
結局>>265でもコピーコンストラクタとコピー代入のコードの共有にはならない。
0280デフォルトの名無しさん2015/03/24(火) 09:09:31.31ID:I6wG2MHB
>>270
コピーコンストラクタからoperator=を呼ぶのではなく、
Copyのような名前のメンバ関数を作っておいて、コピーコンストラクタからもoperator=からも
Copy(rhs);を呼ぶようにするということですね。

たしかにこれなら、コピーする処理のソースコードは一つにできそうです。
0281デフォルトの名無しさん2015/03/24(火) 10:49:21.59ID:y8D2IAAg
>>280
operator=からCopy(rhs)を呼ぶようにするなら、その関数内でメンバ変数への値の代入を順次やっていくように思えるんだけど。
x_ = a;
y_ = b;
z_ = c;
みたいにさ。
その問題点は分かってる?
0282デフォルトの名無しさん2015/03/24(火) 11:49:12.70ID:mcQ2KYMH
>>280
> たしかにこれなら、コピーする処理のソースコードは一つにできそうです。

くだらない手抜きを嬉しいと思う考え捨てないと危ないぞ
0283デフォルトの名無しさん2015/03/24(火) 12:56:58.37ID:XLDH32TT
同じ処理のコードを一つにまとめるのは手抜きじゃないだろ
0284デフォルトの名無しさん2015/03/24(火) 16:07:13.05ID:Y088m5Hx
>>283
あいつの場合は例外安全を身に付けるのが先

手抜き重視すると
「全メンバーに対する処理をswapとコピーコンストラクタの両方に書くのメンドクセ。
コピーコンストラクタがコピー代入を呼ぶようにすれば一ヶ所で済むんじゃね?」
に落ち着く
0285デフォルトの名無しさん2015/03/24(火) 16:32:34.89ID:CAAyuzcN
本当に手抜き重視するなら生ポインタでメンバー持たずにデフォルト生成のコピーオペレーターとコンストラクタで済ませる
0286デフォルトの名無しさん2015/03/24(火) 19:50:57.45ID:y8D2IAAg
>>285
まあそれでも代入演算子を定義するなら同じパターンが必要になるけどね。
実は必要ないってことがほとんど。
上でgetter/setterの話出てたけど、オレは基本代入演算子はdeleteだ。
0287デフォルトの名無しさん2015/03/24(火) 22:09:19.49ID:HjFfiljb
なんだか「ボクの読んだExecptional C++に書いてあったやり方以外は認めない」
って低能がいるようだな
0288デフォルトの名無しさん2015/03/24(火) 22:29:55.90ID:rpeH1el6
くだらない手抜きを嬉しいと思う考え捨てないと危ないぞ
0289デフォルトの名無しさん2015/03/24(火) 22:35:21.24ID:CAAyuzcN
手を抜けるところは抜くべきだろ
何言ってんだ
0290デフォルトの名無しさん2015/03/24(火) 22:41:25.26ID:rOFSYfDv
あと保守性だよな
同じコード2箇所に書いて片方だけ修正し忘れとか嫌
0291デフォルトの名無しさん2015/03/24(火) 22:46:37.72ID:rpeH1el6
>>289
おまえ下らない手抜きしてんのか?
どうしようもない奴だな。
0292デフォルトの名無しさん2015/03/24(火) 22:49:20.96ID:rOFSYfDv
下らない手抜きって、例えばどういう?
0293デフォルトの名無しさん2015/03/24(火) 22:52:48.14ID:CAAyuzcN
何かのネタかと思ってググってしまったよ…
0294デフォルトの名無しさん2015/03/24(火) 22:55:18.39ID:rpeH1el6
いや、わからん。
>>282のマネをしてみただけ。
0295デフォルトの名無しさん2015/03/24(火) 22:56:41.14ID:rpeH1el6
流れを追ってみたが、誰の発言がどうダメなのか判断できなくなって発狂してしまった。
許してください。
0296デフォルトの名無しさん2015/03/24(火) 23:00:08.42ID:rOFSYfDv
していたのは下らない手出しだったか
0297デフォルトの名無しさん2015/03/24(火) 23:01:42.41ID:07528NRI
>>292
この流れで出てる手抜き例は>>257だけかと
違ってたら他は知らん
0298デフォルトの名無しさん2015/03/24(火) 23:10:39.85ID:rpeH1el6
>>257か...
コピーコンストラクタは失敗しても構わない。だから operator = に依存しても別に構わない。

だけど operator = それ自体は例外安全を考慮する必要がある。(*thisの整合性を守らなければならない)
そうすると・・・

なんか循環してない?
0299デフォルトの名無しさん2015/03/24(火) 23:12:50.12ID:OlMq8+E5
始まりは>>258のような気がするな。
逆に突っ込まれたのを取り繕おうとしてグダグダになるパターンのような。
0300デフォルトの名無しさん2015/03/24(火) 23:23:37.91ID:31iHMNlf
template<typename T> struct C1 {
T x,y,z;
void swap(T&r){std::swap(x,r.x);std::swap(y,r.y);std::swap(z,r.z);}
C1(const C1&r):x(r.x),y(r.y),z(r.z){}
C1&operator=(const C1&r){C1 tmp(r);swap(tmp);return*this;}
};

template<typename T> struct C2 { // 手抜き
T x,y,z;
C2(const C2&r){*this=r;}
C2&operator=(const C2&r){x=r.x;y=r.y;z=r.z;return*this;}
};
0301デフォルトの名無しさん2015/03/24(火) 23:25:48.60ID:CAAyuzcN
俺のオススメは >>285 にも書いたけど生ポインタをメンバーに入れず出来る限りコピーコンストラクタ、コピー演算子はデフォルト生成のものを使う
メンバーに可変長の配列欲しければstd::vector
コピー不可なポインタ持ちたければstd::unique_ptr

moveにも自動で対応してくれる
0302デフォルトの名無しさん2015/03/24(火) 23:27:30.38ID:X8yhOJK8
>>300
C1はネットの世界で一部の例外安全厨だけが言ってる
そんな回りくどいこと実務でやってたら干されたりクビになったり蹴られたり刺されたりするからやめとけよ
0303デフォルトの名無しさん2015/03/24(火) 23:44:44.24ID:rpeH1el6
>>299
あー
>>265がデタラメだから?
0304デフォルトの名無しさん2015/03/24(火) 23:55:30.28ID:rpeH1el6
>>301
すいませんが教えてください。
自分が作ったんじゃないクラスがA B のふたつあって、
A a;
と
B b;
をメンバに持つときってコピー演算子はどうしてますか?
0305デフォルトの名無しさん2015/03/25(水) 00:10:38.94ID:IfOZa4FK
設計について相談なんですが
class A : public Base {...};
class B : public Base {...};
std::vector< std::unique_ptr< Base > > objs;
objs.push_back( std::unique_ptr< A >( new A() ) );
objs.push_back( std::unique_ptr< B >( new B() ) );
異なるクラスを同一のコンテナに格納したくて抽象クラスを継承させる方法で試してみたのですが、純粋仮想関数が増えまくってやめてしまいました。
具体的にはコンテナに格納したオブジェクトの順番を管理したいのですが、何かうまい方法ありませんでしょうか。
0306デフォルトの名無しさん2015/03/25(水) 00:24:56.55ID:GA9WsxhK
>>304
何もしない
AかBがコピー禁止してるなら訳あっての事だろうから自動的にそれらをメンバーに持つクラスもコピー禁止

>>305
shared_ptrかweak_ptrで入れれば?
必要な所で派生の型で持っとく
0307デフォルトの名無しさん2015/03/25(水) 00:37:14.42ID:1YXCDFuZ
コピィ代入なんか使わない俺
スマポとか特殊なクラス以外でコピィ要らなくね?
どんな時に使うんだよ
0308デフォルトの名無しさん2015/03/25(水) 00:37:54.83ID:IfOZa4FK
>>306
dynamic_castして持っておくってこと?
dynamic_castって何となく抵抗あるんですよね。みんな普通に使ってるのかな。
0309デフォルトの名無しさん2015/03/25(水) 00:40:32.91ID:GA9WsxhK
>>308
違う
生成してshared_ptrに入れてそのまま持っとけばいいだろ
0310デフォルトの名無しさん2015/03/25(水) 00:42:06.53ID:2VS3tjRn
>>306
いや、AもBも別にコピーは禁止してないです。ただ例外発生の可能性はあり。
こいつらをメンバに持つクラスを作って、代入演算子も書かなきゃならないときのはなしです。
0311デフォルトの名無しさん2015/03/25(水) 00:44:29.60ID:GA9WsxhK
万が一知らなかった時の為に言っておくけど、
shared_ptr<A>をshared_ptr<void>に入れることが出来る。
順番を保持したいだけなら(それをどうするのか知らんが)std::vector<void>に突っ込めばいい

>>310
なんで代入演算子を書く必要があんの?
0312デフォルトの名無しさん2015/03/25(水) 00:47:50.97ID:2VS3tjRn
>>311
>なんで代入演算子を書く必要があんの?

問題のための問題です。
0313デフォルトの名無しさん2015/03/25(水) 00:53:27.12ID:IfOZa4FK
>>311
知らなかった!ありがとう。
いまパーサを書いててそのために順番が必要なんだ。
これで試してみます。
0314デフォルトの名無しさん2015/03/25(水) 01:16:54.43ID:GA9WsxhK
>>313
shared_ptr<Derived>から shared_ptr<Base>とか、キャストの必要ない方向へのポインタの変換なら出来る。
parserなら親子とか出てくるかもしれんが循環参照に気を付けなよ
0315デフォルトの名無しさん2015/03/25(水) 08:25:13.60ID:Cs/cNnzy
void型のポインタに突っ込むなんてまじでやめて
0316デフォルトの名無しさん2015/03/25(水) 08:36:25.42ID:GA9WsxhK
>>315
理由は?
voidポインタからキャストして使えと言ってるわけでは”ない”というのを理解して言ってるわけだよね?
0317デフォルトの名無しさん2015/03/25(水) 08:56:10.92ID:Cs/cNnzy
「キャストして使えと言ってるわけではないからvoid型ポインタは正しい!」

なんだこの理論
0318デフォルトの名無しさん2015/03/25(水) 09:06:09.40ID:GA9WsxhK
>>317
いやだからダメな理由言えよ
0319デフォルトの名無しさん2015/03/25(水) 09:17:47.71ID:Cs/cNnzy
void型ポインタがなぜ悪いかなんていまさら語る意味なんぞないし
パーサー用途と言ってんだからキャストして使わないなんて前提も無意味だな
0320デフォルトの名無しさん2015/03/25(水) 09:23:28.73ID:qHyR6V3I
ここのところずーっと
手抜き厨と反手抜き厨のバトルばかり
0321デフォルトの名無しさん2015/03/25(水) 09:27:55.13ID:GA9WsxhK
はあ…語れないなら黙っとけよ

よく知らない奴がアホに流されないようにshared_ptr<void>の有効な使い方の例が書かれたブログ記事置いとくよ

ttp://d.hatena.ne.jp/Cryolite/touch/20080122/p7
0322デフォルトの名無しさん2015/03/25(水) 09:37:38.66ID:xvQRm8Zy
>>320
うーん、>>281の質問に対して誰かが答えれば論点がクリアになると思うんだけどね。
自分としてはどっちの意見も100%いい悪いと断言できないと思う。
0323デフォルトの名無しさん2015/03/25(水) 09:47:15.66ID:xvQRm8Zy
>>321
ああデストラクタ呼び出しですか。
目的は違うけどstd::functionがやってる技法使うやつ?
0324デフォルトの名無しさん2015/03/25(水) 19:36:09.60ID:IhUE1Xul
//1
template<typename F>
void g( F f){
f();
}
//2
template<typename F>
void g(){
F f;
f();

}
1も2もあるのに
なぜ1がつかわれるのですか?
0325デフォルトの名無しさん2015/03/25(水) 19:38:59.43ID:YRj0jYVL
1は関数オブジェクトも渡せるからな
0326デフォルトの名無しさん2015/03/25(水) 20:09:20.15ID:sC+pepL9
それを言うなら関数ポインタだろて
0327デフォルトの名無しさん2015/03/25(水) 20:28:35.18ID:IATtsD4X
2だとfへ引数渡せないじゃん
0328片山博文MZ ◆T6xkBnTXz7B0 2015/03/25(水) 20:41:12.54ID:0It7vtDM
関数オブジェクトは状態を持つことができるからな。
0329デフォルトの名無しさん2015/03/25(水) 20:49:46.76ID:CQ7NAuEE
>>324
コストラクタに自由がないと困るよ
0330デフォルトの名無しさん2015/03/25(水) 20:50:54.98ID:Dwma7Few
JKにつきまとい事例
0331デフォルトの名無しさん2015/03/26(木) 14:16:39.05ID:9iu5R64g
74LS107
0332デフォルトの名無しさん2015/03/26(木) 17:08:05.75ID:BDjvcE7V
n桁のm進数の桁を入れ替えるプログラムを作りたいのですが、どうしたら効率的でしょうか。
桁数分(n個)ループを回すような愚直な方法しか思い付きません。

任意の並び替えを実現したいのですが、「○桁目を右に△個ずらす」ようなアルゴリズムでも構いません。
それを何回かやれば任意のケースに対応できると思うので。

nは16まで、mは64までに限っても良いです。
0333デフォルトの名無しさん2015/03/26(木) 17:40:04.67ID:4eocBIkU
char C[16];

swap(C[x], C[y]);
0334デフォルトの名無しさん2015/03/26(木) 18:10:22.30ID:DVfty8jF
二進数を考える。
左シフトはN*2^M 右シフトはN/2^Mだよな。
これを一般化して、N*Radix^Mで左シフト N/Radix^Mで右シフト
出来そうじゃね?
0335デフォルトの名無しさん2015/03/26(木) 18:15:03.52ID:DVfty8jF
結局POW使うんであればループは避けられん。か?
0336デフォルトの名無しさん2015/03/26(木) 18:19:03.95ID:nSqXA52d
設計に制限がなければ
n桁m進数表現クラスを作ってその桁を入れ替える、って素直にやるけど
0337デフォルトの名無しさん2015/03/26(木) 18:25:41.64ID:BDjvcE7V
自分で言うのもなんですが>>332に書いた愚直な方法だとコストはO(m^n)で最悪ですね。
0338デフォルトの名無しさん2015/03/26(木) 18:26:10.15ID:4eocBIkU
なるべく一変数(多倍長一変数も)でやりたいなら
m < 2 ^ k となる最小のkを見つけて2進k桁の移動をする。
0339デフォルトの名無しさん2015/03/26(木) 18:29:36.94ID:4eocBIkU
>>338だと全体の数値がいい加減だった。
各桁を一変数にいれたほうがいいな。
結局、数値を取り出そうとすると同程度のコストだ。
0340デフォルトの名無しさん2015/03/26(木) 18:32:38.24ID:nSqXA52d
n桁m進数をx (>0)とする
i桁の数字x_i = (x - (x / m^(i+1) ) * m^(i+1)) / m^i
^は指数演算 /は整数同士の割り算であまり切り捨て
i桁とj桁の入れ替えは
x = x + (x_i-x_j) * (m^j - m^i)
これで行けるかな?
0341デフォルトの名無しさん2015/03/26(木) 18:46:41.53ID:DVfty8jF
ttp://ideone.com/vghSif
手抜きで書くんだったらこんな感じだけど、数学的にやったらもっと別の解があるのかなー??
俺、数学ダメだから識者に任せる。
0342デフォルトの名無しさん2015/03/26(木) 20:10:26.73ID:BDjvcE7V
もし、任意の入れ替えを諦めてサイクリックな置換にだけ対応しようとしたらコスト減らせたりするでしょうか。

例えば8桁の
abcdefgh
を
ghabcdef
に入れ替えるようなケースです。
0343デフォルトの名無しさん2015/03/26(木) 20:19:07.25ID:BDjvcE7V
配列要素全部を入れ替えようとしなければ>>340で一発ですかね?
ちょっと考えてみます。
0344デフォルトの名無しさん2015/03/28(土) 18:45:50.47ID:EQ3zAKR0
ポインターって識別子として使ってもいいのか?
時間によって値が変わるとかないよな?
0345デフォルトの名無しさん2015/03/28(土) 20:37:48.75ID:/OKG1/Xj
問題ないよ、ポインタが有効な間は。
0346デフォルトの名無しさん2015/03/28(土) 20:38:30.01ID:EQ3zAKR0
非有効でもハッシュテーブルのキーとして使ってもいいですよね。
0347デフォルトの名無しさん2015/03/28(土) 21:42:14.53ID:HPuG9XXV
いいよ、ポインタなんてただの数字だよ。
0348デフォルトの名無しさん2015/03/28(土) 21:50:37.06ID:LYzvh/ES
数字 w
0349デフォルトの名無しさん2015/03/28(土) 22:02:14.95ID:wVsC1fdL
そりゃあ、数字だよな。10進数が16進数や2進数になってるだけだし。





でも、「数字」じゃなくて「数値」と言って欲しかった
0350デフォルトの名無しさん2015/03/29(日) 02:18:34.60ID:abbduuww
>>342
そりゃ、簡単にできる。
Rubyでは例えば、配列の先頭要素を削除する、shiftでも、
一々、別の配列にコピーしないで、同じ配列を使う

配列の要素のstart位置を、0から1へ変えて、
配列の要素数、lengthを1減らし、
要素[0]には、nilを代入する


同様に、start, end位置を管理すれば、
コピーすることなしに、その配列をそのまま使える
0351デフォルトの名無しさん2015/03/29(日) 03:38:15.93ID:gsIKbDqn
>>346
寿命が尽きたオブジェクトへのポインタを使った場合の動作は保証されないよ。
0352デフォルトの名無しさん2015/03/29(日) 04:28:35.51ID:xroka6Go
>>350
CやC++でも?
0353デフォルトの名無しさん2015/03/29(日) 11:01:04.14ID:gR6bL9ge
>>346
重複するぞ
0354デフォルトの名無しさん2015/03/29(日) 11:03:16.80ID:Z5FbvqDQ
>>353はハッシュとハッシュテーブルと連想配列の区別がついていない低能
0355デフォルトの名無しさん2015/03/29(日) 11:26:32.64ID:XfQU9N1R
>>351
ポインタを数値として使う分には問題ないよ。ポインタの参照先を扱うと未定義

>>354
無効になったポインタの値をキーにしたデータをハッシュテーブルにいつまでも入れておいたら再び有効なポインタになったときに重複するだろ
0356デフォルトの名無しさん2015/03/29(日) 13:11:30.32ID:gR6bL9ge
>>354
バカは引っ込んでなよ
0357デフォルトの名無しさん2015/03/29(日) 19:21:22.70ID:gsIKbDqn
>>355
C++11 では無効なポインタ(delete 後のポインタ)の値を読んだりするだけで未定義
だったけど、 C++14 からは間接参照や二重deleteを除いて処理系定義の動作に緩められてる。
いずれにしても移植性のある結果は期待できないわけで、問題ないとは言えないんじゃないかな。
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1438
> [Footnote: Some implementations might define that copying an invalid pointer value
> causes a system-generated runtime fault. ?end footnote]
0358デフォルトの名無しさん2015/03/29(日) 19:45:27.42ID:pAU/iMZP
>>357は処理系定義の意味を知らないバカ
0359デフォルトの名無しさん2015/03/29(日) 20:04:48.54ID:gR6bL9ge
整数型に変換しとけば問題ないでしょ
0360デフォルトの名無しさん2015/03/29(日) 20:43:00.72ID:5KSECsA5
整数型関係ねぇー
0361デフォルトの名無しさん2015/03/29(日) 21:09:07.47ID:gujvBUVq
定数が欲しいのか乱数が欲しいのか、それが問題だ。
0362デフォルトの名無しさん2015/03/29(日) 22:31:13.00ID:ovaSRUeB
>>360
お前の脳内ではそうなんだろうけど
規格厨的にはいろいろと問題が有るらしいのだよ
0363デフォルトの名無しさん2015/03/30(月) 00:10:33.24ID:i+YJuxFC
ポインタをポインタで持とうが整数で持とうが、
無効になったポインタをキーにして云々 には関係ないだろ。
0364デフォルトの名無しさん2015/03/30(月) 00:12:41.86ID:XE5s3OGY
char* p1, p2 = new char;
delete p2;
p1 = p2; //処理系定義の動作? これが??

意図は何だ???
0365デフォルトの名無しさん2015/03/30(月) 00:14:38.49ID:XE5s3OGY
あ、ミスった
char *p1, *p2 = new char;
サーセンw
0366デフォルトの名無しさん2015/03/30(月) 00:39:16.32ID:Ee2yddLD
そんなのよりこれが処理系定義、C++11までは未定義だったって方が信じられないんだが。
int a[4]={1,4,3,2};
std::sort(a,a+4);
0367デフォルトの名無しさん2015/03/30(月) 00:49:23.13ID:+8902R/b
>>364
この意味がわからないのか?
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1438
The current Standard says that any use of an invalid pointer value produces
undefined behavior (3.7.4.2 [basic.stc.dynamic.deallocation] paragraph 4).
This includes not only dereferencing the pointer but even just fetching its value. The reason for this draconian
restriction is that some architectures in the past used dedicated address registers for pointer loads and stores
and they could fault if, for example, a segment number in a pointer was not currently mapped.
0368デフォルトの名無しさん2015/03/30(月) 01:21:53.44ID:XE5s3OGY
うん、わからない。
アフォな俺にもわかるよう、君の言葉で言ってみてくれ。
0369デフォルトの名無しさん2015/03/30(月) 01:54:34.61ID:/0Skz+0T
まんま書いてるじゃないか。
アドレスレジスタに無効なセグメントのアドレス代入するだけで例外発生するCPUがかつてあったと。
0370デフォルトの名無しさん2015/03/30(月) 01:56:58.36ID:TWFsNKaT
>>367
アドレスレジスタが特殊で、そこに読んだり書いたりするタイミングで
副作用のある環境があるのね。バンク切り替えが要る処理系とかあるもんな。

draconianっていうけどさ、無効になったポインタを読み出すようなコードなんてそもそも書くか?おまえら。
0371デフォルトの名無しさん2015/03/30(月) 02:17:36.70ID:Ee2yddLD
std::vector::end() とか?
0372デフォルトの名無しさん2015/03/30(月) 03:19:14.10ID:qKq7fiSV
>>366
どうしてそれが処理系定義なの?
0373デフォルトの名無しさん2015/03/30(月) 03:24:35.79ID:cpFnfRt6
アドレスレジスタw
もう知らねーよそんな糞CPU
0374デフォルトの名無しさん2015/03/30(月) 03:31:19.22ID:Ee2yddLD
>>372
a+4は無効な参照先を持つポインタだろ
0375デフォルトの名無しさん2015/03/30(月) 05:54:35.16ID:9fB5zcnp
元の問題はどうでも良いんだけど誰か>>350をCかC++で実装する方法を教えてくれ
0376デフォルトの名無しさん2015/03/30(月) 07:40:04.74ID:N0uL9gGu
>>366
処理系定義ってことはポータビリティが求められる所に
使っちゃいけないコードってことだな
未定義と大差無いんじゃないの
0377デフォルトの名無しさん2015/03/30(月) 07:47:58.94ID:+221ILPC
>>366
嘘だろ?
0378デフォルトの名無しさん2015/03/30(月) 07:48:39.78ID:TkDhqs3A
>>374
なるほど
でもそんな処理系実際にあるのかな
0379デフォルトの名無しさん2015/03/30(月) 08:34:32.21ID:+221ILPC
>>374
んなこたーない。
0380デフォルトの名無しさん2015/03/30(月) 08:37:32.50ID:Ee2yddLD
>>379
じゃあどういう事だよ
0381デフォルトの名無しさん2015/03/30(月) 08:49:48.69ID:TWFsNKaT
配列の最終要素の次ってポインタとしては有効じゃないとダメなんじゃなかった?
よく知らんが
0382デフォルトの名無しさん2015/03/30(月) 09:43:40.26ID:Xp6r+luE
#include <iostream>
using namespace std;
struct B;
struct A{
virtual bool equal(const A* a){
return true;
}
virtual void f( const B* b)=0;
};
struct B:public A{
int c;
virtual bool equal(const A* a){
a->f(this);
return true;
}
virtual void f(const B* b) {}

};
int main() {
B b1, b2;
A& a1=b1,&a2=b2;
a1.equal(&a2);
// your code goes here
return 0;
}
このコードのエラーがどうしても取れません
何が悪いのか教えてください
0383デフォルトの名無しさん2015/03/30(月) 10:00:17.14ID:srztvLsH
自分だったら書かないコードだ。
力量を超えたプログラムしている可能性はないのか。実現したいことをできるだけ簡単に書く工夫をしたら動くとは思う。
0384デフォルトの名無しさん2015/03/30(月) 10:09:17.12ID:Ee2yddLD
>>382
エラーの内容ぐらい貼ろうね。一行一行読み下すかコンパイラに入れる手前をかけさせるからまともな解答を期待するならそれぐらいしようね。

const A* aからconstメンバー関数でないfは呼び出せません。
0385デフォルトの名無しさん2015/03/30(月) 10:12:02.63ID:Xp6r+luE
おかしいな、constやった時動かなかったのに
こんどconstやった時動いたわ
idoneのバグかな
0386デフォルトの名無しさん2015/03/30(月) 10:13:04.49ID:Ee2yddLD
>>385
バグってんのは間違いなくお前の頭だよ。
0387デフォルトの名無しさん2015/03/30(月) 10:18:02.65ID:jdEim0yl
>>383
難しくはないだろ
0388デフォルトの名無しさん2015/03/30(月) 10:23:00.22ID:srztvLsH
そしたらどこがエラーか教えてやれよ。
自分にはエラー特定ができない程度の難度だ。
関係ないがいまだに・=A[x]、A[x]=・といったオーバーロードで任意の読み書きを行うのが作れない。
0389デフォルトの名無しさん2015/03/30(月) 10:27:08.42ID:jdEim0yl
>>388
ダウンキャストとconstの2ヶ所くらいだろ。
どこが間違いか指摘が入ったところを書き換えるより、
コード書いた奴がひとつひとつ正しさを解説して見るのが手っ取り早いだろうな。
0390デフォルトの名無しさん2015/03/30(月) 10:31:28.33ID:Ee2yddLD
そんなレベルの人間が偉そうに説教垂れるのがこのスレ
0391デフォルトの名無しさん2015/03/30(月) 10:33:54.56ID:Xp6r+luE
#include <iostream>
using namespace std;
struct B;
struct C{
virtual bool f( const B* b) const{
return false;
}
};
template<typename T>
struct A:public T{
virtual bool equal(const A<T>* a){
return false;
}
};
struct B:public A<C>{
int c;
virtual bool equal(const A<C>* a){
return a->f(this);
}
virtual bool f(const B* b) const{
return c==b->c;
}
};
int main() {
B b1, b2;
b1.c=2;
b2.c=2;
A<C>& a1=b1,&a2=b2;
cout<<a1.equal(&a2)<<endl;
return 0;
}
出来たよ・・・2項メソッド問題を解決したよ。基底クラスを書き換えずにCとAを書き換えるだけで解決できる。もっといい方法あるかも。
0392デフォルトの名無しさん2015/03/30(月) 10:34:15.57ID:Xp6r+luE
CとAじゃなくてCとBね
0393デフォルトの名無しさん2015/03/30(月) 10:34:39.68ID:jdEim0yl
いや、ダウンキャスト関連の文法上の問題はないのか。
constだけのエラーならここで質問して得られる情報と同じことをコンパイラが喋ってくれるよな。
0394デフォルトの名無しさん2015/03/30(月) 10:42:48.88ID:Ee2yddLD
>>392
Cが基底クラスになってんのに基底クラスを書き換えずにとはこれ如何に
一言で言えば、糞コード晒してんじゃねえよですわ
0395デフォルトの名無しさん2015/03/30(月) 10:48:22.09ID:Xp6r+luE
CじゃなくてTが基底クラスなのが味噌な
0396デフォルトの名無しさん2015/03/30(月) 11:17:29.40ID:Xp6r+luE
#include <iostream>
using namespace std;
struct B;
struct A{
virtual bool equal(const A* a){
return false;
}
template<typename T>
bool f(const T* b) const{
return static_cast<const T*>(this)->g(b);
}
};
struct B:public A{
int c;
virtual bool equal(const A* a){
return a->f<B>(this);
}
bool g(const B* b) const{
return c==b->c;
}
};
int main() {
B b1, b2;
b1.c=2;
b2.c=2;
A& a1=b1,&a2=b2;
cout<<a1.equal(&a2)<<endl;
return 0;
}
Bだけ書き換えるだけでできた。2項メソッド問題は完全解決だわ。
0397デフォルトの名無しさん2015/03/30(月) 11:41:45.95ID:Ee2yddLD
>>396
BのequalにBではない型を渡したら一致しないダウンキャストで未定義動作
勉強の為にいろいろ試すのはいいが、いちいちここにその糞コード晒すな。
0398デフォルトの名無しさん2015/03/30(月) 12:03:12.42ID:Xp6r+luE
じゃあ、もう二度と晒さないし
このスレッドにも書き込まないし
二度と見ません




(まともな人はこうやっていなくなるんだろうな・・・)
0399デフォルトの名無しさん2015/03/30(月) 12:05:51.78ID:Ee2yddLD
>>398
糞コード撒き散らしてまともだと思ってるなんてめでたい奴だな
0400デフォルトの名無しさん2015/03/30(月) 12:11:13.47ID:Xp6r+luE
ID:Ee2yddLD
0401デフォルトの名無しさん2015/03/30(月) 12:12:27.32ID:IoC6Id9c
>>398
お前自分がまともだと思ってたのかw
まともな人はエラーメッセージくらい示すもんだがなw
0402デフォルトの名無しさん2015/03/30(月) 12:24:29.28ID:Ee2yddLD
>>400
だいたい
>>384 でエラーの理由も
>>397 で糞コードの問題点も挙げてやったのにお礼の一言も無し。まともな人のやることは理解できませんわ。
0403デフォルトの名無しさん2015/03/30(月) 12:43:40.20ID:qKq7fiSV
>>374
>>357,367 が挙げてる 3.7.4.2 [basic.stc.dynamic.deallocation] p4 の規定は
operator delete 関数で解放された領域を指すポインタの話。

配列終端を指すポインタの話は関係ないよ。
0404デフォルトの名無しさん2015/03/30(月) 12:53:12.19ID:Ee2yddLD
>>403
理由から言ったら同じ事じゃない?
OSにマッピングされてない領域を示したポインタを扱うだけで(dereferenceしなくても)未定義だったんでしょ?
それともnewした配列の範囲の次のアドレスだけ特別に許される規定でもあるんかね?
0405デフォルトの名無しさん2015/03/30(月) 13:12:54.74ID:qKq7fiSV
>>404
有効な配列の終端を指すポインタの振る舞いは別途規定されているから、それに
沿うように実装されていないといけない。

つまり、実際にマップされていないポインタのコピーもできないような環境に対する
実装(コンパイラ)であれば、配列終端アドレスがマップされた範囲に収まるように配列を
配置する義務がある。たとえばセグメントの終端に置かないように、とかね。
ユーザーは気にしなくていい。
0406デフォルトの名無しさん2015/03/30(月) 13:19:08.50ID:Ee2yddLD
>>405
そうなのか、知らんかった。ありがとう。
ついでにその辺の規格の記述どの辺に書かれてるか知ってたりする?
0407デフォルトの名無しさん2015/03/30(月) 13:47:14.01ID:qKq7fiSV
>>406
5.7, 5.9, 5.10 あたりのポインタを扱う加減算や比較について、配列終端を指す
ポインタの挙動が規定されてる。
加減算についての 5.7 [expr.add] p5 には "... the evaluation shall not produce
an overflow ..." とか書いてあったりする。
0408デフォルトの名無しさん2015/03/30(月) 14:01:55.63ID:+221ILPC
>>404
newした配列だけじゃなく、静的配列でも最後の要素の次のアドレスは有効だよ。
0409デフォルトの名無しさん2015/04/01(水) 23:46:03.74ID:PpKhxCtR
>>369
thx
亀レスすまそ
0410デフォルトの名無しさん2015/04/02(木) 01:53:32.79ID:Ccy4QVUJ
楽しいのかもだけど、青春時代にc++の重箱の隅を突くぐらい不毛なことないからな
0411デフォルトの名無しさん2015/04/02(木) 07:12:16.76ID:yahBsgVN
それは私のことですか?
0412デフォルトの名無しさん2015/04/02(木) 07:19:42.69ID:5Z3Wm1GR
そうです
0413デフォルトの名無しさん2015/04/02(木) 07:25:31.79ID:yahBsgVN
涙が出ちゃう
0414デフォルトの名無しさん2015/04/02(木) 10:00:14.05ID:IrSjfvol
もうどこで使われてるかもよくわからない言語なんだよなぁ・・・
cは組み込み系でガッツリ生きてるけどc++はコンシューマゲーム業界以外どこで使われてるん?
0415デフォルトの名無しさん2015/04/02(木) 10:17:48.78ID:u14NoDB/
ブラウザとか
0416デフォルトの名無しさん2015/04/02(木) 10:22:19.72ID:3p4oNCvA
CGソフト作ってます
0417デフォルトの名無しさん2015/04/02(木) 10:55:45.95ID:9YRqykbo
>>414
WEBアプリ以外のメジャーなソフトは殆どみんなC++で書かれているよ。
速度を要する分野で、ある程度以上大きなソフトだと現状C++以外に選択肢がない。
0418デフォルトの名無しさん2015/04/02(木) 19:59:17.85ID:pjalxKw1
linux
apache/nginx
mysql
perl/php/python

これ全部C++で書かれてるのにな
0419デフォルトの名無しさん2015/04/02(木) 20:06:13.16ID:uxRlyB0w
linuxは違うだろ
0420デフォルトの名無しさん2015/04/02(木) 20:14:48.35ID:OJF0+RMs
今は質の低いプログラマー向けのコンパイラーと
質の高いプログラマー向けのコンパイラーと二分化されてるから
質の低い世界に住んでいる人はC++が使われていることを知らないんだろうな
0421デフォルトの名無しさん2015/04/02(木) 20:17:30.48ID:mly0Vlsl
linus は C++ を毛嫌いしていた、とは有名な話
0422デフォルトの名無しさん2015/04/02(木) 20:18:16.39ID:mly0Vlsl
>>420
>質の低いプログラマー向けのコンパイラー
>質の高いプログラマー向けのコンパイラー
具体的に何と何?
0423デフォルトの名無しさん2015/04/02(木) 20:18:19.86ID:vn5gNo4y
てか、使い難いよ?C++は(´・ω・`)
0424デフォルトの名無しさん2015/04/02(木) 20:30:08.07ID:IrSjfvol
>>420ってほんとこのスレの癌だよね。
質問者に対してネット弁慶のようなレスしかしない。解答者にも絡んでくるけど。
0425デフォルトの名無しさん2015/04/02(木) 20:31:28.75ID:IrSjfvol
その他の回答くれた方々はありがとうです。
技術者が使うツールなどを作る時は結構使われてるんですね。
0426デフォルトの名無しさん2015/04/02(木) 20:33:12.02ID:LIO982Si
コンパイラもVMも最近はCからC++に移行するのが大勢じゃね。
Cが残っているのはもう少しリソースの厳しい低レベルな処理
0427デフォルトの名無しさん2015/04/02(木) 21:22:16.97ID:mhyCTgAk
mysql,postgresql,sqlite

C++はどれ?
0428デフォルトの名無しさん2015/04/02(木) 21:40:55.08ID:Rb/VTf7B
>>413
青春なんていつだってやってくらぁ
0429デフォルトの名無しさん2015/04/02(木) 21:45:44.80ID:mly0Vlsl
>>427
mysql
他は C
0430デフォルトの名無しさん2015/04/02(木) 22:28:14.99ID:pGoFdtSH
apacheとnginxはC++じゃないよな?
0431デフォルトの名無しさん2015/04/02(木) 23:18:06.88ID:bPm0KiLV
vectorの各要素のアドレスを16バイトにアライメントしたいのですが
allocatorを自作しなければならないのでしょうか?
0432デフォルトの名無しさん2015/04/02(木) 23:18:41.35ID:3p4oNCvA
はい
0433デフォルトの名無しさん2015/04/02(木) 23:19:47.15ID:1IqOBimZ
低レベルプログラマ御用達のC言語www

みたいな煽り
0434デフォルトの名無しさん2015/04/02(木) 23:26:22.49ID:LIO982Si
なんで低レベルが変な意味に解釈されているんだ?
0435デフォルトの名無しさん2015/04/02(木) 23:50:56.01ID:k9SRa5UQ
組み込みはバカだから、C++をまともに使えない。
0436デフォルトの名無しさん2015/04/03(金) 00:31:51.57ID:gU7tQdFv
>>433
Cで開発されているものは低レベルのが多いだろ
0437デフォルトの名無しさん2015/04/03(金) 07:51:18.99ID:l1j02Vyo
プログラミングの世界で「低レベル」は
「無能」という意味ではなくて
「ハードウェアに近い領域」という意味だよな?
0438デフォルトの名無しさん2015/04/03(金) 12:15:39.54ID:WBIDg/yV
普通のPG「低レベルが好きです」
バカニート「低レベルが好きです」
0439デフォルトの名無しさん2015/04/03(金) 12:23:10.34ID:lmmcTvrc
>>438
うまくないな
0440デフォルトの名無しさん2015/04/03(金) 12:24:38.90ID:oM2wNwa8
日本人はレベルの意味が分かってないからな
ドラゴンクエストの影響だろうな
段が低いプログラムと訳せばすぐわかるだろ
0441デフォルトの名無しさん2015/04/03(金) 12:44:52.89ID:CKFmHz34
最近はPCのBIOSみたいなところとか、機械制御とか、低レベルな世界でもC++増えてる
0442デフォルトの名無しさん2015/04/03(金) 12:57:41.37ID:5y9eBdTs
低レイヤーの方がわかりやすいと思う
0443デフォルトの名無しさん2015/04/03(金) 13:20:43.97ID:MqJmbX9B
ふつう低水準と言うだろ
0444デフォルトの名無しさん2015/04/03(金) 20:17:26.93ID:iCpO92hv
海外の論文読むとみんなlow levelと書いてるぞ
0445デフォルトの名無しさん2015/04/03(金) 21:22:51.48ID:VzIRpAhA
・ローレベル
・低水準
・低レベル
それぞれニュアンスが違うね

つなみにロー水準は聞いたことがない
0446デフォルトの名無しさん2015/04/03(金) 23:14:17.92ID:1fmbbdAS
c++の代わりの言語が現れないのはなんd?
0447デフォルトの名無しさん2015/04/03(金) 23:16:12.54ID:6Ne83I+L
沢山現れてるけど定着してないだけなんじゃないかな?(´・ω・`)
0448デフォルトの名無しさん2015/04/04(土) 00:09:01.67ID:b1B36uxJ
Goとかグーグルは結構マジなんじゃないか。
0449デフォルトの名無しさん2015/04/04(土) 02:34:01.42ID:Q4sSBebL
C++14どっぷりのコードなんてもう別の言語じゃねーか。
0450デフォルトの名無しさん2015/04/04(土) 08:02:12.42ID:Y86GgH66
>>448
Go の言語仕様見たけど、良くできてると思う
Visual Studio が対応したら乗り換えてもいい
0451デフォルトの名無しさん2015/04/04(土) 11:42:51.25ID:bWOLWnuf
幾ら今性能が良くても10年後どうなってるから保証はないからな
結局生き残るのは変化し続けられる拡張性の高い言語だと思うな
0452デフォルトの名無しさん2015/04/04(土) 11:45:15.56ID:Qb3r1pUW
つまりD言語最強伝説
0453デフォルトの名無しさん2015/04/04(土) 11:55:59.65ID:aY+BpC5w
今でもコボルとかK&RとかVisual C++ 6.0が現役で残ってる所があるのに
ばかも休み休み言え
大切なのはドカタにヒットするか否か
0454デフォルトの名無しさん2015/04/04(土) 18:14:49.27ID:u9UoiVR2
ブラック企業でしょ?
0455デフォルトの名無しさん2015/04/04(土) 20:36:43.32ID:Y86GgH66
>>454
さすがに新規はないだろうから、むしろお固いメーカー系とかの保守じゃね?
0456デフォルトの名無しさん2015/04/04(土) 21:13:47.50ID:GZJxoxqq
IBMの人と話すとCOBOLが現役と思ってる人が結構いて
カルチャーショックを受けるわ
0457デフォルトの名無しさん2015/04/04(土) 21:15:37.79ID:YGBBXr+7
COBOLなんて就職して初めて聞いた
未だにどんな言語なのかも知らない
0458デフォルトの名無しさん2015/04/04(土) 21:27:13.48ID:IZnxY6Ah
COBOLは、英文に近い表記で処理内容を記述する言語。
Fortranが、数式に近い表記でそうするように。

再帰ができず、変数がすべてグローバル。
つまりスタックがないということだ。

10進演算が基本なのでCで0.1にいじめられた人が泣いて喜ぶ。
ポインタがないのでCで(ry
0459デフォルトの名無しさん2015/04/04(土) 21:33:14.65ID:YGBBXr+7
COBOLって破壊工作とかに使う言語なの?
0460デフォルトの名無しさん2015/04/04(土) 21:34:38.44ID:IZnxY6Ah
しーっ!!
本当のソフトウエアクライシスを ごほっ ごほっ
0461デフォルトの名無しさん2015/04/04(土) 23:51:14.83ID:tv8NjFyX
でーたべーすやバッチ処理と相性がいいから
真のドカタを目指すなら身に付けるべき
0462デフォルトの名無しさん2015/04/05(日) 02:28:58.61ID:ADR7fkz9
divide(a).by(b).giving(c).remainder(d);
0463デフォルトの名無しさん2015/04/05(日) 03:50:23.84ID:dbx3NX/g
コボラーってのはデータベース第三正規化の概念を持っていないのでデータベースが苦手なんだよ
リレーションとドメイン(値域)とカーディナリティが理解できないので
商品マスタと売上明細テーブルがあったらなぜか商品マスタに顧客IDが紛れてたりする
Cをやらせるとf001,f002…みたいな名前の関数が100個ぐらい出来上がる
変数はグローバルオンリー
COBOL自体が社会のインフラストラクチャに対する破壊工作みたいなもの
0464デフォルトの名無しさん2015/04/05(日) 08:18:37.11ID:DrA9WGfs
そうだったのか。
0465デフォルトの名無しさん2015/04/05(日) 09:46:54.28ID:tP/np3Hb
void GetHoge(Hoge& hoge):
関数があったとして
const Hoge hoge;// constとして扱いたい
GetHoge(const_cast<Hoge&>(hoge));
これって問題あり得ますか?
0466デフォルトの名無しさん2015/04/05(日) 09:48:58.95ID:tP/np3Hb
ちょと間違って伝わりそうですね
勿論GetHoge関数の中でconstではなく
Getして、その先constとして扱いたいという意図です
0467デフォルトの名無しさん2015/04/05(日) 09:55:48.93ID:QXMk1mSi
>>466
不毛な議論が湧くといく問題があります
言語仕様上は問題ありません
0468デフォルトの名無しさん2015/04/05(日) 10:48:16.27ID:ZB+STXk4
Hogeという名前が大きな問題です
0469デフォルトの名無しさん2015/04/05(日) 10:51:46.20ID:AP5T/bEV
プログラムに宗教を持ち込むのには反対です
自分が使用する、使用しないの範囲にしてください
0470デフォルトの名無しさん2015/04/05(日) 10:55:16.66ID:odxgurOZ
>>467みたいに言語仕様を知らないバカが存在するから不毛な議論が湧く。
「constで宣言された変数を書き換えた結果は不定である。」が言語仕様だから>>467は間違い。
0471デフォルトの名無しさん2015/04/05(日) 11:05:43.37ID:wZq+dpj7
どうしてもやりたかったら、const参照する変数作ってそっちを使うとかだな。

Hogeを返す関数作れば良いんじゃね。
0472デフォルトの名無しさん2015/04/05(日) 11:09:31.17ID:cAbKejSY
constってなんだっけ?
C++11でconstの意味が大きく変わってついて行ってないわ
0473デフォルトの名無しさん2015/04/05(日) 11:20:48.65ID:ADR7fkz9
もしかして: constexpr
0474デフォルトの名無しさん2015/04/05(日) 11:30:03.89ID:ZSoXTOOk
ハーブサッターやスコットメイヤーが言う
「constがマルチスレッド対応の意味に変更」は
標準ライブラリの設計ポリシーの話をすり替えている
だけなので信じてはいけない
0475デフォルトの名無しさん2015/04/05(日) 11:32:56.90ID:ooAp89VB
const_castは元のオブジェクトがガチでconstでない時以外はダメでしょ。
int a;
const int& b = a;
に対して
const_cast<int&>(b)=4;
はいいが、
const int b;
に対してやったらアウチ
0476デフォルトの名無しさん2015/04/05(日) 11:44:39.16ID:g7UffUWg
元が非const→ひょっとしたらいいかも→わかる
初期化直後だけはいいですか?→んなわけねーだろ
0477デフォルトの名無しさん2015/04/05(日) 12:35:34.30ID:CGkbVOZ+
>>465
そのケースはconst_castの正しい使い方の典型例だから問題なし
0478デフォルトの名無しさん2015/04/05(日) 12:50:53.90ID:rAca8ckP
会話のできないアスペです。
0479デフォルトの名無しさん2015/04/05(日) 14:18:50.90ID:BDu3Qsud
組み込み系だと、const で宣言した変数が ROM 上に確保されることがあるから、const_cast しても書き換えられないということがあり得る
0480デフォルトの名無しさん2015/04/05(日) 14:36:00.32ID:ADR7fkz9
475のaがROMに行くようなのはセクション定義でタコやらかしてるってだけ
0481デフォルトの名無しさん2015/04/05(日) 15:27:49.26ID:Vu7rbLCF
>>479
デバッガでも値の書き換えができなくて一時間ぐらい悩んだことあったわw
0482デフォルトの名無しさん2015/04/05(日) 23:09:52.62ID:Ml+kBWFS
>>480
475の上の例は合法だって言ってんだからROMおくりになるわけねーだろ
0483デフォルトの名無しさん2015/04/06(月) 00:20:22.16ID:nCXQ8Uh1
Intel C++ Compiler for Linuxって1つのシリアルナンバーにつき1台にしかインストールできない?
0484デフォルトの名無しさん2015/04/06(月) 00:21:23.29ID:sz0/lsVF
購入した製品の使用許諾を読んでください
0485デフォルトの名無しさん2015/04/06(月) 01:29:03.02ID:m+KJDtq5
べき乗を返すpow()の代替について考えています。
インライン関数で実装できたら良いと思うんですが、何か良い方法というか一般論はないでしょうか。
0486デフォルトの名無しさん2015/04/06(月) 02:15:25.25ID:jHKWPtxv
普通に foo*foo って書いちゃったほうが楽かもしらん
0487デフォルトの名無しさん2015/04/06(月) 02:17:33.62ID:KWrrkyNb
何のために代替したいのか分からんと
0488デフォルトの名無しさん2015/04/06(月) 03:02:05.32ID:nCXQ8Uh1
>>486-487
すみません。
ループの中で何度も呼ぶpow(a, b)を高速化したいと考えました。
a, bは任意の値なので自力で書き下すのは不可能です。
04894852015/04/06(月) 03:03:24.17ID:nCXQ8Uh1
IDが変わった上にかぶっていますが485です。
0490デフォルトの名無しさん2015/04/06(月) 03:10:50.96ID:KWrrkyNb
>>488
実数べきが必要なの?自力で書けないというんだからそうなんだろうけど
そうなら素直にpow使うしかないだろ
インライン化での高速化なんてわずかだよ
ちなみに強制インライン化はVCなら__forceinline
GCCなら__inline__ __attribute__((always_inline))
で出来る
0491デフォルトの名無しさん2015/04/06(月) 03:11:09.71ID:AEDCz7+8
powは、その一般論で実装されてる
計算の方が時間がかかるのでインラインで書いても高速化は期待できない

例えばaが2固定、bが63(31)以下ならシフトで高速化とかできるけど、任意じゃ無理だね

ループから追い出す方法考えろ
04924852015/04/06(月) 03:40:51.66ID:csWIwiDC
>>490-491
勝手なイメージで標準ライブラリのpow()は遅いと思っていました。
せめて関数呼び出しのオーバーヘッドを除ければと思ってインラインと言ったのですがそれも微妙なようですね。

数値計算をやっているのですがアルゴリズム的にループの外にpow()を追い出すのは難しいです。
0493デフォルトの名無しさん2015/04/06(月) 04:03:13.27ID:KWrrkyNb
ループってことはベクトル・行列なんじゃないの?
詳細が分からないけど、場合によっては適切なベクトル・行列演算ライブラリを
探せれば高速化できる
インライン化なんてものは忘れたほうが良い
04944852015/04/06(月) 04:27:37.90ID:J5Wu6+2V
>>493
行列行列積はblasでやっていますが、それ以外の自分で実装せざるを得ない箇所がボトルネックになっています。
pow()は追い出せないとしてもループ構造について少し考えてみます。

ありがとうございました。
0495デフォルトの名無しさん2015/04/06(月) 12:04:57.14ID:FmIxDu06
powが2乗とか簡単な計算ばかりするなら効果あるけど
浮動小数点とか桁数が大きければ全く効果ない
0496デフォルトの名無しさん2015/04/06(月) 12:10:16.54ID:EluQw0m1
まずは実測してから考えろ。
POWが遅くしていて、そこを改善する以外に手がなくなってからでいい。
0497デフォルトの名無しさん2015/04/06(月) 14:14:51.09ID:UfNBjhwR
>>485
このへん、参考になるか?
http://labo.xo-ox.net/article/89320345.html
0498デフォルトの名無しさん2015/04/06(月) 15:42:48.35ID:EluQw0m1
アルゴリズム全般を変更してをPOWを呼ぶ回数を減らすとかでもいいわけで。
あとは同じ数でPOWを使うケースがあるなら結果をcacheしとくとか。
0499デフォルトの名無しさん2015/04/06(月) 15:43:45.99ID:UfNBjhwR
数学的に式を変形だろまず
0500デフォルトの名無しさん2015/04/06(月) 16:47:43.17ID:KWrrkyNb
マシンもOSもコンパイラも詳しい要件も分からないんじゃ俺らにアドバイスなんて出来んわそもそも
0501デフォルトの名無しさん2015/04/06(月) 16:51:26.46ID:PufGX+Fr
>>500はつまり、アスペ
0502デフォルトの名無しさん2015/04/06(月) 20:57:04.31ID:rbpG+7VY
>>501
アドバイスできるならしてやりなよ
>>500 じゃないけど、俺にも無理
0503デフォルトの名無しさん2015/04/07(火) 06:37:49.78ID:V4a6/AQt
苦しんで覚えるc言語って本が面白くて分かりやすかったので
次はc+勉強しようと思うのですが、お勧めの入門書籍教えて頂けませんか…
0504デフォルトの名無しさん2015/04/07(火) 06:48:47.64ID:V4a6/AQt
と思ったら書籍専用スレがあった…すいませんでした
0505デフォルトの名無しさん2015/04/07(火) 07:26:26.37ID:oZeWhsk3
C++では、ロベールが有名だっけ?
0506デフォルトの名無しさん2015/04/07(火) 07:33:32.21ID:v4cb0BJk
VCでデバッグしながら覚えたなぁ。
VCのデバッガ優秀だからステップ実行しながらバグつぶしてたら感覚がつかめた。
基本クラス書かないし、構造体もTupleで済ませてるし。
Cから追補する内容があんまりない。ライブラリ覚えるくらい。STLの作法とか。

そうだ、Tupleにメモリオーダーの保障付けてほしい。
ファイルに一気に書き出すときにわざわざ分解して構造体に書き出さなきゃいかんハズ。
メンドくせー。

あと、以下のサイトで最新を追ってる。
http://cpplover.blogspot.jp/
http://faithandbrave.hateblo.jp/
0507デフォルトの名無しさん2015/04/07(火) 07:46:38.08ID:1BnTCMqM
Windows via c/c++が良くできてるよ
0508デフォルトの名無しさん2015/04/07(火) 10:10:11.66ID:bTzwYy+4
ファイル書き出しはもともとそういうもんだろ
エンディアンだとかパディングだとか色々ありすぎて
メモリイメージをそのまま書き出しなんかトンデモ系だし
vc使いならシリアル化って日常だろ
0509デフォルトの名無しさん2015/04/07(火) 14:20:25.90ID:LBE26d+C
ビルゲイツの手先が現れたな
0510デフォルトの名無しさん2015/04/08(水) 19:23:36.04ID:emBlUbRp
pow(a,b)はbが必ず整数みたいな条件があれば高速化できそうだが、
bが一般だと難しいかもな。
0511デフォルトの名無しさん2015/04/08(水) 21:01:05.78ID:e6090r1Y
templateか何かで、条件がマッチするときだけ高速版を使う
とかはどう?
0512デフォルトの名無しさん2015/04/08(水) 21:27:23.58ID:/95dwa0a
コンパイルタイム計算に置き換えるとか。
0513デフォルトの名無しさん2015/04/08(水) 22:51:44.78ID:bms3DTdi
適当にテーブル作って、線形補間でもすれば?精度は落ちるが。
0514デフォルトの名無しさん2015/04/09(木) 01:05:04.07ID:5iBpwB+I
>>511
この場合は効果薄いでしょ
>>512
この場合は無理でしょ
0515デフォルトの名無しさん2015/04/09(木) 16:13:30.66ID:FMmlOnX0
指数が定数なら多項式近似するという手もある。
0516デフォルトの名無しさん2015/04/10(金) 00:16:06.36ID:nlVL+POW
>>488
aやbは配列?
ネックになっているのはキャッシュじゃないの?
0517デフォルトの名無しさん2015/04/10(金) 04:15:51.92ID:WWoe/A8a
>>516
ループ変数です
0518デフォルトの名無しさん2015/04/10(金) 04:22:43.06ID:eGKlq6HE
メモ化が早いかな多分。
0519デフォルトの名無しさん2015/04/10(金) 09:02:17.76ID:fXTADCyV
マルチコアに分散させるという手も
C#だとParallel.Forというのが有るみたいだけど
0520デフォルトの名無しさん2015/04/10(金) 09:20:42.23ID:Knd4Pp9G
C++にもOpenMPとか
0521デフォルトの名無しさん2015/04/10(金) 09:29:41.15ID:eUeD8SFS
え、ループ変数ってことは、aもbもまさかintなのか?
0522デフォルトの名無しさん2015/04/10(金) 14:02:55.25ID:jfiHW1sm
>>521
intです
0523デフォルトの名無しさん2015/04/10(金) 14:11:41.52ID:nlVL+POW
x = pow(a, b);
y = pow(a+n, b+n);
のように2つ以上書いたらどうか
0524デフォルトの名無しさん2015/04/10(金) 15:05:40.99ID:2bvOEv+M
>>523
aは-1で固定、bは16の5乗個くらいループします
0525デフォルトの名無しさん2015/04/10(金) 15:27:04.05ID:MJEeIOkg
!?
0526デフォルトの名無しさん2015/04/10(金) 15:35:20.61ID:nB31hCq9
算数もできねーのかよ。
(b&amp;1) ? -1 : 1;
0527デフォルトの名無しさん2015/04/10(金) 16:24:10.14ID:XYVxfdln
クソワロタ
0528デフォルトの名無しさん2015/04/10(金) 16:25:07.56ID:qlTKx4Z2
>>524
卒論か何かか?
悪いこと言わん、テーマ変えろ。
0529デフォルトの名無しさん2015/04/10(金) 17:00:36.70ID:m1Pw5dN4
別人がネタで言ってるんだろ、どう考えても
0530デフォルトの名無しさん2015/04/10(金) 18:18:17.83ID:R9t+SJrJ
>任意の
とは書いてるが任意の実数とは書いてなかったな
一本取られた
0531デフォルトの名無しさん2015/04/10(金) 19:56:27.65ID:h+8O1Nmp
自分で実装した多重ループはとりあえずブロッキングやろ
0532デフォルトの名無しさん2015/04/10(金) 20:21:20.83ID:EwSb4KYJ
ID違うし嘘だと思いたい
0533デフォルトの名無しさん2015/04/10(金) 21:09:58.20ID:jxWpgR7l
整数の剰余 a % b を%使わずに高速に解く方法ってありませんか?
条件としては、
aの符号、偶数、奇数かは不明
bは常に正の奇数、exe実行毎に値は変わるが、動作中の値は固定
余りは正で返す(例 -3 % 7 = 4)
値のレンジは32bit int、5000<b<50000くらいです。

よろしくお願いします。
0534デフォルトの名無しさん2015/04/10(金) 21:27:13.19ID:w4td4TOx
素直に演算器にまかせりゃいいのに。組み込みか?
0535デフォルトの名無しさん2015/04/10(金) 21:45:17.26ID:jxWpgR7l
組み込みではなく普通のPCですが、並列化出来ないforの中で一番計算量を食っているのが%なんです
浮動小数点だと1/bを事前に計算しておけば乗算にできるので、似たようなトリックが使えないかと考えていますがわかりません
0536デフォルトの名無しさん2015/04/10(金) 21:54:44.69ID:PbAFF08p
>>535
ttps://software.intel.com/en-us/forums/topic/288503
浮動小数点で割り算してからかけ算、引き算の方が速いらしいぞ
0537デフォルトの名無しさん2015/04/10(金) 23:03:54.11ID:p2fg6sTV
>>535
今速度に不満のあるコードのサンプルを書いてみてくれ
誰かがそれを速くするコードに直すかもしれない
0538デフォルトの名無しさん2015/04/10(金) 23:25:17.27ID:jxWpgR7l
>>536
誤差が気になりますが、試す価値はありそうですね

>>537
コード自体は非常に単純で、for文の中でひたすら%を計算します
一応ループ展開もしたんですが、そもそも%の回数がメチャクチャ多いのでそれ自体を無くしたいのです
0539デフォルトの名無しさん2015/04/10(金) 23:29:05.24ID:66gOXAhn
%を高速に計算する方法を考えるより%の回数を減らす方法を考えたほうがいいんじゃないか?
0540デフォルトの名無しさん2015/04/11(土) 00:12:30.64ID:450jiNSI
>>538
単純ならそのコードを書いてみなよ
それより速く動くコードを誰かが書ければいいんだろ?
0541デフォルトの名無しさん2015/04/11(土) 01:19:04.96ID:wSNin0w3
>>536
速いなんてどこにも書かれてないような気がするが。
まあ可能性はあるのかなぁ…と思ったが
divの回路つくるよりキャストして実数演算使ったほうが速いなら
CPU自体そういうバイパスする実装になってるはずじゃねーの?
0542デフォルトの名無しさん2015/04/11(土) 01:47:07.49ID:qEG89sYk
>>541
SSEには整数modがないのでシフトでごちゃごちゃやるしかないと書いてあるじゃん。
Z80かよと。
floatだとSSE2演算でできるので多分そっちの方が速い。
0543デフォルトの名無しさん2015/04/11(土) 08:13:22.23ID:DUtKJUYt
剰余 アルゴリズム
あたりで自分の求めているものを探したら?
0544デフォルトの名無しさん2015/04/11(土) 09:03:00.10ID:sEFyMtyE
除算は乗算式に変更できます。
実数ではa / b = a * (1 / b)です。
整数でも同じことができます。
大きい数cを用意して、a / b = a * (c / b) / cの変換を使います。
cを2べきにすればビットシフトに変換できます。
0545デフォルトの名無しさん2015/04/11(土) 10:39:21.75ID:wSNin0w3
>>542
SSE2はどうでもいいけど、除数が定数であるなら
確かに事前に(1/b)の実数用意して実数乗算ってのは速いっぽいな
>>544
でも除数が>>533みたいに任意の値をとる場合は
一般には「大きい数」が64bitの範囲を超えるだろうから使える戦略じゃないだろそれ
0546デフォルトの名無しさん2015/04/11(土) 12:26:33.94ID:R7AqMyz7
>>541
SSEのおかげで同時に同じ演算を複数件やるならfloatが速い。
整数を1個ずつ演算するときにそれを使わないのは当たり前だ。1個ずつのときに速いわけではないのだから。
0547デフォルトの名無しさん2015/04/11(土) 12:29:14.52ID:JNIRY6v4
>>545
> でも除数が>>533みたいに任意の値をとる場合は
> 一般には「大きい数」が64bitの範囲を超えるだろうから

533は50000未満だと言ってるぞ
0548デフォルトの名無しさん2015/04/11(土) 13:24:30.54ID:fItp2rC5
SSEやAVX使う前提なら乗算も除算も速度変わらないだろ
0549デフォルトの名無しさん2015/04/11(土) 13:51:35.44ID:HEeB3rJn
みなさんご意見ありがとうございました
まずは c = 1.0/b; a - b * (int)( a*c ) を、
あと544と同じことが↓に載っていたので試してみます。
ttp://stackoverflow.com/questions/980702/efficient-cycles-wise-algorithm-to-compute-modulo-25
0550デフォルトの名無しさん2015/04/11(土) 14:08:08.07ID:fItp2rC5
コンパイラ何か知らんけど最近のPCなら1つの実数演算でもSSE/AVX使ってるから
除算を乗算に置き換えても効果ないよ。最初に逆数計算する分だけ僅かに遅くなる
SSE/AVX使って複数の計算を同時にやるようにするのでない限り今のIDIVを使う方法以上には速くならない
まあやってみな。試してみれば分かるから
0551デフォルトの名無しさん2015/04/11(土) 15:14:55.21ID:00OQafp3
逆数計算は翻訳時に・・・と言おうとしたら、
1/bはもろ実行時除算じゃないか
言い出したやつpgr
0552デフォルトの名無しさん2015/04/11(土) 15:29:39.95ID:HEeB3rJn
>>550
除数が固定なので、乗算に置き換えられれば十分効果はあると思っているのですが。
なかったら諦めるだけです
0553Office & Gamers ◆G144Hzgh2.0e 2015/04/11(土) 15:54:57.31ID:qwyJf/Pv
そんなにスピードが気になるんだったら、全部テーブルで用意すればいいんじゃないのかw
0554Office & Gamers ◆G144Hzgh2.0e 2015/04/11(土) 16:07:14.38ID:qwyJf/Pv
あとはスレッド毎の設計のやり直しw
0555デフォルトの名無しさん2015/04/12(日) 02:15:49.77ID:5oPlUArh
ふつうは浮動小数点は整数演算より圧倒的に遅い
0556デフォルトの名無しさん2015/04/12(日) 02:27:30.24ID:YSMYgbxd
レイテンシもか?
0557デフォルトの名無しさん2015/04/12(日) 02:31:08.06ID:rANlTzQt
>>552
>>555
Core2で実際に逆数の実数積使ったのと整数剰余とをブン回したら
普通に一桁遅かったわ、実数が。

最近のスクリプト言語はdoubleしかねーの多いがパフォーマンスに限って言えば糞だな
0558デフォルトの名無しさん2015/04/12(日) 02:31:48.82ID:vpw/CkAA
>>553
aが整数でしかも範囲が決まっていてbは起動後固定ならそれが正解だね
テーブルルックアップにだって時間が掛かるからせいぜい30%程度の時短にしかならないだろうけど
0559デフォルトの名無しさん2015/04/12(日) 02:35:21.73ID:vpw/CkAA
DIV一発で出来る整数剰余がネックになる時点でシステム破綻してるんだよ
0560Office & Gamers ◆G144Hzgh2.0e 2015/04/12(日) 02:35:22.48ID:qV7OJBYF
>>558
スレッド割り当て見直しで何とかしろw
0561Office & Gamers ◆G144Hzgh2.0e 2015/04/12(日) 02:39:45.73ID:qV7OJBYF
>>557
>最近のスクリプト言語はdoubleしかねーの多いがパフォーマンスに限って言えば糞だな

スクリプトに明確な型変換が必要か?w
0562デフォルトの名無しさん2015/04/12(日) 02:42:30.96ID:rANlTzQt
あと黒歴史Prescottの整数除算がめちゃくちゃ遅かったらしいから
その頃のバッドノウハウ引きずってる人は多いかもよ
0563Office & Gamers ◆G144Hzgh2.0e 2015/04/12(日) 02:51:24.12ID:qV7OJBYF
まさかPen4使ってんのかw
0564デフォルトの名無しさん2015/04/12(日) 09:30:34.25ID:rYlzljDe
お前らスレ違いだから去れ
0565デフォルトの名無しさん2015/04/12(日) 11:05:29.80ID:owm43KXp
#include <iostream>
using namespace std;
template<typename ...T>
struct A:public T...{
auto f(){return 2};
};
struct B{
virtual auto f()=0;
};
int main() {
A<B> a1;
A<> a2;
cout<<a1.f()<<a2.f()<<endl;

return 0;
}
ベースクラスありと無しバージョンができません
教えてください
0566デフォルトの名無しさん2015/04/12(日) 11:43:54.51ID:6+WEXIqk
そりゃあるものをないことにはできないだろ
0567Office & Gamers ◆G144Hzgh2.0e 2015/04/12(日) 11:58:17.56ID:kx9iDNgY
>>565
それ何のために使うの?w
0568デフォルトの名無しさん2015/04/12(日) 11:58:59.27ID:SJx57Gdu
単なるサンプルコードに意味を求める低脳
0569Office & Gamers ◆G144Hzgh2.0e 2015/04/12(日) 12:01:23.73ID:kx9iDNgY
つまりサンプルコードが無能なんだなw
0570デフォルトの名無しさん2015/04/12(日) 12:28:17.35ID:3nL2tunA
いやできないとおかしいだろう
ISO/IEC 14882:2014 14.5.3p7
コンパイラーが腐っているのでは
0571デフォルトの名無しさん2015/04/12(日) 12:29:02.94ID:f/YMZojg
...見逃してたわすまそ
0572デフォルトの名無しさん2015/04/12(日) 13:13:43.23ID:h1PZ1sRJ
『できません』とはどのような状態なのか
『教えてください』とは何を教えて欲しいのか
565は釣り臭がプンプンする

それに仮想関数って戻り値を
virtual auto f()=0;
こんな書き方できないだろ
0573デフォルトの名無しさん2015/04/12(日) 13:48:58.78ID:Fa1sTouP
仮想関数の戻り値の所を修正したらコンパイル出来た
http://ideone.com/MW6UeR
0574デフォルトの名無しさん2015/04/12(日) 14:12:47.02ID:2c7YuQYF
書き方は統一しないとね。
 virtual auto f() -> int = 0; //virtualは返り値の型必須
 auto main()
0575デフォルトの名無しさん2015/04/12(日) 14:20:15.20ID:BtEXqKfw
c++03で任意の式の型を得る方法はありませんか?
0576デフォルトの名無しさん2015/04/12(日) 14:42:48.08ID:lWdBYxMn
>>575
type_infoをイソクルードしてtypeidします
0577デフォルトの名無しさん2015/04/12(日) 14:51:13.17ID:taPXD9k9
>>575
せっかくの レス番号が 無駄になってる

こうしきゃ

c++で 任意の式の 型を得る
0578デフォルトの名無しさん2015/04/12(日) 14:58:20.10ID:2c7YuQYF
中国の方ですか?
まあ任意の式の正確な型を得るのはC++14でも無理。
0579デフォルトの名無しさん2015/04/12(日) 15:50:19.70ID:Buy3OTWo
>>575
リフレクションみたいな事をしたいの?

decltypeが03にはないからなあ

でもdecltype(auto)も理解するのが最初はとまどった
0580デフォルトの名無しさん2015/04/12(日) 16:17:28.46ID:BtEXqKfw
出来ないようですね。残念です

>>578
私の日本語は変ですか?
こういう場合はどう書けば良いのでしょう
0581デフォルトの名無しさん2015/04/12(日) 17:19:09.35ID:Q2J6Pj1Z
A:public T...{
variadic templatesってこんなことできるのか...
0582デフォルトの名無しさん2015/04/12(日) 22:13:13.41ID:zsWDXSt6
>>581
基底クラスができるということは
当然ながらメンバーイニシャライザも
template<typename... base_types>
struct unko : base_types... {
 template<typename... U>
 unko(U... params) : base_types{params}... {
 }
};
0583デフォルトの名無しさん2015/04/14(火) 22:31:12.61ID:ZDLeXrwA
OpenMPの話なんだが、本スレとマルチスレッドスレがほとんど死んでるのでここで相談させて。
独立な2つの関数funcAとfuncBがあって、両方とも中で並列化可能なfor文を回してる
OpenMPを使って、それぞれに4スレッドずつ割り当てて同時に処理させたらシングルスレッドとほとんと変わらないくらい遅かった
やりかたは ttp://stackoverflow.com/questions/7916411/openmp-for-loop-inside-section を使った
で、片方に8スレッド割り当てて、funcA->funcBと順番に処理したらシングルの4倍位速くなった

これってなんで?単純に考えると前者の方が速くなりそうなんだけど
0584片山博文MZ ◆T6xkBnTXz7B0 2015/04/14(火) 22:36:13.64ID:WdcxbNEq
終わるのを待ってるんじゃね?
0585デフォルトの名無しさん2015/04/14(火) 23:20:54.36ID:8NHB2jrT
>>583
コアはいくつあるのよ?Hyper-Threading有効?
0586デフォルトの名無しさん2015/04/14(火) 23:26:48.74ID:LMD+MjqV
http://cpplover.blogspot.jp/2012/10/2012-09-pre-portland-mailing.html

これのN3386についてどう思う?
ていうか、プロトタイプ宣言でauto使えるのなら、
もうプロトタイプ宣言の意味なくね?

実装がcppにあって、宣言がhにあって、他のcppからはhをインクルードして
使うのが普通だと思うんだけど、プロトタイプ宣言にautoがあったら、
何の情報にもならないし、コンパイル無理じゃね?
どうなってんの?
0587デフォルトの名無しさん2015/04/14(火) 23:46:34.29ID:Kp699WDI
戻り値だけautoかけてもなぁ
それならテンプレートでいいんじゃないって思う
0588デフォルトの名無しさん2015/04/14(火) 23:50:14.90ID:G4Teoc/4
>>586
定義(=実装コードね)が現れる前に使っちゃダメって書いてあるじゃん。
って事は、当然コンパイル時にすべての定義が見えなければならない。
つまり、template以外の一般関数ったって、事実上inline的な関数でしか使用出来ないって事だよ。
0589デフォルトの名無しさん2015/04/15(水) 00:04:36.25ID:NF77CiRA
>>586
戻り値の型は関数のシグネチャーではないので自然だけれど、
関数テンプレートの場合はシグネチャーに戻り値が
含まれるのだから規格のミスではと思う
0590デフォルトの名無しさん2015/04/15(水) 00:25:49.40ID:9EAsN0Ne
>>588
これって何の意味があるの?
定義の後にしか使えないのなら、プロトタイプ宣言要らないんじゃ・・・

>>589
>戻り値の型は関数のシグネチャーではない
マジで?戻り値の型がからない状態でどうやってコンパイル/リンクしてるの?
マングリングの話だよね?
0591デフォルトの名無しさん2015/04/15(水) 00:49:21.90ID:9EAsN0Ne
あーよくかんがえりゃ、宣言があれば、
戻り値の型をマングリングする必要は無いのか。
0592デフォルトの名無しさん2015/04/15(水) 02:02:10.99ID:mhTbOD0j
>>526の括弧の中ってどういう意味だっけ
0593デフォルトの名無しさん2015/04/15(水) 02:10:17.73ID:9EAsN0Ne
LBS見て奇数判定
05945932015/04/15(水) 02:48:08.76ID:9EAsN0Ne
typo: LBS > LSB
05955882015/04/15(水) 03:44:42.16ID:Gdw830Uq
>>590
N3386 とプロトタイプ宣言が何の関係があるの?
あくまで一般関数でも戻り値推定を使えるようにしようっていう提案であって、プロトタイプ宣言とは何の関係も無いでしょ。
もちろん、しても構わないけど、一般的に template や inline でプロトタイプ宣言はしないよね。
いらないっていう君の考えは正しいんだけど、的を射てないっていうか、そこはN3386の趣旨じゃないと思うよ。
05965882015/04/15(水) 03:58:49.65ID:Gdw830Uq
>>590
で、何の意味があるか?だけど、
コンパイラには一意に識別できるようなシチュエーションでも、
人間が書くのはめんどくさい場合があるんだよね。
まぁ、逆に可読性が下がる場合もあるので、
一概に良し悪し決められない気もするけど。

// ↓この型を正確に書いたところで誰得 ???
auto getNow()
{
return std::chrono::system_clock::now() ;
}
0597デフォルトの名無しさん2015/04/15(水) 11:29:44.91ID:YuHqMLmt
>>583
それだけではなんとも言えないけど、ありがちなのは funcA と、funcBが同じキャッシュラインをリードライトしてるとか。
0598デフォルトの名無しさん2015/04/15(水) 11:36:29.75ID:YuHqMLmt
フォルス・シェアリングでググれ。
0599デフォルトの名無しさん2015/04/15(水) 19:42:58.02ID:r2lvBfAu
>>597-598
再現コードとかがないから妄想レスするしかないって感じだよね
フォルス・シェアリングって初めて聞いたよ
マルチスレッドで性能出すの色々大変なんだな。シングルスレと変わらない性能じゃね
0600デフォルトの名無しさん2015/04/15(水) 19:54:02.21ID:SmxjYtk4
>>595
>N3386 とプロトタイプ宣言が何の関係があるの?

日本語が読めない人にはちょっと難しかったかな
0601デフォルトの名無しさん2015/04/15(水) 20:11:16.24ID:+JX/9q1W
>>597
あんがと。どうも原因はそれっぽい。
マルチスレッド処理前にsection分データ複製して終わったらマージしてだと結局早くならなそうだから、それぞれの中で並列化させるだけにする
0602デフォルトの名無しさん2015/04/15(水) 20:37:53.74ID:Gdw830Uq
>>600
だな
あの文書を読んでプロトタイプ宣言とかうあたり、まず日本語勉強しろと言ってやれ
06036002015/04/15(水) 20:53:11.21ID:lZuMBSmR
>>602
日本語読めない自覚が無いんだね
かわいそうに
0604デフォルトの名無しさん2015/04/15(水) 23:28:20.82ID:XPC8PdXL
>>596
むしろ書いてないと困るだろ。
steady_clockかsystem_clockかも分からなかったら使えない
0605デフォルトの名無しさん2015/04/15(水) 23:29:09.00ID:Gdw830Uq
>>603
ホントだよな
自覚もてと言ってやれ
0606デフォルトの名無しさん2015/04/15(水) 23:29:40.73ID:Gdw830Uq
>>604
えっ?!
06075972015/04/16(木) 22:57:01.70ID:fU+nY2Fr
>>601
そいう場合はジョブ分割のやり方や大きさを変えると、パフォーマンスの劣化が抑えられたりするけどね。
0608デフォルトの名無しさん2015/04/17(金) 02:50:59.29ID:taSEBu9a
hardware_concurrencyで場合分けかね
0609デフォルトの名無しさん2015/04/17(金) 21:50:44.71ID:omrkMRZ4
>>593
ampって何?
1のこと?

(b&amp;1)とは
bと1のビット積が1なら1を返し、1でないなら0を返すみたいな意味?
0610デフォルトの名無しさん2015/04/17(金) 22:04:02.70ID:0VqFq7s9
>>609
&;込みでhtmlで1文字ggrks
0611デフォルトの名無しさん2015/04/17(金) 22:11:22.91ID:omrkMRZ4
>>610
C++の文法かと思ったわ
0612デフォルトの名無しさん2015/04/17(金) 22:19:23.29ID:va7l7l3W
文字化けしておいて通じなかったら他人にカスとか
キチガイはどうしようもないな

せめて(b bitand 1)ぐらいのひねりが欲しいところ
0613デフォルトの名無しさん2015/04/17(金) 22:20:28.95ID:omrkMRZ4
あぁ、化けてhtmlになったんか
全く気付かんかったスマン
0614デフォルトの名無しさん2015/04/18(土) 00:26:31.20ID:4cICBPDJ
プログラムの実行時間を計測するのにどうしてますか?
目的はパフォーマンスのボトルネックを探すことだとして
0615Office & Gamers ◆G144Hzgh2.0e 2015/04/18(土) 00:52:06.28ID:yZFnrc/6
>>614
FOR-NEXT10億回ループで計測w
0616デフォルトの名無しさん2015/04/18(土) 00:57:51.86ID:j/wjXDDU
どの関数の実行時間が長いか、CPUを長く使ったか、

プロファイラで測定する
0617Office & Gamers ◆G144Hzgh2.0e 2015/04/18(土) 01:01:55.32ID:yZFnrc/6
#include <time.h>

clock_t tt;

tt=clock();

の要領w
0618Office & Gamers ◆G144Hzgh2.0e 2015/04/18(土) 01:04:12.62ID:yZFnrc/6
マルチスレッドの場合、どうやって計測するかが興味深いなwオイw
0619デフォルトの名無しさん2015/04/18(土) 01:14:31.56ID:Pxa1HN8F
ampでガタガタ言う情弱がここの住人の実態かw
0620デフォルトの名無しさん2015/04/18(土) 02:12:46.96ID:3+5aq7ig
>>614
クロノ使ってストップウオッチクラス書く。
0621デフォルトの名無しさん2015/04/18(土) 02:16:54.96ID:W/lu3ENI
g++ -pg
0622デフォルトの名無しさん2015/04/19(日) 12:20:15.38ID:XOnDNqxY
#include <iostream>
using namespace std;
struct A{
const int a[1];
constexpr auto f(){a[0]=999;}
A(){f();}
};

int main() {
A a;
cout<<a.a[0]<<endl;
return 0;
}
配列をコンパイル時に初期化する方法がわかりません
教えてください。
0623デフォルトの名無しさん2015/04/19(日) 12:34:28.12ID:qbZayNF/
>>622
#include <iostream>
using namespace std;
struct A{
static const int a[];
A(){}
};
const int A::a[] = {999,111};
int main() {
A a;
cout<<a.a[0]<<endl;
return 0;
}
0624デフォルトの名無しさん2015/04/19(日) 12:42:26.23ID:XOnDNqxY
#include <iostream>
using namespace std;
struct A{
const int a[100];
constexpr auto f(){
for(int i=0;i<100;++i)
a[i]=複雑な式;
}
A(){f();}
};

int main() {
A a;
cout<<a.a[0]<<a.a[1]<< 〜略〜 <<endl;
return 0;
}
イメージとしてはこんな感じです
それではできません
c++14なので出来ます
0625デフォルトの名無しさん2015/04/19(日) 12:50:05.59ID:ZmF0gxct
配列にもconstexpr書かなきゃならないしコンストラクタにもconstexprって書かなきゃダメじゃね
0626デフォルトの名無しさん2015/04/19(日) 16:09:51.41ID:XOnDNqxY
#include <iostream>
using namespace std;
struct A{
constexpr static int a[1];
constexpr auto f(){a[0]=999;}
constexpr A(){f();}
};

int main() {
A a;
cout<<a.a[0]<<endl;
return 0;
}
aにイニシャライザーがないとでます
コンストラクターをconstexprにすると
他の事が出来なくなります
0627デフォルトの名無しさん2015/04/19(日) 18:45:10.81ID:F4fwOO7a
うーん。
ここで相談していいものか微妙なんだがC++での名前空間の問題でこのような最適化がかかってしまうのかと思ってる感じなんだけど


int A( int a, char *b );
int B( int a, const char *b );


LPVOID pFunc;
pFunc = &A;
pFuncを用いた処理
pFunc = &B;
pFuncを用いた処理


これでビルドかけて機械語みると
mov dword ptr [esp], module.A;
処理
mov dword ptr [esp], module.A; //いやありえなくね?なんでA関数のアドレス設定してんの?
処理

上記のような感じになるんだ。
volatile使って抑制かけてもmodule.Aが参照されることからextern int A(...);側で関数定義しているところから
変な最適化がかかってそうなってるようにしか思えないんだが。
C++はCと違って名前空間の設定ができるからそれ絡みで処理系(コンパイラ)が勘違いしてる気がするんだけど
似たような経験や知識もっている人いない?
ちょっと場違いな質問で難しい問題だと思ってるんだが処理系詳しい人いたらいいな・・
0628デフォルトの名無しさん2015/04/19(日) 18:48:38.60ID:MxqC0lBn
constexprはほとんどしらないけど、
そんな俺でも、constexpr A(){f();} で{f();}の関数呼び出し表記は駄目だろうと感じるけど
C++14ではOKなのかな
constexpr static int a[1]の初期化ってconstexpr static int a[1]{999};ってしないと駄目なんじゃないか
06296272015/04/19(日) 18:48:39.45ID:F4fwOO7a
あと>>627のような現象が発生するのは引数の型がほぼ同じ場合に発生する。
また、処理の中でデバッグ分を入れたりすると正常な参照になる。

デバッグ分を入れない場合はAとBの関数の作りはほぼ同じような作りだから
処理系が勘違いし始めてるのかなっていう切り分けまではできているんだが、出来れば原因を突き止めたい。

無理やり解決することもできるけど気持ち悪いんだよな原因はっきりしないやつってのは。
0630デフォルトの名無しさん2015/04/19(日) 18:56:21.93ID:MxqC0lBn
>>629
色々な環境(VC,G++,Clangとか)で試した? それでみんな同じ結果?
0631デフォルトの名無しさん2015/04/19(日) 19:00:10.97ID:oyXjgVbc
というか、どの環境のどのバージョンでとか最低限の再現コードの提示も無しに
こういう内容を聞く?
06326272015/04/19(日) 19:01:03.93ID:F4fwOO7a
>>630
すまん。環境いい忘れてたがVS2010だなー。
windowsSDKで作ってる処理でもあるから移植して別の処理系試すのは出来れば避けたい。(最終手段としてやらなきゃいかんのだろうが


いま下記のような感じで改善するか試してるところ
Cは得意だがC++は不得意だからC++の知識が乏しいからこういうところでハマるときついんだよなー・・。

namespace TEST1 {
int A( int a, char *b );
}
namespace TEST2 {
int B( int a, const char *b );
}

LPVOID pFunc;
pFunc = TEST1::A;
pFuncを用いた処理
pFunc = TEST2::B;
pFuncを用いた処理
0633デフォルトの名無しさん2015/04/19(日) 19:04:11.57ID:ZmF0gxct
C++ならstd::functionとかラムダ式使うべきでは
06346272015/04/19(日) 19:57:31.98ID:F4fwOO7a
とりあえず>>632では治らなくてもっと詳細に切り分けするためにDebugモードとReleaseモードでモジュール作ることにした。
予想どおりDebugモードでは正常なコードが生成されたのでオプションを色々切り替えてみたところ正常なコードが生成されるようになった。

原因はVS2010のコード生成の下記のオプションを「いいえ (/Gy-)」にすることだった。

/Gy (関数レベルのリンクの有効化)

https://msdn.microsoft.com/ja-jp/library/xsa71f43.aspx
各関数をパッケージ化された関数 (COMDAT) 形式でパッケージ化します。


COMDAT形式にパッケージ化するのが悪かったんだろうがこれvolatileとかで回避すること出来ねえのかな
オプション外して治りはしたが根本的な解決とはまた違う気がするわ・・・。
まずCOMDATってなんぞやってところからだなw


>>631
結構ボリュームでかいから再現コードを新たに作製するのは難しいと思うわ(DLLだからデバッグめんどくさいしな)
暇な時にやってみて、もし再現できたら公開する。
0635デフォルトの名無しさん2015/04/19(日) 21:56:23.53ID:9OEy8wIA
class classA
{

public:
void Load();

private:

typedef char MyChar[40];
vector <MyChar> mychar;

};

void classA::Load()
{
mychar.resize(6);
}

こんなかんじに書くと「エラー 配列は初期化子リストでのみ初期化できます」と出てしまいます。
普通にint型で作ったvectorならresize出来るんですが・・・

どのようにすればよいのでしょうか?
0636デフォルトの名無しさん2015/04/19(日) 22:03:35.11ID:iInvhP8b
typedef array<char, 40> MyChar;
0637デフォルトの名無しさん2015/04/19(日) 22:07:36.39ID:G8ijS8/c
std::arrayってconstexpr対応されてる?
されてないんだったらしてほしい。
0638デフォルトの名無しさん2015/04/19(日) 22:16:12.86ID:9OEy8wIA
返答有難うございます

DXライブラリを使ってるのですが
int DxLib::FileRead_gets(TCHAR *,int,int)' : 引数 1 を 'std::array<char,40>' から 'TCHAR *' へ変換できません。
と出てきます。

何度も何度も質問してすみません
0639デフォルトの名無しさん2015/04/19(日) 22:23:56.56ID:iInvhP8b
struct MyChar : array<char, 40>
{
operator char* () { return &(*this)[0]; }
};
こんなコード絶対書きたくないけどw
0640デフォルトの名無しさん2015/04/19(日) 22:30:19.14ID:9OEy8wIA
すみません
勘違いしていたみたいです

arrayで作ったMyCharのサイズは途中で変えられないのでしょうか?
0641デフォルトの名無しさん2015/04/19(日) 22:34:23.38ID:2BHkrPVe
.data()でいいだろ
変えられたら固定配列でなくなる
vectorを入れ子にしなさい
0642デフォルトの名無しさん2015/04/19(日) 22:44:58.71ID:9OEy8wIA
vectorを入れ子にするというのは2次元配列として使うという意味でしょうか?
0643デフォルトの名無しさん2015/04/19(日) 22:46:30.83ID:2BHkrPVe
そりゃ可変長にしたいってことならそういうことでしょ
0644デフォルトの名無しさん2015/04/19(日) 22:54:32.15ID:9OEy8wIA
皆さんありがとうございました
頑張ってみます
0645片山博文MZ ◆T6xkBnTXz7B0 2015/04/19(日) 22:54:45.14ID:Kws6M3Sz
二重vectorは、完全には連続ではないから注意。
どうしても連続にしたいなら、一重にして
アクセス場所を計算で割り当てる必要がある。
0646デフォルトの名無しさん2015/04/19(日) 23:24:47.45ID:UoddKiAV
>>639
(char*)this と &this->elems[0] が同じになる保証ってあったっけ?
0647デフォルトの名無しさん2015/04/19(日) 23:36:09.56ID:34xZOxfN
そういやarray_viewってC++14に入ってないけど却下された?
06486272015/04/20(月) 01:57:48.89ID:xXEARlC8
あの後やっぱり気持ち悪くて色々調べてみた。
MAPファイル出力したところ、下記の様な情報が出力されてこれが原因だったんじゃないかと思う。

MAPファイル
Address Publics by Value Rva+Base Lib:Object
0000:00000000 ___ImageBase 10000000 <linker-defined>
0001:000003e0 _A@16 100013e0 f A.obj
0001:000003e0 _B@16 100013e0 f B.obj


該当関数はソースがA.cppとB.cppで別れていたから当然別オブジェクトになるんだけど
両方のオブジェクトファイルのセクション:オフセットがまったく同じになっていた。
正直、処理系に全然詳しくないから見当違いな事を言ってしまうかもしれないが、
この状態でリンクしにいったのが原因で>>627の様なバグが発生してたんじゃないかと思ってる。

ちなみに>>629で書いているけど該当関数にデバッグ文を入れると今回の事象が発生しないし、
この場合、MAPファイルのセクション:オフセットは同一ではなくなっている事を確認している。

今回の件は珍しくて非常に興味深いし。
後学のためにもこの辺詳しい人いれば補足しておくれ。
06496272015/04/20(月) 02:05:53.62ID:xXEARlC8
>>648の補足

ABとは別に似たような関数作って実験してみたらやはり下記の様な感じになって事象が発生したわ
0001:00000730 _C@20 10001730 f C.obj
0001:00000730 _D@20 10001730 f D.obj


出力された機械語の参照もおかしくなっている。(セクションとオフセットが同じ値だから当然か)
※mov dword ptr [esp], ベースアドレス + オフセット(00001730h)
0650デフォルトの名無しさん2015/04/20(月) 03:25:54.29ID:DUxzIzgu
で、AとBが同一視されることによる具体的な問題はあったのかね?
もしそうなら処理系のバグだけど、
AとBが同じコードになる様なケースなら最適化されどちらかが消されても何も不思議じゃない
0651デフォルトの名無しさん2015/04/20(月) 03:55:11.54ID:DUxzIzgu
そもそも
 LPVOID pFunc;
 pFunc = &A;
の時点でヤバすぎるコードだ
コンパイラだって人間が作ってる以上バグだって当然あるけど
こんなコード書く奴にどんな災いが起きようが自業自得というもの
0652デフォルトの名無しさん2015/04/20(月) 09:45:06.44ID:dQWHCrXK
#include <iostream>
using namespace std;

template<typename T>
struct C{
using type=long;
};
template<>
struct C<int>{
using type=float;
};
template<typename T>
using B=typename C<T>::type;

template<typename T>
auto f(B<T>& x){cout <<"A"<<endl;}

int main() {
B<int> x;
f(x);
float y;
f(y);
return 0;
}
なぜマッチしてると思うのにマッチしてないエラーになるんですか?
0653デフォルトの名無しさん2015/04/20(月) 12:46:56.50ID:9i4b1e7q
B<T>ってクラスは存在するか?
0654デフォルトの名無しさん2015/04/20(月) 15:01:25.44ID:dQWHCrXK
#include <iostream>
#include <array>
using namespace std;
struct A{
constexpr static auto f()->array<int,1>{
return array<int,1>{999};
}
constexpr static array<int,1> a=f();
};
constexpr array<int,1> A::a;
int main() {
A a;
cout<<a.a[0]<<endl;
return 0;
}
>>626の続きでここまで考えたけど分かりません
教えてください
0655Office & Gamers ◆G144Hzgh2.0e 2015/04/20(月) 17:34:30.16ID:okp+NumQ
A→a
0656デフォルトの名無しさん2015/04/20(月) 18:16:32.25ID:bdfXzkyf
>>652
マッチするのはわかるがオーバーロードの候補検索にも限界があるんだろうきっと。
ISO/IEC 14882:2014 14.8.2.5p8のルールに当てはまらなかったと推測
0657デフォルトの名無しさん2015/04/20(月) 18:28:32.96ID:bdfXzkyf
『template-name<T> (where template-name refers to a class template)』
これかな。
Bの実体がクラステンプレートでないからdeductionされない
0658Office & Gamers ◆G144Hzgh2.0e 2015/04/20(月) 18:58:52.99ID:okp+NumQ
今日も実際に使われないプログラミングテクニック満載♪(アハ♪”
0659デフォルトの名無しさん2015/04/20(月) 19:02:58.36ID:BWEdxuf1
type_infoのhash_codeで得られる値は環境依存ですか?
0660デフォルトの名無しさん2015/04/20(月) 19:42:13.27ID:BWEdxuf1
gccをインストールして確認したら別の値になってました。
失礼しました。
0661デフォルトの名無しさん2015/04/20(月) 19:46:09.59ID:OqbAV7VH
>>660
実行ごとに変わってもおかしくないんじゃ?
0662デフォルトの名無しさん2015/04/20(月) 19:47:22.75ID:9i4b1e7q
アドレス値でもハッシュとしては機能するからなぁ。
0663デフォルトの名無しさん2015/04/20(月) 19:47:47.47ID:9i4b1e7q
多分実装依存だ。
0664デフォルトの名無しさん2015/04/21(火) 01:28:47.19ID:aTU/XB0V
実装依存だし実行ごとに変わりえる
http://www.cplusplus.com/reference/typeinfo/type_info/hash_code/
06656272015/04/21(火) 01:47:47.13ID:LXTViDG0
>>650-651
すまない。色々開発作業すすめててこんな時間になっちまったが下記回答する。

> で、AとBが同一視されることによる具体的な問題はあったのかね?
> もしそうなら処理系のバグだけど、
> AとBが同じコードになる様なケースなら最適化されどちらかが消されても何も不思議じゃない

厳密に言うとAPIフック使ってるんだ。
例えばWriteFileやReadFileはIATを書き換えるために下記のような事をやっている。
hoge( "モジュール名", "API名", HookFuncA );
hoge( "モジュール名", "API名", HookFuncB ); ← ここがHookFuncAになる(理由は>>648で書いているMAPファイルの問題)

実際のHookFuncで処理している内容は正規のAPIアドレス取得して引数を受け流すだけ。(事象が発生する時はそれ以外やっていない)
正規のAPIアドレスを取得する処理の流れはFuncA、B共にほぼ変わらないから、
引数構成も同じだしおそらく似たような解釈されたんだろうな。
結論として処理系のバグだと俺は思っている。

ちなみに該当関数を下記で抑制させたらMAPファイルも治って正常に動くようになった。
#pragma optimize("", off)
#pragma optimize("", on)

> そもそも
> LPVOID pFunc;
> pFunc = &A;
> の時点でヤバすぎるコードだ
> コンパイラだって人間が作ってる以上バグだって当然あるけど
> こんなコード書く奴にどんな災いが起きようが自業自得というもの

すまんすまん。俺が出したコード例が悪かったわ。
正確には前述している通りのコードでpFunc = &A;なんて変なことはやってないんだ。
ともかく個人的に結論が出たから名無しに戻るわ。お互いプログラミングの精進しようぜお前ら。
0666デフォルトの名無しさん2015/04/21(火) 07:48:09.78ID:AMz3cbvw
>>665
再現性のあるコードを出さずに一人相撲かよ
0667デフォルトの名無しさん2015/04/21(火) 07:59:28.86ID:3sACxkFm
長文荒しが暴れてるなww
こいつのせいで他の質問がスルーされてる
0668デフォルトの名無しさん2015/04/21(火) 08:22:59.20ID:/4w1NwLI
>引数構成も同じだしおそらく似たような解釈されたんだろうな。
>結論として処理系のバグだと俺は思っている。

日本語が読めないバカはどうしようもないな
同じにしてもも関数呼び出しに不都合が無い限り処理系は何をしても良い
関数のアドレスが重複するとか当たり前のこと
イヤならstatic volatile変数でも埋め込んどけ
0669デフォルトの名無しさん2015/04/21(火) 21:47:51.04ID:lL+nS/AE
結論として処理系のバグだと俺は思っている。
printf("%d\n",(unsigned int)-3/3*3);
0670デフォルトの名無しさん2015/04/21(火) 22:03:07.89ID:2LCbUk1L
unsignedなんだから%dでなく%uでしょ
0671デフォルトの名無しさん2015/04/21(火) 23:10:25.82ID:zHBTo/Gl
>>664
『Returns a hash code value that identifies the type.』

そんな嘘つきサイトのURL貼るなよ
0672デフォルトの名無しさん2015/04/22(水) 10:25:54.62ID:oorXzYFJ
#include <iostream>
using namespace std;
struct B{
int c[1]{};
constexpr static auto f(){
B b;
b.c[0]=999;
return b;
}
};

struct A{
constexpr static B b=B::f();
};
constexpr B A::b;
template<int a>
auto g(){cout<<a<<endl;}
int main() {
A a;
g<a.b.c[0]>();
return 0;
}
>>654をこれに変更したらclangでは動きましたがideone.comではエラーになります
ideoneはgccでc++14がちゃんと実装できてないのですか?
0673デフォルトの名無しさん2015/04/22(水) 11:00:47.99ID:nQHDiL9h
gccでのC++14のconstexprの制限緩和は5.0から
ideoneのは多分4.9.2なんだと思う
0674デフォルトの名無しさん2015/04/22(水) 13:36:27.95ID:oorXzYFJ
#include <iostream>
using namespace std;
struct B{
int c[1]{};
constexpr B(){
c[0]=999;
}
};

struct A{
constexpr static B b{};
};
constexpr B A::b;
template<int a>
auto g(){cout<<a<<endl;}
int main() {
A a;
g<a.b.c[0]>();
return 0;
}
これでもコンパイルとおりました
ありがとうございます
0675デフォルトの名無しさん2015/04/22(水) 21:20:05.33ID:p5bsCpo/
>>673
GCC5の正式はまだだろう(もうそろそろだとは思うが)
C++14でconstexpr楽しんでねでstd::integer_sequenceなんかが追加になっているからな
0676デフォルトの名無しさん2015/04/22(水) 21:39:08.86ID:p5bsCpo/
気になってGCC見に行ったら、今日GCC5.1発表してた
0677デフォルトの名無しさん2015/04/23(木) 10:05:32.90ID:NSi1YErY
gccでpure関数の中から非pure関数を呼び出したら
エラーや警告を出してほしいのですが
どうすればいいのですか?
0678デフォルトの名無しさん2015/04/23(木) 10:44:40.71ID:NcXFq0hk
pure関数って何?
0679デフォルトの名無しさん2015/04/23(木) 11:03:56.01ID:qRmtbVqf
free関数っていうのもあるよ
0680デフォルトの名無しさん2015/04/23(木) 12:45:42.85ID:+O6VWDUu
>>677
どんなコードをエラーにしてほしいんだよ
サンプル示した方が速いと思う
0681デフォルトの名無しさん2015/04/23(木) 13:54:45.91ID:qRmtbVqf
#include <iostream>
using namespace std;

auto f(int*& a){
return *(a++);}
int main() {

int a[3]={1,2,3};
cout<<f(a)<<endl;
cout<<f(a)<<endl;
cout<<f(a)<<endl;
return 0;
}
a[3]をポインターに変えるとうまくいくのですが
配列にするとエラーがでてできません
どうしたら直りますかおしえてください。
0682デフォルトの名無しさん2015/04/23(木) 14:31:38.92ID:KAVaK0hf
auto f(int*& p)
{
  return *(p++);
}

int main()
{
  int a[3]={1,2,3};
  int *p = a;
  cout<<f(p)<<endl;
  cout<<f(p)<<endl;
  cout<<f(p)<<endl;
  return 0;
}
0683デフォルトの名無しさん2015/04/23(木) 14:40:54.06ID:z1Tp7cOW
>>681
auto f(int*&& a){
ポインタでないもの(a)にポインタへの参照をしようとしているが
その場合C++03ではint* const& aとconstが必要で++できない
C++11で追加された右辺値参照ならconstなしで同じことができる
それとautoで->なしはC++14からだ
g++ 681.cpp -std=c++14
0684デフォルトの名無しさん2015/04/23(木) 15:24:29.86ID:qRmtbVqf
ありがとうございます
&&にすると出力が111になりますね
0685デフォルトの名無しさん2015/04/23(木) 15:29:50.88ID:qRmtbVqf
aはアドレスを入れる箱というより
アドレスそのものなので変更できないということですね
やっと理解できました
0686デフォルトの名無しさん2015/04/23(木) 17:09:12.77ID:Gn+k9eRV
>>680

int f1(int x) { return x; }
__attribute__((pure)) int f2(int x) { return f1(x); }

これをエラーにしてくださいということです
0687デフォルトの名無しさん2015/04/23(木) 23:07:00.78ID:SGhZY/j9
auto F(int* (&A)[]);だっけ
0688デフォルトの名無しさん2015/04/23(木) 23:12:42.32ID:SGhZY/j9
http://ideone.com/ZrOxtv
0689デフォルトの名無しさん2015/04/23(木) 23:54:37.30ID:eEa/HFn0
>>686
ここで聞くより。GCCスレで聞いたほうがよいじゃないか
GCC拡張の奴を標準のC++でエラーにできるのかな
アサートとか使えば出来るのかな...
0690デフォルトの名無しさん2015/04/24(金) 00:15:53.40ID:pGLnwenf
代入演算子オーバロードでconstメンバの値をコピーしようとすると
C2166エラー(const変えちゃだめよ)で弾かれるんですがどういう方法が正統なのでしょうか
コードは以下のような感じです

class A {
  const int a;
    A&amp; operator=(const &amp;A o){
     this->a = o.a; //C2166
     return (*this);
    }
 }
}
0691デフォルトの名無しさん2015/04/24(金) 00:19:52.57ID:KlXTqpj5
>>690
本当に代入したいのか?
それともコピーコンストラクタが欲しいのか?
0692Office & Gamers ◆G144Hzgh2.0e 2015/04/24(金) 00:24:15.54ID:gsh3Hj5N
配列のコピーがしたしんじゃないのか(大爆笑)
0693デフォルトの名無しさん2015/04/24(金) 00:30:52.31ID:pGLnwenf
>>691
コンテナに入れるのでオーバーロードを要求されます。
0694デフォルトの名無しさん2015/04/24(金) 00:32:56.27ID:881zNkU7
const intメンバということは、Aのインスタンスが生まれてから死ぬまで
その値は変えない、と宣言しているようなものです
後から変えるならconstを外すべき
正直何がやりたいかわからんが
0695Office & Gamers ◆G144Hzgh2.0e 2015/04/24(金) 00:33:54.80ID:gsh3Hj5N
2値オセラーとかw
0696デフォルトの名無しさん2015/04/24(金) 00:36:07.91ID:ow/DeJq/
const int a = 100;
const int b = 50;
a = b;
これコピーできるのか?
0697デフォルトの名無しさん2015/04/24(金) 00:37:18.18ID:pGLnwenf
>>694
自作以外のクラスのオブジェクトをコンテナに入れたいだけです。
値を変えたかろうが変えたくなかろうがオーバーロードを要求されるようです。
0698Office & Gamers ◆G144Hzgh2.0e 2015/04/24(金) 00:38:23.29ID:gsh3Hj5N
相談室ってーか、隔離病棟だなw
0699デフォルトの名無しさん2015/04/24(金) 00:38:50.01ID:pGLnwenf
>>696
代入演算子を必須とする処理系側の作業で、
コンストラクタで処理できないので普通はどうするのかという意図で質問しました。
0700デフォルトの名無しさん2015/04/24(金) 00:39:08.23ID:881zNkU7
>>697
じゃあ690のコードは何のたとえにもなってないよね
問題を解決したい全コードを出せ
0701デフォルトの名無しさん2015/04/24(金) 00:51:03.88ID:ow/DeJq/
>>699
俺の例なら
const int a = 100;
const int b = 50;
const_cast<int&>(a) = b;
0702Office & Gamers ◆G144Hzgh2.0e 2015/04/24(金) 00:55:17.72ID:gsh3Hj5N
>error C3892: 'aaa' : const である変数へは割り当てることはできません

はい、次w
0703デフォルトの名無しさん2015/04/24(金) 01:09:51.05ID:5q3CaoMe
ちょいちょい変更するような変数をConstにするんじゃない。
クラス定数に出来ないか設計を考えるんだ。
0704デフォルトの名無しさん2015/04/24(金) 01:32:40.45ID:pGLnwenf
設計したのは顔も年齢も知らない人でして…
iteratorでいじっているときにSTLの深いところで弾かれているので回避できないかもっと調べて出直してきますm(_ _)m
0705デフォルトの名無しさん2015/04/24(金) 02:19:37.94ID:BiQ4+cXI
complex.h
typedef struct{
int data[NDATA];
double complex symbol[SYM];
}SIGNALS;

としているんですが、symbol値が複素数になりません。どうしてですか?
0706デフォルトの名無しさん2015/04/24(金) 02:21:44.84ID:sbe0S4JR
>>704
詳しいことは知らん(読んでない)が、よくあるよな
> iteratorでいじっているときにSTLの深いところで弾かれ
「は?俺そんなこと一言もいってないのに、いったい何の関係が・・・」
気を取り直して、へこへこ調べたあげく
「知るかヴォケ、そんなとこで決め打ちしてんじゃねえ!」
とかね
0707デフォルトの名無しさん2015/04/24(金) 06:06:24.00ID:EJC6ZQDy
コンテナにいれるならコピーコンストラクタ用意してemplaceでいいのでは
0708デフォルトの名無しさん2015/04/24(金) 06:12:48.13ID:EJC6ZQDy
俺がアスペだったワロチorz
0709デフォルトの名無しさん2015/04/24(金) 07:42:31.75ID:QbgvjuRu
>>703
念のため聞くけど、クラス変数ってどういうもの?
0710デフォルトの名無しさん2015/04/24(金) 08:47:33.59ID:JfCICRZ2
staticメンバ変数の事だろ。
0711デフォルトの名無しさん2015/04/24(金) 09:53:40.24ID:QbgvjuRu
それならいいんだけどね。
以前メンバ変数のことをクラス変数と呼ぶやつがいて、すれ違いの会話をしたことがある。
あとで原因に気付いたんだが指摘せずにそいつから離れた。
0712デフォルトの名無しさん2015/04/24(金) 10:13:56.50ID:3r1MRGZB
>>711
その間違いがあるかもしれないと疑うに足る理由があるときだけ
疑いを解消するためだけの無粋な質問をしましょう
ていうか、空気読めば分かるだろ
0713デフォルトの名無しさん2015/04/24(金) 10:19:27.31ID:EJC6ZQDy
staticじゃないconstなメンバ変数はやっかいだからstatic constにしましょうっていうことじゃないの??
0714デフォルトの名無しさん2015/04/24(金) 10:59:40.01ID:SJX4zjJP
>>690
代入演算子を必須とするという謎条件でも
operator=の中で*this = A(o.a)すればできると思うけどそれじゃダメなの?
0715デフォルトの名無しさん2015/04/24(金) 12:10:10.67ID:EJC6ZQDy
それむりじゃない?
0716デフォルトの名無しさん2015/04/24(金) 12:32:41.19ID:jkqKBt1M
代入は無理だな
コピコンだけなら
0717デフォルトの名無しさん2015/04/24(金) 12:40:17.74ID:SJX4zjJP
>>715,>>716
えっ?
http://ideone.com/4PUbJX
0718デフォルトの名無しさん2015/04/24(金) 12:43:38.17ID:7A5IlD9x
は?
専ブラ締め出してからム板のレベル落ちすぎじゃね?
0719sage2015/04/24(金) 12:53:42.35ID:QcIZpVM5
どっちにしろ書き換え可能なら const である意味がないから
const 消すのが正当。
いやコンテナに入れたいだけで変更もコピーもしてませんっていうのであれば
右辺値参照がサポートされてる環境ならコンパイルエラーは出ないはず。
そういう環境が用意できないなら薄汚く const_cast でもしてればいい。
0720デフォルトの名無しさん2015/04/24(金) 13:02:37.17ID:SJX4zjJP
>>718
はは俺がバカでした
0721デフォルトの名無しさん2015/04/24(金) 13:04:03.30ID:881zNkU7
>>717
お前2度とC++さわんなマジで
0722デフォルトの名無しさん2015/04/24(金) 13:12:32.74ID:SJX4zjJP
placement newなら出来るね
http://ideone.com/I7lsZ7
0723デフォルトの名無しさん2015/04/24(金) 13:15:39.19ID:SJX4zjJP
アホを晒しつつも可能な方法を示した俺スゴイ
0724デフォルトの名無しさん2015/04/24(金) 14:25:15.90ID:2/oaVRYv
もうお前はCだけやってろ
0725デフォルトの名無しさん2015/04/24(金) 14:48:45.76ID:SJX4zjJP
>>724
俺は解決策を提示できた
お前は罵ることしか出来ない無能
0726デフォルトの名無しさん2015/04/24(金) 15:27:21.68ID:Kfq7fsbo
自分じゃなく、他人が無能だと思い込めば気が楽だよね?(´・ω・`)
0727デフォルトの名無しさん2015/04/24(金) 15:31:22.87ID:SJX4zjJP
はいはい、そういうことはconstメンバ変数があるクラスのoperator=をどう書けば良いのかを
提示してから言ってね無能
0728デフォルトの名無しさん2015/04/24(金) 15:40:28.52ID:Kfq7fsbo
自分は無能じゃないと自覚してるなら、その程度は自分で解決できないとね?(´・ω・`)
0729デフォルトの名無しさん2015/04/24(金) 15:52:49.09ID:SJX4zjJP
自分で解決?
とうとう発狂したか
哀れ
0730デフォルトの名無しさん2015/04/24(金) 16:15:43.29ID:fozdvomS
2ch名物だな
0731デフォルトの名無しさん2015/04/24(金) 17:59:59.95ID:lmiDEY1T
イテレーター的なやつで
template<typename T>
using IteratorT=typename T::Iterator;
struct A{
using Iterator=int *;
auto begin()->Iterator {略}// A
auto begin()->IteratorT<A>{略} //B
auto begin()->int *{略} //C
};
AとBとCどれが正解ですか?
0732デフォルトの名無しさん2015/04/24(金) 19:01:58.80ID:EJC6ZQDy
実際のところ>>722ってなんか問題あるのかな
(>>722を擁護してるんじゃなく、うんこな俺には正しいのかまずいのかわからない)
operator<の部分がアレなのはおいといて

なんか気持ち悪い感じはすげーするんだけど
0733デフォルトの名無しさん2015/04/24(金) 19:31:26.71ID:GyPP4/bM
そういやお前ら
ちゃんとクラスのstatic const変数の定義書いてますか?
class unko {
 static const int A = 100;
};
const int unko::A; //これ
0734デフォルトの名無しさん2015/04/24(金) 20:03:21.87ID:LvePKIzx
static const intは書いてない
0735デフォルトの名無しさん2015/04/24(金) 20:11:38.03ID:LOA4H2Vu
>>731
そんな高度な質問は2chのプログラム板ではしないでください
0736デフォルトの名無しさん2015/04/24(金) 20:24:46.39ID:SJX4zjJP
>>732
本人が言うのもなんだけど何の問題もないよ
気持ち悪いのは同意だし、こんなコード仕事じゃ書かない
ただしこの場合はこれでいいけど、デストラクタを走らせなければならないメンバ
がある場合は↓の様にしなければいけないけどね
http://ideone.com/perUvr
operator<部分がアレ?何のことだろう?
0737デフォルトの名無しさん2015/04/24(金) 20:31:28.36ID:ExNaQCDd
> (*this).~A(); new(this) A(o.a);
デストラクタ走らせた後の placement newの中で例外が発生したら状態はメチャメチャよ!

(まあ遊びコードだということは分かってるから)
0738デフォルトの名無しさん2015/04/24(金) 21:08:56.91ID:AOadAou2
実装では偶々うまくいっても
仕様上は鼻から悪魔なので
人類滅亡しようが文句は言えない
0739デフォルトの名無しさん2015/04/24(金) 21:17:41.36ID:NvX0pdxf
未来を含めこの世に存在する処理系での保証をする必要があるならな
C++使っておいてそんなことはまず無い
0740デフォルトの名無しさん2015/04/24(金) 21:31:13.21ID:KmXIJnIK
>>737
仕事ものって例外・エラー処置を色々しないといけないからな
趣味ものなら、例外・エラーは必要最小限未満でも良いが
0741デフォルトの名無しさん2015/04/24(金) 21:44:43.76ID:SJX4zjJP
>>737
placement newの例外?
お前らは難癖つけることだけは一流だなw
どういう場合にどうメチャメチャになるのか具体的な例を示すことはないだろうな
0742デフォルトの名無しさん2015/04/24(金) 21:46:39.86ID:ExNaQCDd
>>740
必要最小限「未満」
気に入ったwww
0743デフォルトの名無しさん2015/04/24(金) 21:48:29.31ID:ExNaQCDd
>>741
ほぼ自明じゃね?
0744デフォルトの名無しさん2015/04/24(金) 21:49:57.46ID:SJX4zjJP
あのplacement newで発生する例外が問題になるなら
普通のデフォルト生成の代入演算子でもまったく同じ事だわ
0745デフォルトの名無しさん2015/04/24(金) 21:56:01.79ID:KmXIJnIK
>>742
俺ツールではエラーでたら処置するのめんどくせーで、ほぼ、はい終了ねにしているのが多いからな
おかげで使えねーソフトによくなっている
0746デフォルトの名無しさん2015/04/24(金) 21:59:32.30ID:SJX4zjJP
見事なまでに具体例を全く示さないのがこいつらの特徴w
せいぜい「自明じゃね?」の捨て台詞が関の山
0747デフォルトの名無しさん2015/04/24(金) 22:01:26.46ID:lmiDEY1T
>>731もお願いします
0748デフォルトの名無しさん2015/04/24(金) 22:10:41.09ID:7A5IlD9x
>>744
デフォルトの代入演算子が例外投げても基本的例外安全保障は満たしてるんだよ。
それに手動でnoexceptなswap関数を使ってcopy-and-swapするなら強い例外安全保障も満たせる。
例のplacement newで例外が投げられても例外安全保障が全くないんだよね。
デストラクタの呼び出しを防ぐ手段があるなら別だけど。
07497312015/04/24(金) 22:36:56.20ID:lmiDEY1T
自己解決しました
ありがとございました
0750デフォルトの名無しさん2015/04/25(土) 00:18:07.20ID:JiGz+1sT
コンストラクターが途中で失敗してデストラクターが呼ばれたら
構築が終わっていない出鱈目なメモリに対して
デストラクターを呼ぶことになるからムチャクチャだな。
特にクラスがトリビアルでないときは最悪だ
0751デフォルトの名無しさん2015/04/25(土) 07:56:44.46ID:wqMgtpJQ
>>744
デフォルト生成の代入演算子で問題ないかどうかは、都度判断しなけりゃならないんだから
おまえの言う通り 「まったく同じこと」 だ
0752デフォルトの名無しさん2015/04/25(土) 08:08:21.22ID:Jb9ExFOn
~A(){
*x=10; //自分で書いたヒープにちょっとラクガキ
delete x; //そして捨てる
}

みたいなデストラクタを持ってると、明示的デストラクタ呼び出しで捨てられたthis->x
に対してplacement newによるコンストラクタ呼び出し例外により*thisが消される時に
既に消えてるxに対してアクセスしちゃうな。
0753デフォルトの名無しさん2015/04/25(土) 14:57:29.69ID:kJ4fYYnY
#include <iostream>
using namespace std;
using T1=int;
using T2=int;

auto f(T1 a){
cout<<1<<endl;
}
auto f(T2 a){
cout<<2<<endl;
}
int main() {
T1 a{};
T2 b{};
f(a);
f(b);
return 0;
}
これはいくら型を定義しても一番元の型でしかオーバーロード
出来ないということを表していますか?
0754デフォルトの名無しさん2015/04/25(土) 14:59:35.84ID:uRlefziJ
ところでusingとtypedefって強さが違うんだっけか。
何が違うんだ?

個人的解釈では、usingは#defineに近いと思うんだけど。
0755デフォルトの名無しさん2015/04/25(土) 15:05:50.58ID:MrtcAGpR
おなじ
usingはテンプレート使える
0756デフォルトの名無しさん2015/04/25(土) 15:22:33.08ID:4ZOw+iO4
>>753
いいえ
usingは型の定義でないためオーバーロードに関係しない
ということを表しています
0757デフォルトの名無しさん2015/04/25(土) 16:45:29.03ID:kJ4fYYnY
typedefに代えてみても同じ結果なんですけど
0758デフォルトの名無しさん2015/04/25(土) 16:48:32.16ID:uRlefziJ
ストロングTypedefってどうなったんだっけ?
0759デフォルトの名無しさん2015/04/25(土) 17:50:14.22ID:MrtcAGpR
同じ結果とは?
ちなみに俺が試した限り>>753は再定義ってことでコンパイルエラーになる
0760デフォルトの名無しさん2015/04/25(土) 17:57:52.78ID:kJ4fYYnY
再定義なのは関数が再定義ということ
typedefは名前と違って型は定義されてなくてただのエイリアス
0761デフォルトの名無しさん2015/04/25(土) 19:05:40.02ID:MrtcAGpR
T1T2じゃなくてfが再定義ってことで怒られるんです
0762デフォルトの名無しさん2015/04/25(土) 19:09:26.02ID:o0+9PbYE
オーバーロード解決は
別名を実体に読み替えた結果に対して
行われる
0763靖国参拝、皇族、国旗国歌、神社神道を異常に嫌うカルト2015/04/26(日) 01:06:12.88ID:Y3MqWFkg
★マインドコントロールの手法★

・沢山の人が偏った意見を一貫して支持する
 偏った意見でも、集団の中でその意見が信じられていれば、自分の考え方は間違っているのか、等と思わせる手法

・不利な質問をさせなくしたり、不利な質問には答えない、スルーする
 誰にも質問や反論をさせないことにより、誰もが皆、疑いなど無いんだと信じ込ませる手法


偏った思想や考え方に染まっていたり、常識が通じない人間は、頭が悪いフリをしているカルト工作員の可能性が高い


10人に一人はカルトか外国人

「ガスライティング」で検索を!..
0764デフォルトの名無しさん2015/04/26(日) 16:56:28.13ID:393KDKRY
クラステンプレートとクラスとそれらのエイリアスは
それぞれ名前かぶりNGなんだな
0765デフォルトの名無しさん2015/04/26(日) 23:12:37.33ID:qsJkdqQp
文脈による
全ての文脈で名前かぶりがNGなわけではない
0766デフォルトの名無しさん2015/04/26(日) 23:26:50.69ID:mJnTBcXB
Namespace内で名前かぶるなら設計が破綻してるんだろうね
0767デフォルトの名無しさん2015/04/27(月) 07:29:16.45ID:RDoDXQt4
#include <iostream>
using namespace std;

namespace stb{
template <int a>
struct A{};

template<>
struct A<1>{};


template<>
struct A<2>{};
}
using A=stb::A<0>;
int main() {
A a;
// your code goes here
return 0;
}
こうやればいいのですね
0768デフォルトの名無しさん2015/04/27(月) 23:02:20.97ID:yA/R8UqB
突然イミフなコードを貼ってどうしたキチガイ?
0769デフォルトの名無しさん2015/04/27(月) 23:27:40.51ID:iwSGH0YN
template<class T>
のTに指定できるクラスを特定のクラスを継承したクラスに限定することはできますか?
javaの
<T extends BaseClass>
みたいな感じです
0770デフォルトの名無しさん2015/04/27(月) 23:33:01.35ID:zBMGGyjk
type_traitsを使えば
0771デフォルトの名無しさん2015/04/28(火) 00:39:35.57ID:rO9C2aMo
#include <type_traits>
using namespace std;

struct A { };
struct B : A { };
struct C { };

int main()
{
static_assert(is_base_of<A, B>::value == true, "test1");
static_assert(is_base_of<C, B>::value == true, "test2");
}
0772デフォルトの名無しさん2015/04/28(火) 11:58:46.09ID:LPS4eGQB
ださいな
0773デフォルトの名無しさん2015/04/28(火) 14:04:45.23ID:DcmqCUHe
挑発か
0774デフォルトの名無しさん2015/04/28(火) 14:26:35.30ID:zJix27jC
Javaのextendsは採用すべき
0775デフォルトの名無しさん2015/04/28(火) 19:22:11.45ID:O4BRNsoF
C++に未来はありますか?
0776デフォルトの名無しさん2015/04/28(火) 19:51:30.18ID:RqukAnDa
>>775
「未来はある」の定義を書いてください
0777デフォルトの名無しさん2015/04/28(火) 19:57:36.95ID:UkjyGXUe
extendsみたいな特定の状況にしか使えないような奴はわざわざ作らんだろう
0778デフォルトの名無しさん2015/04/28(火) 20:43:07.87ID:KqTo4oQm
そもそもconceptがそういうの含んだ
万能仕様だったんだよな
0779デフォルトの名無しさん2015/04/28(火) 20:53:56.54ID:c2LgMy5Q
>>771
なるほど
ありがとうございます
勝手にコンパイルエラー出してくれるようなのはなくて自分で実装するんですね
0780デフォルトの名無しさん2015/04/28(火) 21:43:53.16ID:O4BRNsoF
>>776
解釈はお任せします
0781デフォルトの名無しさん2015/04/28(火) 21:45:16.74ID:HJC1x643
>>778
そうなのか。
今回のは特定のクラスを継承したものだけど
XXXを満たしていない(必要条件満たしていない)のは駄目よとか出来たら良い場合があるだろうからな
0782デフォルトの名無しさん2015/04/29(水) 20:10:58.14ID:DS/25RlU
独習C++の43ページに載ってるclockを使って
オブジェクトの生成から破棄までの時間を表示するサンプルを打ち込んだんだけど
0としか表示されません。
Linux上でg++でコンパイルするとダメなんですか?
0783デフォルトの名無しさん2015/04/29(水) 21:15:49.85ID:DE/4ZI+P
そんな本知らんがな(´・ω・`)
0784デフォルトの名無しさん2015/04/29(水) 21:40:30.56ID:OLydmyrx
>>782
あれは素朴なシステムを仮定しているから、うまくいかなくても仕方がない、放っておいて先に進んでいい
http://codepad.org/lwVv40bM
0785デフォルトの名無しさん2015/04/29(水) 22:29:16.71ID:DS/25RlU
そうなんか
じゃ、貼ってあるサンプルで試すわ(知らん文法混じってるけどw)
0786デフォルトの名無しさん2015/04/29(水) 22:52:17.66ID:CTelZnde
>>784
なんでループ内で毎回clock呼んでるの?
0787デフォルトの名無しさん2015/04/29(水) 22:58:12.97ID:OLydmyrx
>>786
時間稼ぎ‥
0788デフォルトの名無しさん2015/04/30(木) 00:10:40.06ID:BTfegUIh
コード知らんけど>>782のは生成〜破棄が速すぎとか最適化で消えてしまったとかじゃないの?
0789デフォルトの名無しさん2015/04/30(木) 14:27:12.72ID:ts1JvyON
clockを使う奴は低能
0790デフォルトの名無しさん2015/04/30(木) 19:32:57.36ID:ioxLfyOW
>>789
ハーバート・シルトにいってくれ
0791デフォルトの名無しさん2015/05/01(金) 03:16:47.61ID:vlM+4MwR
普通の使い方してるなら時刻はchrono一択だと思うんだが
clock何ソレうまいの?
しかもstd::clockじゃなくて::clockなんてもはや害悪
0792デフォルトの名無しさん2015/05/01(金) 08:10:33.06ID:8Yyb98Ue
おう、そうか‥
thread::sleep_for(chroo::seconds(1));

ありがとよ
0793デフォルトの名無しさん2015/05/01(金) 08:23:19.60ID:Js76mxEt
#include<chrono>
#include<thread>
using namespace literals;
std::this_thread::sleep_for(1s);
とマジレスしてみる
0794デフォルトの名無しさん2015/05/01(金) 23:24:59.80ID:u780NpkF
>>791
何も知らないんだね
0795デフォルトの名無しさん2015/05/02(土) 02:28:07.49ID:8rP+TIaj
>>791
clockは時刻とは関係ないよ
0796デフォルトの名無しさん2015/05/02(土) 02:50:31.53ID:RXlt9kb8
すみません、計算が苦手で思いつかないんですが
一フレームごとに1ずつ増加する変数Aがあるとして
(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22、と推移している)

毎回、その変数Aの値だけを確認しては
その値の1の位だけを取り出して変数Bに格納したいんです。

それをシンプルにはじき出せる計算式ってありますか?

自分だと、毎回十の位を割り出してそれを引く方法しか思いつきませんが、
それだとスマートじゃないというか、十の位を判断する処理まで作るのは
理想じゃないんです。

ある二ケタの数字にかけると、必ずその数字の1の位が出る、みたいな
計算式ありませんか?
0797デフォルトの名無しさん2015/05/02(土) 03:02:55.89ID:sa9psCKp
>>796
ttp://ideone.com/0SjnMs
こんなんでいいのか
0798デフォルトの名無しさん2015/05/02(土) 03:08:43.94ID:RXlt9kb8
>>797
これです、ありがとうございました。
0799デフォルトの名無しさん2015/05/02(土) 11:04:57.48ID:oC0JGlfI
そういえば十の位だけ求めたいって時に
%100して/10とかやってるけど、その方法で良いんだろうか
0800デフォルトの名無しさん2015/05/02(土) 11:05:18.72ID:KaJzo6cD
他人に教えるときにenumを定数代わりに使う糞コード貼るなよ
何百年前のコンパイラ使ってんだ
0801デフォルトの名無しさん2015/05/02(土) 11:20:08.16ID:4YrLKI3W
#defineよりいいだろ
0802デフォルトの名無しさん2015/05/02(土) 11:22:56.48ID:oC0JGlfI
大昔は#defineとかの代わりにenumを使う風習があったん?
0803デフォルトの名無しさん2015/05/02(土) 11:25:47.58ID:4YrLKI3W
#defineは単なる置換だからそれが問題になるケースがある
その代りにenumを使うようになった
0804デフォルトの名無しさん2015/05/02(土) 11:26:56.73ID:lFTXoRNX
そんな昔にコンパイラってあったっけ?
0805デフォルトの名無しさん2015/05/02(土) 11:28:50.69ID:BbwZ7nY0
クラスの中に定数を書くときに
 class unko {
  enum {U1, U2};
 };
とか流行ったね。グローバルなら昔は
 const int U1 = 100;//内部リンケージ
 static const int U1 = 100;
と書いた。グローバルにenumを使うのは聞いたことがない。
0806デフォルトの名無しさん2015/05/02(土) 11:34:00.77ID:oC0JGlfI
>>803>>805
ありがと。
問題になるとしたら単純置換ってことだろうなとは思ってたが、やはりそうか。

昨今の「コードの目的が分かるように書く」ってのとは違う
バッドノウハウsって感じだね
0807デフォルトの名無しさん2015/05/02(土) 13:42:36.40ID:EaDYU6BE
#defineはnamespace効かないから特にヘッダーファイルではもう極力使わないな
0808デフォルトの名無しさん2015/05/02(土) 13:45:51.31ID:GHLPNI3D
STLのヘッダはdefine使いまくり。
defineは便利。
0809デフォルトの名無しさん2015/05/02(土) 13:49:11.66ID:YO5MAHbf
undefされてないんだっけ
0810デフォルトの名無しさん2015/05/02(土) 14:44:41.22ID:F+loCXy5
マトモなネーミングセンスなら衝突しないから問題ない
衝突したらユーザの能力不足
0811デフォルトの名無しさん2015/05/02(土) 15:31:29.27ID:EtP40/SZ
初心者です。

C++を読もうとした事が無いのですが、C が出来れば読めますか?
0812デフォルトの名無しさん2015/05/02(土) 15:32:41.05ID:YO5MAHbf
無理
0813デフォルトの名無しさん2015/05/02(土) 15:33:41.26ID:4YrLKI3W
無理
0814デフォルトの名無しさん2015/05/02(土) 15:42:41.38ID:gAnCVUja
無理
0815デフォルトの名無しさん2015/05/02(土) 15:57:11.57ID:XBfs8u1C
無理
0816デフォルトの名無しさん2015/05/02(土) 16:25:38.58ID:jUtO03f6
>>811
Cが出来ない人に比べたら1000倍のアドバンテージがある、全然問題ない
0817デフォルトの名無しさん2015/05/02(土) 16:59:55.14ID:0E2FXew4
無理
0818デフォルトの名無しさん2015/05/02(土) 17:59:04.22ID:nMBC7KyN
かつて cfront 1.0 という
それはそれは面白いおもちゃがあってだな...
0819デフォルトの名無しさん2015/05/02(土) 18:36:45.72ID:4VidBwQk
おっさんだけどこれから始めます。
0820デフォルトの名無しさん2015/05/02(土) 18:50:21.10ID:4VidBwQk
ロベールのC++入門講座が教科書です。
0821デフォルトの名無しさん2015/05/02(土) 19:23:22.70ID:Pp1W31E3
複数のソースファイルで変数を共有しようとしたとき、ヘッダーにextern 型名 変数名;で行けますよね?
これが配列になるとどうなるのでしょう

ヘッダーに具体的な内容は書くなと教わりましたので配列長や初期化子を書くのがおかしく思えます。
これでちゃんと動作するでしょうか
0822デフォルトの名無しさん2015/05/02(土) 19:31:07.04ID:YO5MAHbf
普通は配列長は書くけど初期化子は書かない
0823デフォルトの名無しさん2015/05/02(土) 19:33:26.71ID:F+loCXy5
グローバル変数が必要なのかあと5回考え直してこいよ
0824デフォルトの名無しさん2015/05/02(土) 19:35:19.96ID:vEV2L0W4
externの仕様ってCとC++で違ってないか?
かなり昔にexternで共有しようとして、できなかった記憶でそれ以来つかってない気がする。
グローバルで共有しなくても引数などで渡したら同じでは。
0825デフォルトの名無しさん2015/05/02(土) 19:40:28.44ID:vEV2L0W4
クラスのstaticでも共有できないか。
0826デフォルトの名無しさん2015/05/02(土) 19:50:11.23ID:Pp1W31E3
>>825書いた配列長がだぶって確保されることはないですよね。ならいいんですが

>>823グローバル変数を嫌う風潮は名前空間以前の話だと思い込んでましたが。。。

>>824初耳です。とりあえずC++の方で話してください

>>825組み込み関数の配列ならまだわかりますが、自作クラスの配列なのでなんか大げさな気がするのです。
0827デフォルトの名無しさん2015/05/02(土) 20:40:26.46ID:F+loCXy5
>>826
名前空間なんてグローバル変数の前には何の役にもたたん
0828デフォルトの名無しさん2015/05/02(土) 21:28:13.14ID:Pp1W31E3
名前空間のおかげで名前の衝突は解決されたし、設計をうまくすればどこで初期化されたのかもわかるんじゃ……
グローバル変数嫌いなのは設計をしっかりやってこなかったことの表れなのかと
0829デフォルトの名無しさん2015/05/02(土) 22:16:13.30ID:sWDugFs4
なんでさっきからグローバル変数⊂名前空間になってんの
0830デフォルトの名無しさん2015/05/02(土) 23:24:29.76ID:5bZclG1s
>>828
ビジネスは変化するものだ
ドメインが変化すれば設計も変わる
グローバル変数はシステムから進化の柔軟性を奪う
設計を上手くすればグローバル変数が
あってもいいなんてのは言い訳だよ
グローバル変数を無くした設計のほうが優れてるのだから設計を上手くすればグローバル変数も消える
0831デフォルトの名無しさん2015/05/03(日) 01:27:58.33ID:K2cB2VuV
>>821
extern 型名 変数名[];
[]の中にサイズを書いてもよいが、
具体的な内容かどうかはおまえが判断することだ。

# Cとの違いはconstとtentativeだが、ここでは関係ない
# グローバルは必要かどうか? おまえも脱力したようにまったく関係ないw
# グローバルを使わないことが最終目的化した「設計」なんて糞!相手にすること自体が「退化」でしかない
0832デフォルトの名無しさん2015/05/03(日) 04:07:52.00ID:OTfyPYZU
先頭に「#」つけるの何か意味あるの
読みにくくてバカっぽいんだけど
0833デフォルトの名無しさん2015/05/03(日) 08:55:02.54ID:n+HTtmT9
fjの頃は「コメント(独り言)だから読まなくていい」だった。
転じて、「ここ突っ込まないでね」という意味で使う人もいる。

本文より#が長い奴はバカかチキンとみなされた。
0834デフォルトの名無しさん2015/05/03(日) 12:12:51.34ID:PxtFfrN4
fjという掲示板的なコミュニケーション手段が流行っていた頃は
「コメント(独り言)だから読まないでね」を言い訳に
負け惜しみ的な挑発を書くのに使用された
0835デフォルトの名無しさん2015/05/03(日) 12:39:04.91ID:EHyjOu1T
>>821
>ヘッダーに具体的な内容は書くなと教わりましたので配列長や初期化子を書くのがおかしく思えます

「利用に不必要な実装の詳細を書くな」というのはまだわかるが
具体的な内容を書くなというのは低能すぎるだろう。
配列の要素数ってのは型の一部で初期化データとは訳が違うし
書いてないと出来ないこともある。
要素数を使うテンプレートとforループと不完全型が許されない文脈。
0836デフォルトの名無しさん2015/05/03(日) 17:23:40.64ID:0nFiiEQC
負け惜しみねえw
突っ込めないのを突っ込まないことにして挑発してる誰かさんのブーメランかよ
0837デフォルトの名無しさん2015/05/03(日) 18:13:03.64ID:7AJkLeM5
fj の話しなのに、自分の話かと思って反応してるのか? w
0838デフォルトの名無しさん2015/05/03(日) 19:04:43.72ID:0nFiiEQC
fjの話ということにしたいのですね
0839 ◆QZaw55cn4c 2015/05/03(日) 20:05:35.06ID:fqhnuaMP
>>834
しかしコメント行は積年の人生訓話でありいろいろと参考になった

>>821
QZ芸の「extern は要らない子っ!」を君に贈ろう、C ならば tentative を駆使して extern を排除するのが好み、あくまで好みだが。
>>831 の言及するとおり、C と C++ との一番の違いは tentative.

リンクのときにすべての *.o は一つにまとまるのだから、実は必ずしもヘッダに extern 宣言をする必要はない
俺は、ちょいと「見えてくれればいいなあ」と思ったときには躊躇なく *.c のなかで extern しちゃったりする
こんな感じで
/* makefilename.c */
/* $Date: 2012-03-21 04:08:22 $ */
#include <windows.h>
#include "makefilename.h"
#include "combdoctype.h"
#include "combname.h"
#include "editdate.h"
#include "wmalloc.h"

extern char *ComboDocTypetableG[];
extern char *ComboNametableG[];

しかし、お行儀よくするのならヘッダで extern 宣言するべきなのかもしれない。
配列の extern の場合は、俺はサイズを書かない。配列サイズは実際に確保するところで書く
ただし配列の実際のサイズはきちんとコードで周知させるようにはする
0840デフォルトの名無しさん2015/05/03(日) 21:01:45.68ID:5tvSOVaU
>tentative を駆使して extern を排除する

このバカはextern無しでうまく動いてしまった理由も理解してなかったのか
0841 ◆QZaw55cn4c 2015/05/03(日) 23:20:41.20ID:fqhnuaMP
>>840
普通の環境なら問題なくリンクできるよ
だからこそ C89 で tentative defenition がわざわざ定義されているだろう?
お前は MASM を勉強したほうがいい
0842 ◆QZaw55cn4c 2015/05/03(日) 23:43:16.65ID:fqhnuaMP
あぁ、ライブラリの話はもういいからね‥それはよくわかってる‥
0843デフォルトの名無しさん2015/05/04(月) 01:52:23.14ID:HqIFPjtb
おーいバカ
C:\>"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\vcvars32.bat"

C:\>masm
'masm' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

C:\>ml
Microsoft (R) Macro Assembler Version 14.00.22310.1
Copyright (C) Microsoft Corporation. All rights reserved.

usage: ML [ options ] filelist [ /link linkoptions]
Run "ML /help" or "ML /?" for more info

アフォなの? 死ぬの?
0844デフォルトの名無しさん2015/05/04(月) 03:12:02.35ID:DvxDo7Th
>>839
リンカがシンボル重複エラーを無視するのはC++のODRと違って
保証されない動作なんだから他人にすすめるなボケ
0845デフォルトの名無しさん2015/05/04(月) 04:19:36.92ID:rkUrIZbg
>>843
ms-c6 の時代から cl だったし ml だったろう?お前は何をいいたい?

>>844
C に関して自分の好みを書いただけ、C++ は別としたが、明言はしなかったのは悪かった。
>>839 で >>821 に薦めたのは「(一次元)配列を extern するときは配列サイズを明示しない」だが、それに問題があるの?
0846デフォルトの名無しさん2015/05/04(月) 10:50:47.63ID:8XXgjNL8
>>845
844はtentativeが解ってないんだよ
シンボルは重複しねえの知らねーし
08478352015/05/04(月) 11:26:50.69ID:6tuENR75
>>845
日本語が読めないようだけどもう一度教えてやろう
>>835のようなケースでコンパイルが通らないという問題がある
例1: for (auto i : arrar1)
例2: sprintf(arrar1, "%d", 100);//sprintf_sの配列板MS拡張
例3 decltype(arrar1) arrary2
0848デフォルトの名無しさん2015/05/04(月) 11:50:09.37ID:Brvnrtbf
ちゃんとクソコテつけろよ
tentative definitionは一つの翻訳単位の膣中の話なので関係ないだろう。
ただリンカの重複は規格上許可されている。
ISO/IEC 9899:2011
J.5.11 Multiple external definitions There may be more than one external definition for the identifier of an object,
with or without the explicit use of the keyword extern; if the definitions disagree,
or more than one is initialized, the behavior is undefined (6.9.2).

定義が異なったり複数回初期化されると未定義ということは、
一致している限りODRと同様に複数回の定義を許していると読んだ。
0849デフォルトの名無しさん2015/05/04(月) 13:52:05.20ID:8XXgjNL8
効いてる、効いてるw
アラーの神が配列板のMSスレで中出しって凄い妄想だな

# リンカは重複しねえんだよ
0850デフォルトの名無しさん2015/05/04(月) 15:36:30.62ID:0fo8dLYV
tentativeはCのスレでやろう
0851デフォルトの名無しさん2015/05/05(火) 02:41:06.16ID:i6lTVV+i
みんな!Boostは積極的に使ってるかい?
「Boostってなんや!そんなん使ったらわからへんやろ!やめや!」言われてないかい?
0852デフォルトの名無しさん2015/05/05(火) 02:55:18.30ID:EIQ3MmMp
Boostは7〜8年前くらいまでは使ってたけど、もう全然使わなくなったな
0853デフォルトの名無しさん2015/05/05(火) 17:09:38.91ID:GWkF3sJ3
>>852
詳しくないけど、どういう部分?
0854デフォルトの名無しさん2015/05/05(火) 17:14:25.41ID:vYfhfuWD
面倒なことは別の言語でやったほうがいい
0855デフォルトの名無しさん2015/05/05(火) 17:14:54.26ID:By/mCe1Z
別の言語だと面倒じゃないの?
0856デフォルトの名無しさん2015/05/05(火) 18:38:03.39ID:u63F52Uq
VCに関数チェイン入らねーかなー。
面白いライブラリ書きたいと思ってるんだが。
0857デフォルトの名無しさん2015/05/06(水) 02:55:14.17ID:GDfCo5jZ
熟練者の方にお聞きしたいのですが
当方ビジュアルスタジオ2010にてアクションゲームを作っているんですが、
デバッグ中、配列に格納したマップ情報とオブジェクトとの判定をする部分で
ごくまれにエラーが起きて停止します。
経験則で判断すると、マップ判定でのエラーは
マップ情報の無い部分にオブジェクトが飛び出すというものが多かったんですが
今回は目視ですべてのオブジェクトが飛び出してるか否か確認出来る状態で
毎回エラー発生時に怪しいオブジェクトがいないので、今までのエラーとは違うような気がします。
しかも、滅多にそのエラーが出ないため、原因を探れません。

ただ、気持ち悪いことがひとつありまして、そのエラーで停止したあと、
マップの情報を入れた配列にカーソルを当てて、要素を見たら、
途中から「?」という状態になって表示されてるんです。
http://download1.getuploader.com/g/zipc ... e/91/B.png
http://download1.getuploader.com/g/zipc ... e/90/A.png
これがおかしなことに、見るのを止めて、もう一度カーソルを合わせてみると
今度はちゃんと中身が入ってる状態で表示されたりします。

ビジュアルスタジオの扱いにまだ慣れてないせいもあり、
中身が「?」で表示されたのは初めてだし、覗き直すたびに
「?」だったり、ちゃんと中身が見れたりすることが気持ち悪いんですが
これは別に、問題ないのでしょうか?(もともとそういうものだ、とか)
もし、ゲーム中に配列の中身が「?」みたいになる瞬間があるのなら
そりゃいきなりオブジェクトがど真ん中にいてもエラーになると思うんです。。。
これが原因なのかと思うんですが、、違いますか?
もしくは配列覗いたときの、「?」表示はビジュアルスタジオのバグなんでしょうか?

ちなみに、マップ配列の中身の格納はゲームが始まる最初に行っているので、
ゲーム中にマップ配列の中身が変わることは考えられない仕様です。
だとするとこの「?」はなんなんでしょうか?
考えられる要因を教えて下さい、お願い致します。
08588572015/05/06(水) 02:56:58.20ID:GDfCo5jZ
すみません、症状の画像のURLが貼れてませんでした
こちらです。
http://download1.getuploader.com/g/zipcodezipcode/91/B.png
http://download1.getuploader.com/g/zipcodezipcode/90/A.png
0859デフォルトの名無しさん2015/05/06(水) 03:08:17.24ID:p+6RqcyD
画像が見れない。
推測ではただのデバッガの都合だから、気にスンナとしか思わん。
あと、vector使うべし。
0860デフォルトの名無しさん2015/05/06(水) 03:12:16.76ID:GDfCo5jZ
>>859
レスありがとうございます。
もちろん、ベクターを使っております。
画像は>>858に見れるURLを貼りましたが確認無理ですか?(pugだからでしょうか?
0861デフォルトの名無しさん2015/05/06(水) 03:23:24.18ID:p+6RqcyD
あー、見れるよ。すまんね。
レンジがでかすぎるんじゃないかなぁ。
デバッガにはお世話になってるが、いつもブレークポイントで止めて使ってるなー。
自分は2013使ってるが、そんな感じにはならんな。
なんかそろそろ2015が出るそうだ。
0862デフォルトの名無しさん2015/05/06(水) 03:25:42.07ID:D+nPUDhH
配列の範囲外アクセスっぽく見えるけど、y,xの値はチェックした?
0863デフォルトの名無しさん2015/05/06(水) 03:27:57.23ID:GDfCo5jZ
>>861
えっと、ベクターでエラーが起きたら中断するじゃないですか?
そのときに、エラーの起きた個所に黄色の矢印が出て
そこの配列の中身を見ると、画像にあるように「?」とかなるんです。
ただ、気持ち悪いのは、もう一度見直すと、中身がちゃんと入ってたりするんですよね。
単なるvisualstudioのバグでしょうか?
0864デフォルトの名無しさん2015/05/06(水) 03:33:23.08ID:GDfCo5jZ
>>862
はい。範囲外では無いはずなんです。
言うなら、二次元配列(map[90][60])で作った画面(map)の
ど真ん中でこのエラーが起きる感じなんです。

ちなみに、細かくどこの場所(配列の要素数)で起きたかを確認しようと
yとxにカーソルを当てた場合、yの値が表示してくれず、、
visualstudio2010を使ってまだ1年ほどですが、たまに思うんですけど
ブレークポイントで止めたとき、
すべての変数の中を確認表示されるわけじゃないですよね?
カーソルをあてても反応しない変数が多々ありますよね?
0865デフォルトの名無しさん2015/05/06(水) 04:09:58.30ID:D+nPUDhH
念のため、アクセスする直前に範囲外かどうかチェックするコードを入れてみるとかしたらいいかも
あとデバッガで表示されないのはリリースビルドでデバッグ情報が無効とかじゃないかな
ビルド構成をDebugにすれば出ると思う
0866デフォルトの名無しさん2015/05/06(水) 04:17:21.02ID:GDfCo5jZ
>>865
深夜なのに付き合ってくださって本当にありがとうございます。
非常に心強いです。

>念のため、アクセスする直前に範囲外かどうかチェックするコード

なるほど、了解しました。

>リリースビルドでデバッグ情報が無効とかじゃないかな
>ビルド構成をDebugにすれば出ると思う

ああ、確かに上記の配列確認は
リリースで実行中に出たエラー中断で確認してました。
ちょっとデバッグで確認してみます。

稀にしか出ないエラーですので
これらをチャレンジして、また昼にでも報告させて頂きます。
ありがとうございます。
0867デフォルトの名無しさん2015/05/06(水) 07:20:03.49ID:X3Q3K5tH
std::vector::at
0868デフォルトの名無しさん2015/05/06(水) 09:53:43.87ID:GDfCo5jZ
>>865
問題が解決しました、エラーはちょっとしたミスでした。
また、変数の中身の話もリリースじゃ無くデバッグにしたら問題無かったです。
ありがとうございました。
0869デフォルトの名無しさん2015/05/06(水) 13:30:00.38ID:UJrx/1uR
マルチ
ttp://peace.2ch.net/test/read.cgi/tech/1423872914/653
0870デフォルトの名無しさん2015/05/06(水) 13:45:00.47ID:8+3ki+s8
だから何だ、暇なやつだなあ
ネットの警察気取りか? 2ちゃんのスッパマンよ
0871デフォルトの名無しさん2015/05/06(水) 13:56:28.39ID:28cWsqJb
人の質問の邪魔して何が楽しいのだろうか
0872デフォルトの名無しさん2015/05/06(水) 14:23:43.84ID:UsA1ITN/
(いや、ネット警察とかじゃなくてもマルチはダメだろう…
0873デフォルトの名無しさん2015/05/06(水) 14:30:49.20ID:8+3ki+s8
思い込みが激しいやつって痛いね
0874デフォルトの名無しさん2015/05/06(水) 14:51:06.63ID:II8rx/Qj
マルチはダメだろ
向こうでも対応してるレスあるけど、結局無視だしな
最低限のマナーは守るべき
0875デフォルトの名無しさん2015/05/06(水) 14:58:52.37ID:28cWsqJb
マルチがダメだと言ってる人たちは
なぜマルチがダメか考えたことないんだろうな・・・
誰かが言ったからダメ程度の浅はかな知識しかないのだろう
0876デフォルトの名無しさん2015/05/06(水) 15:03:19.85ID:ROM3ZfOK
マルチ商法は犯罪だからダメです
0877デフォルトの名無しさん2015/05/06(水) 15:07:19.05ID:KY+yTKiM
マルチポストは自分の首しめてんの気がづかないのかね
馬鹿だなぁ
0878デフォルトの名無しさん2015/05/06(水) 15:18:41.56ID:A7Bt3It+
マルチポストに反感を持つ人が回答を避けたとしてもまぁ、あまり実害はないだろう。
この板は誤読とか変な思い込みで頓珍漢な回答する人も多いけど、そういう層と
かなりかぶってそうな気がする。
0879デフォルトの名無しさん2015/05/06(水) 15:50:53.32ID:8+3ki+s8
もともとはクロスポストぐらい知っていろという訓だったが
今はクロスポストを知らないやつほど金切り声をあげる皮肉な遺産となった

権利のない主張をぎゃんぎゃん吠えるという点では直リンと似ている
これもかぶってるんじゃないかねえ
0880デフォルトの名無しさん2015/05/06(水) 16:39:28.20ID:II8rx/Qj
>>875
で、何が言いたいんだ?
浅はかな知識で考えた言い訳かい? w
0881デフォルトの名無しさん2015/05/06(水) 16:42:46.18ID:II8rx/Qj
>>879
クロスポストの機能のない掲示板でなに言ってるんだ?
バカなの?
0882デフォルトの名無しさん2015/05/06(水) 16:48:37.64ID:8+3ki+s8
>>881
だからシュールな主張だってことだよ
おまえ結局、何がダメなのか、何の権利で言ってるのか説明できないだろ

せいぜい言論の自由くらいだろ、おまえの頭ん中は
0883デフォルトの名無しさん2015/05/06(水) 16:53:41.36ID:7JUI6d7v
うっせーよ黒酢投げんぞお前ら
0884デフォルトの名無しさん2015/05/06(水) 17:13:31.94ID:II8rx/Qj
>>882
> おまえ結局、何がダメなのか、何の権利で言ってるのか説明できないだろ

> 向こうでも対応してるレスあるけど、結局無視だしな

の意味も理解できてないのかよ...

> せいぜい言論の自由くらいだろ、おまえの頭ん中は

言論の自由?
最近覚えたのか?
全然関係ないぞ w
0885デフォルトの名無しさん2015/05/06(水) 17:41:23.74ID:EH6/9roM
マルチが駄目な理由は、返事を書いたのにスルーされたら寂しいからです。
0886デフォルトの名無しさん2015/05/06(水) 17:49:37.50ID:UJrx/1uR
わかる、わかるぞー自演で自己擁護したい気持ちw

>>870 ID:8+3ki+s8
>>871 ID:28cWsqJb
0887デフォルトの名無しさん2015/05/06(水) 17:54:59.51ID:EiqG0b91
マルチの上に自演かよ最悪だな
0888デフォルトの名無しさん2015/05/06(水) 18:09:55.82ID:28cWsqJb
お葬式のときは黒い服を着ていかないとダメくらい
マルチはダメはアホな考え方だな
0889デフォルトの名無しさん2015/05/06(水) 18:11:47.91ID:uuh+Gth4
マルチがダメなのは
ダメだと言っている人が居たからです
ボクの常識です
でも他人にとって常識かどうかは不明です
0890デフォルトの名無しさん2015/05/06(水) 18:12:09.84ID:28cWsqJb
正解を言うとマルチがだめなのは
みんなマルチはダメだと言っているから
みんなが言っていることは正しい
みんなが言ってないことは間違っているという
自分の意見の無い村社会の日本人の典型的な考え方
みんなが守っていることをやらないとそれを口実に
そいつを殺したり殴ったりしてもいいというのが
日本人の村社会
0891デフォルトの名無しさん2015/05/06(水) 20:35:23.09ID:J3gYGT68
なんかもうかわいそうになってきたわ
0892デフォルトの名無しさん2015/05/06(水) 20:37:22.46ID:uy7C1mjZ
マチルダさんのスレかと思った
0893デフォルトの名無しさん2015/05/06(水) 20:40:13.10ID:5sLgMUIt
マルチポストがダメな理由はね
質問の分散、その回答の分散と大抵の場合片方はスレ違いになっているからなんだよ
また回答さえもらえればそれでいいという質問者の姿勢が見え隠れすることも問題が提起される原因になっているのかもしれない
きっと最初のスレで誘導ありがとうございますと言い他のスレから来たことを伝え改めて質問をすれば優しい世界になっていたことでしょう!!
0894デフォルトの名無しさん2015/05/06(水) 20:43:13.74ID:UsA1ITN/
マルチポストNGという主張が、今の時代にそぐわない部分があるのは確かだと思うけどな

だからまあ、よく知られているデメリット(二度手間だとか情報が集約できないとか)をきちんとカバーすれば
個人的には何ら問題ない、場合によってはメリットになりうるんじゃないかなと
0895デフォルトの名無しさん2015/05/06(水) 20:46:47.47ID:oaUrQJWU
>質問の分散、その回答の分散と
>大抵の場合片方はスレ違いになっているからなんだよ

つまり否定派は>>893のように論理的な思考ができないバカということ?
0896デフォルトの名無しさん2015/05/06(水) 21:02:03.84ID:A7Bt3It+
質問と回答の分散ってのが何を問題にしているのかいまいちわからんが、同じ回答が
両方のスレに書かれるのが無駄ってことかね?
0897デフォルトの名無しさん2015/05/06(水) 21:05:33.20ID:EiqG0b91
片方しか見てなければ重複して回答している労力の無駄になるし
両方みてれば重複してやりとりを見る無駄になるし
やるなら一つに投下して、で理由があれば移動先を示して移動すればいい
0898デフォルトの名無しさん2015/05/06(水) 21:12:09.25ID:gh4kMUAt
お前が勝手に両方に回答してその無駄を質問者のせいにしてゴネているとな。
それぞれのスレで両方とも回答レスがあったら今度は
二回も回答を目にしてしまったことに対してマルチ否定を唱えるとは
やはりマルチ否定派は頭がおかしい
0899デフォルトの名無しさん2015/05/06(水) 21:38:35.41ID:A7Bt3It+
「せっかく回答したのに、他のスレで回答もらってこっちは無視かよ」とか、そういう話かな?
0900デフォルトの名無しさん2015/05/06(水) 21:47:50.28ID:q7mBNPu7
それは回答にお礼をしなかった質問者が無礼なのであって
マルチが悪いことにはならないぞ
0901デフォルトの名無しさん2015/05/06(水) 21:54:56.61ID:UsA1ITN/
>>899-900
全くもって質問者が悪いのはそのとおりだが、マルチポストのよくある問題の1つには違いないかな
0902デフォルトの名無しさん2015/05/06(水) 22:02:34.46ID:8+3ki+s8
>>901
だから質問者の何が悪いんだよ?
循環論法ぬきできっちり説明しろ
0903デフォルトの名無しさん2015/05/06(水) 23:48:35.25ID:UsA1ITN/
>>902
上2つのレスくらい読めよ。
0904デフォルトの名無しさん2015/05/06(水) 23:55:01.84ID:RN/VQyA5
俺が最初に見つけたんだぞ!

・・・というような権利の主張です。

最初のスレに質問者独占利用権があります。
0905デフォルトの名無しさん2015/05/07(木) 00:04:02.39ID:fQls54Ru
「マルチする奴は回答しても礼も言わない」→「だからマルチ禁止」
こうか?
0906デフォルトの名無しさん2015/05/07(木) 00:14:48.29ID:9dvShzW5
飛躍しすぎじゃね
0907デフォルトの名無しさん2015/05/07(木) 00:20:19.61ID:kuVzgkck
http://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%83%81%E3%83%9D%E3%82%B9%E3%83%88
マナー違反の理由の項目
おおよそ理由はすでに出てるな
内2番め、資源についてはちょっと疑問だが
0908デフォルトの名無しさん2015/05/07(木) 00:29:50.33ID:xpfh09H0
>>903
参考文献をつけるのはありだが
おまえ自身の言葉で何も語らずに参考文献が全て
というスタイルで賛同を受けることができるとでも思っているなら
脳外科を受診したほうがいい
おそらく脳全摘と塩化カリウムの点滴をすすめられるだろうな

他人を「マルチポスト」であると非難するには
挙証責任があるんだが、赤の他人が偶然同じ発言をしたのではないと
どうやって確認しているんだろうな
聴衆の誰かが独り言を言ったに過ぎない、で逃げるなら
こっちもそう扱ってやるだけだが
0909デフォルトの名無しさん2015/05/07(木) 00:43:19.18ID:NPJhmwrP
>>908
ヒント:ID
0910デフォルトの名無しさん2015/05/07(木) 00:55:30.06ID:yrCnDg7F
>>906
全然飛躍じゃないだろ。少なくとも>>899-903読む限り

つまりアレだ。マルチ否定は理屈じゃない。感情だ。
電車の中で携帯電話で話す人がいると怒るのと同じで嫌がる人もいます。
レストランでウンコを連呼する人がいると不愉快に感じて発狂するひともいます的な
0911デフォルトの名無しさん2015/05/07(木) 01:03:42.24ID:xpfh09H0
じゃ、2ちゃんでマルチ禁止を連呼する人がいると怒るのと同じかwww
0912デフォルトの名無しさん2015/05/07(木) 01:06:34.17ID:9qCHaQMT
漏れが思うに
回答者は質問者のために時間を割いているのに
質問者はせいぜい「一応」程度にしか思っていない、
その態度をよく思わないから嫌われるのでは?
まあただ条件反射で言っている香具師も多そうだけどネ
0913デフォルトの名無しさん2015/05/07(木) 01:22:05.20ID:ANuoCHhg
議論が分散するっつーのはあるんじゃないの
おまいらだってC++標準委員会みたいなのがもう2つくらいできちゃったらこまるやろ
0914デフォルトの名無しさん2015/05/07(木) 01:43:08.00ID:IYwlVx6v
ええやん
2つがバトルして勝った方が標準化や!
0915デフォルトの名無しさん2015/05/07(木) 01:44:39.09ID:9dvShzW5
>>910
>899「マルチポストに関して、お礼をしない質問者がいる」
>900「それは質問者個人の問題であり、マルチポストの是非とは少し異なる」
>901「確かにその質問者個人が悪いだけだ。しかしマルチポストでは発生しやすい問題なのは確かだ」

確かに、ここから「だからマルチ禁止にすべき」と結論付けることは可能だが、そう主張するつもりは無かった。
「飛躍しすぎ」という言葉は撤回しよう。すまない。
0916デフォルトの名無しさん2015/05/07(木) 01:44:56.25ID:aqhaq9ot
>>913
目的をすり替えないでください
規格の策定は標準を作成するのが目的なので一つである必要があります
掲示板はアナタの特定のクソ質問のために有るのではなく、C++に関する議論をするためのスレッドがあったり
C、C++を問わず環境依存も可な議論をするためのスレッドがあって、
それを利用してクソ質問を行っているだけなので複数に関して何ら問題はありません
0917デフォルトの名無しさん2015/05/07(木) 01:47:02.07ID:Z0j1nzQ6
2ch内の複数のスレに同じ投稿をするのがマルチポストなら、これはシステム的に解決する方法があります。
0918デフォルトの名無しさん2015/05/07(木) 01:52:09.22ID:aqhaq9ot
>複数のスレに同じ投稿をするのがマルチポストなら、
>これはシステム的に解決する方法があります

いえ問題は何もありませんから「解決」という考えがそもそもおかしいです
0919デフォルトの名無しさん2015/05/07(木) 01:55:56.26ID:9dvShzW5
問題点やデメリットが一切ないと言うなら、
それは流石に違うんじゃないか?
0920デフォルトの名無しさん2015/05/07(木) 02:01:13.73ID:aqhaq9ot
>>919
少なくとも917の読点の前の文章には
解決すべき問題が一切述べられていないぞ
0921デフォルトの名無しさん2015/05/07(木) 02:06:58.62ID:9dvShzW5
>>920
ああ、それもそうだな。すまん
0922デフォルトの名無しさん2015/05/07(木) 08:01:33.92ID:fQls54Ru
>>907
その理由がそのまま2chに当てはまるとも思わんけどな。

>回答が複数のコミュニティーに分散してしまい、知識の集積という一コミュニティーの目的にそぐわない。

一箇所に集積する目的なんかないだろう。分散しすぎることは良くないかもしれんが、それは
重複スレを避けるという方向で調整されているわけなんで、スレ違いにならない限り問題ないだろう。

>その問題に関心のある人は類似した複数のコミュニティーに参加して新規投稿をチェックしていることが
>多いが、あちこちの同じ投稿に対してそれが本当に目新しい内容かを峻別しなければならなくなる。

別に「目新しい内容かを峻別」する必要なんてないだろう。
同じ内容を過度に投稿したらコピペ荒らしと同じで迷惑だが程度問題。

>他のコミュニティーで付けられた回答を知らずに同内容の回答を付けてしまったり、他のコミュニティーで
>すでに解決したことを知らずに検討を続けたり、善意の回答者の労力が無駄になる。

回答する人は別だから余分な労力がかかるわけではないだろうし、1.で前提としているように
回答が有為な知識なのであれば、元の質問者が解決済みだとしてもそれは無駄ではないはず。

>この場所だけでは質問が解決するか不安であるという不信感を表明することと、結果としては同じである。
>こうしたことから、回答をする意欲を失わせたり、不快な気分にさせてしまう場合がある。

不快と思ったら回答しなきゃいいわけで、回答がもらえるように努力するのは質問者の責任。
名指しで質問してるわけじゃないんだから、なんで不快になる必要があるのかとも思うけどね。
0923デフォルトの名無しさん2015/05/07(木) 08:25:40.05ID:dSzt+ngq
「今回のケースは片方放置」
だから指摘された

そこを抜きで話を進めるのはどうなんだ
0924デフォルトの名無しさん2015/05/07(木) 08:34:57.41ID:5OlGDsGz
整合性の問題なんですよ。
断言しますが、これはたらこが作ったシステムの問題です。
0925デフォルトの名無しさん2015/05/07(木) 08:49:48.19ID:fQls54Ru
>>923
放置したこと自体が問題なんだろう?マルチポストとは直接関係ない。
関係あるというなら>>905
0926デフォルトの名無しさん2015/05/07(木) 09:03:45.08ID:dSzt+ngq
>>925
・このスレでは他のスレでも書き込んでる事に言及無し
・このスレで解決後他のスレで言及無し
・礼はどうでもいいが互いのスレで報告くらいするべき

言及有りなら問題じゃないのはわざわざ言う事でもないだろ
0927デフォルトの名無しさん2015/05/07(木) 09:33:28.88ID:gQ8/BIui
お前らが頼りにならないから質問者様はべつのスレにも投稿したんですよ。

全部タラコが悪いじゃないですか。
0928デフォルトの名無しさん2015/05/07(木) 10:24:35.28ID:mmB87F+l
C++の話しようぜ
0929デフォルトの名無しさん2015/05/07(木) 11:07:58.20ID:mvrNqduB
オレはこんな糞な目的にC++を使ったぜ的な?
0930デフォルトの名無しさん2015/05/07(木) 11:11:03.41ID:fp1OfwiH
てぃす
0931デフォルトの名無しさん2015/05/07(木) 18:32:03.86ID:ApTxQWeu
>>926
同一人物が同時期に言うことが、その当時の関心事に相関するのは必然だし
だからって何か言うたびに自分の出没範囲をいちいち紹介するこたねーだろ
そんなことを「べき」とか言っちゃってるおまえは頭おかしい
0932デフォルトの名無しさん2015/05/07(木) 18:51:53.16ID:KZqJgOca
「互い」というのは不用だな
回答が得られなかったスレで回答が得られたスレの紹介だけすればいい
0933デフォルトの名無しさん2015/05/07(木) 19:38:06.46ID:ApTxQWeu
誰が、何のために?
ggrksだろ、そんなの
0934デフォルトの名無しさん2015/05/08(金) 01:12:04.10ID:fm4B3wYY
基地外の集う2chでマナーがどうのこうのっておいおいだろ
0935デフォルトの名無しさん2015/05/08(金) 01:57:17.07ID:yfPyalF1
>>934
それだったら、マナーがどうのこうの言うのにたいして
どうのこうの言うのもおいおいだろ
キリがねーよ
0936デフォルトの名無しさん2015/05/08(金) 02:04:16.58ID:ARdnOE+l
まさに無限ループ
0937デフォルトの名無しさん2015/05/08(金) 02:23:17.53ID:c8/86Wy3
揚げ足ならいくらでも取れるよ。
そんなことやってるうちは相談室ではないな。
0938デフォルトの名無しさん2015/05/08(金) 02:41:27.42ID:y2d+QXKc
>>936
基地外ループ
2chでは普通のこと
0939デフォルトの名無しさん2015/05/08(金) 08:38:55.95ID:oCL66D4S
>>931
この流れで「何か言うたびにいちいち」とか頭おかしいだろ
移動先さえ最初に言ってればそれでいいし
移動先言わずに別で結果出たなら元のスレで移動先と結果言えばいいだけ

>>932
互いってのは「こっちへ移動します」「このスレから着ました」って事な
0940デフォルトの名無しさん2015/05/08(金) 10:00:16.61ID:yfPyalF1
やっぱマルチポストは良くないな
このスレの流れを見ればわかるだろ
馬鹿がマルチしたせいで迷惑かかってる
0941デフォルトの名無しさん2015/05/08(金) 10:16:25.21ID:D0spdUtZ
スルーすれば良いだけなのに
マルチだって騒ぐ奴の方が迷惑
0942デフォルトの名無しさん2015/05/08(金) 10:30:57.36ID:wqWNOpy0
マルチポストしなけりゃマルチだって騒ぐ奴も出てこないんだぜ(ループ)
0943デフォルトの名無しさん2015/05/08(金) 11:29:48.09ID:Yhmm5THU
まあいちいちマルチとか騒ぐのもどうかと思うが、マルチして何が悪いんだ? って開き直るのよりはマシだと思う
0944デフォルトの名無しさん2015/05/08(金) 11:31:27.47ID:OrCViH7z
ageてる奴には文句ないの?
0945デフォルトの名無しさん2015/05/08(金) 11:38:19.96ID:mh9KYOWd
>>939
だから、何がそれで「いい」んだよ?
2ちゃんはおまえのご機嫌を取るためのサイトじゃねえぜ
頭おかしいつったのは、その前提のことだ
天動説的なナルシズムってやつ
0946デフォルトの名無しさん2015/05/08(金) 11:39:56.15ID:mh9KYOWd
>>939
おまえこそ、そんなことをあとどこで言って回ってるのか
ここで列挙してみせたらどうだ
0947デフォルトの名無しさん2015/05/08(金) 12:23:03.50ID:Yhmm5THU
>>944
専ブラだし、あまり気にならないな
少なくとも泣きながら連投してるキチよりマシ
0948デフォルトの名無しさん2015/05/08(金) 14:10:09.07ID:Iyiixb5X
マルチポストはダイレクトメールやスパムみたいなものなんですよ。
0949デフォルトの名無しさん2015/05/08(金) 14:21:03.23ID:mh9KYOWd
C++スレでマルチだのageだのと関係ないことを言い出すバカこそspamだろ
ggrksのような情報価値ゼロのくせに態度だけ偉そうなクズこそspamだろ

技術的な知見がなさすぎてスッパマン化してる情けないやつの仕業
0950デフォルトの名無しさん2015/05/08(金) 14:34:16.68ID:Iyiixb5X
それは緊急対策会議に該当しますね。
0951デフォルトの名無しさん2015/05/08(金) 15:55:40.23ID:oCL66D4S
>>949
関係ある事言ってからにして下さいね
0952デフォルトの名無しさん2015/05/08(金) 16:49:06.68ID:mh9KYOWd
>>951
おまえがな
0953デフォルトの名無しさん2015/05/08(金) 17:13:55.99ID:Iyiixb5X
2chではスレにしろレスにしろ、重複は削除対象なんですよ。
0954デフォルトの名無しさん2015/05/08(金) 17:56:22.30ID:mh9KYOWd
2chでは削除対象は黙って削除依頼だね
そもそも「マルチ」が2ch内での重複のことかどうか疑問だが
0955デフォルトの名無しさん2015/05/08(金) 18:42:18.90ID:Iyiixb5X
>>954
重複が駄目という事は、マルチはダメという事です。

皆さんに謝罪してください。
0956デフォルトの名無しさん2015/05/08(金) 18:58:39.70ID:WF39tTmI
C++スレもレベルが落ちたな‥
0957デフォルトの名無しさん2015/05/08(金) 19:14:17.98ID:4qeZgeCR
クソどうでもいいことでスレが伸びるのはム板の華だもん…!
0958デフォルトの名無しさん2015/05/08(金) 21:08:14.55ID:H6GLXaww
>>957
うん、うん。華だよね
クソどうでもいいことは、だれでも、まー低脳な俺でも激参加できるからね
楽しすぎ。クソどうでもいいこと最高!
0959デフォルトの名無しさん2015/05/08(金) 21:23:05.03ID:yfPyalF1
>>956
マルチ指摘されてブチギレてる基地外が暴れてるだけ
09609542015/05/08(金) 22:28:06.78ID:mh9KYOWd
>>955
駄目かどうか俺は一言も言ってないんだが
おまえ最近脳からウミが出やせんか?
0961デフォルトの名無しさん2015/05/08(金) 23:05:48.25ID:dH7MOosL
ダブ先輩チィっす!
0962デフォルトの名無しさん2015/05/09(土) 01:14:35.06ID:59tNGwWs
基地外が多くて楽しい
住人は脳からウミが出ているやつばかだよな
0963デフォルトの名無しさん2015/05/09(土) 01:17:41.41ID:4slRVscA
C++だからね
むしろマトモな人を探す方が難しい
0964デフォルトの名無しさん2015/05/09(土) 09:31:55.70ID:rE+4crJw
>>960
あなたに決定権はありません。

2ch運営が重複を禁止しました。
0965デフォルトの名無しさん2015/05/09(土) 09:42:06.37ID:QFYNEVBc
>>964
重複スレがどうしたって?
突然何を叫ぶんだ
キモいやつだなあ
0966デフォルトの名無しさん2015/05/09(土) 10:53:33.42ID:OWlYoivl
キチガイ同士仲良くやれよ
0967デフォルトの名無しさん2015/05/09(土) 11:06:43.19ID:xjT36gcw
>>853
遅レスですまんが
Boostの俺にとって重要な部分は大部分標準に吸収されたし
まあ使いたい機能はたまにあるのだが、それだけのためにBoostに依存したくないから
それに仕事でオープンソースライブラリ使うのは最近敷居が高い
0968デフォルトの名無しさん2015/05/09(土) 15:01:22.25ID:t134geph
>>967
ソース非公開ライブラリーの方が怖くないか?
0969デフォルトの名無しさん2015/05/09(土) 15:16:11.87ID:xjT36gcw
>>968
実際そうなんだけどね
でも、オープンソースてかフリーのソフトを使うこと全般に対する社内規制が厳しくて
使いたい場合はめんどくさい承認手続きが必要だったり
0970デフォルトの名無しさん2015/05/09(土) 21:16:24.22ID:xEYfesPT
>>966
仲良し基地外同士ってこれが普通
0971デフォルトの名無しさん2015/05/09(土) 22:39:45.55ID:0eTT8Vrh
>>969
そういう変なとこで厳しい会社は辞めるべきだ
0972デフォルトの名無しさん2015/05/09(土) 23:17:43.17ID:EyvPGW/W
別に変じゃない
誰も不具合の責任取れないものは官庁系では基本的に使用不可
0973デフォルトの名無しさん2015/05/09(土) 23:26:15.73ID:71x2Bj6x
本質は責任がとれるかどうかであって
オープンソースか否かではない?
0974デフォルトの名無しさん2015/05/10(日) 00:00:41.77ID:JmjHVEKM
責任問題とライセンス問題みたい
無茶苦茶やる奴が出てくるから野放しには出来ないのはその通りだと思うけど
役所式に規制すると生産性下がりまくりだよね
0975デフォルトの名無しさん2015/05/10(日) 00:24:49.63ID:R0t9wz1G
>>973
まあそうなんだが
じゃあオープンソースなものを引っ張ってくる必要がある人が、
そのオープンソースの内容について全責任を本当に持てるのかって話
そんなスキルあったらなんで完全オリジナルじゃないのって矛盾
0976デフォルトの名無しさん2015/05/10(日) 02:05:25.81ID:2lN5Lw4u
次スレは?
0977デフォルトの名無しさん2015/05/10(日) 02:10:31.46ID:hrvVbsgc
まだ慌てるようなレス数じゃない
0978デフォルトの名無しさん2015/05/10(日) 02:27:02.70ID:o8+bBTGK
>>969
使える奴から辞めていってる会社かな
0979デフォルトの名無しさん2015/05/10(日) 02:29:10.43ID:i9+uwJ0f
>>972
官公庁ではLAMPの全てが使えないということ?
0980デフォルトの名無しさん2015/05/10(日) 02:32:27.88ID:mYc/00t/
>>975
自作しても自己責任なのは同じだしだったらすでにあるものを使うべきだろ
0981デフォルトの名無しさん2015/05/10(日) 02:34:57.13ID:TKw0Rwrj
LibTidyがようやくHTML5対応に向けて動き出したね。
0982デフォルトの名無しさん2015/05/10(日) 02:42:55.36ID:n56J5Isv
次スレ
C++相談室 part117
http://peace.2ch.net/test/read.cgi/tech/1431187685/
0983デフォルトの名無しさん2015/05/10(日) 04:56:43.55ID:PscRQkQx
共有データセクションで共有できる最大サイズってどのくらいでしょう?
vc2012使ってます。

#pragma data_seg (".myseg")
 int i = 0;
 char a[32]n = "hello world";
#pragma data_seg()
0984デフォルトの名無しさん2015/05/10(日) 05:18:47.79ID:HIMFzhoN
あ
0985デフォルトの名無しさん2015/05/10(日) 08:55:07.43ID:ZQGgJB6p
>>974
責任問題はオープンソース使おうが自分で作ろうが自分で引き受けるしかないからあまり関係ない
まともな企業はライセンスの確認するのは今時当たり前
>>971 や >>978 はその辺りを知らなさすぎ
0986デフォルトの名無しさん2015/05/10(日) 09:36:17.06ID:iy6eJpK/
>>985
> まともな企業はライセンスの確認するのは今時当たり前

それを知っているからこそ>>971 や >>978 のような意見が出るわけでは?
0987デフォルトの名無しさん2015/05/10(日) 09:49:20.90ID:VRIygtUk
ライセンス確認するのは当たり前だから関係ない。
不具合が合ったときに確実に答えが得られる問い合わせ先が存在するかと
不具合の修正責任が担保されているかどうかが重要。
ソフトウェアの開発を請け負う契約がある以上、一部の機能を事前説明のない
第三者の著作物で達成しているために直せませんというのは許されない
0988デフォルトの名無しさん2015/05/10(日) 09:56:28.75ID:ZQGgJB6p
要するに、まともな会社を辞めるべきだって?
レスする前に深呼吸した方がいいぞ...
0989デフォルトの名無しさん2015/05/10(日) 10:02:57.61ID:ZQGgJB6p
>>988 は >>986 へのレスな

>>987
使用許諾書とかまともに読んだことないでしょ?
> 不具合の修正責任が担保されているかどうかが重要。
そんなものが担保されてるソフトなんてほとんどないぞ。
0990デフォルトの名無しさん2015/05/10(日) 10:04:40.78ID:iy6eJpK/
要するに、ライセンスの確認するのがめんどくさいことだって?
レスする前に深呼(ry
0991デフォルトの名無しさん2015/05/10(日) 10:17:01.28ID:iy6eJpK/
まともな会社はまともな対応をするし、なおかつ開発者が煩わされるなんてこと極小化されているもんだ。
0992デフォルトの名無しさん2015/05/10(日) 10:19:36.02ID:udhumyro
板違い
0993デフォルトの名無しさん2015/05/10(日) 10:28:56.85ID:VMNiwqSw
辛坊治郎はどっちかというと大阪都構想賛成派なんだよな
0994デフォルトの名無しさん2015/05/10(日) 10:30:01.00ID:fG4e1mij
うめ
0995デフォルトの名無しさん2015/05/10(日) 10:46:25.95ID:f+C1iwEo
梅
0996デフォルトの名無しさん2015/05/10(日) 11:16:45.23ID:gMFAbvGl
うめ
0997デフォルトの名無しさん2015/05/10(日) 11:17:56.25ID:udhumyro
ume
0998デフォルトの名無しさん2015/05/10(日) 11:25:25.62ID:cR2vItWu
>>985
激しい矛盾
0999デフォルトの名無しさん2015/05/10(日) 11:45:08.80ID:5Pe0CN82
楽しい休日してますか?
1000デフォルトの名無しさん2015/05/10(日) 11:59:31.53ID:M5B2Klw4
いいえ
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。