>>237 ついでに教えてくれ
C(++)では関数内のリテラルはスタックを指すけどGCのあるDでは例に上げてくれた書き方が許される?
>>238 逆
const CからCに出来んよ、って怒られるんだっちゃ
>>238 C[10] c;
void foo(C[] a){
c[3..6]=a[0];
}
>>239 文字列リテラルはinvariant(char)[N]型の配列だからどこかから参照してる限りは生きてる。
_
245 :
デフォルトの名無しさん:2008/01/23(水) 17:56:50
>>243 コピーして渡せばいいじゃん。
しかし、オブジェクトでない限りサイズ取得方法が・・・sizeofで取れるんだっけ。
Dの配列は長さと先頭ポインタの組だから常にlengthプロパティで長さを取得できるよ
>>244 _か、そうか、d
>>245 まあそうなんだが静的解決させたい
どーでもいいが
const C c[10];
とかって宣言したらcは触れんよね?
コンパイラにはconstに初期値がないエラーを吐いて欲しいゾ
んでもう一点
class C{}
C[] c=new C[10];
とした場合
個々のインスタンスは
for(int i;i<c.length;++i)
c[i]=new C;
で割り当てるしかない?
それともなんか工夫して書ける?
>>248 C[] c = new C[10];
foreach(ref e; c) e = new C;
250 :
デフォルトの名無しさん:2008/01/24(木) 14:51:30
なんか new C[10] で
個々のインスタンスは生成されないのって
違和感あるんだよなあ・・・
そんなことない?
勝手に生成される C++ は
デフォルトコンストラクタしか呼べないから不便。
まあ boost::ptr_vector とかつかやええんやけども。
ポインタ用の領域を確保しただけなのに、勝手に実体まで作られてるほうが気持ち悪いと思う。
オブジェクトのインスタンスと配列が区別ついてないだけじゃねーか
>>255 C++ではclassとstructの違いがないから、
new C[10]はCの大きさの10倍の領域を確保して、
10回デフォルトコンストラクタが呼ばれるの。
一方、Dではclassは常に参照型だから、
new C[10]はポインタ10個分の領域しか確保しないの。
ok?
257 :
251:2008/01/30(水) 02:25:37
>>252 なるほど確かに不便だ
言われてみればそれで困ったことあった気がする
if文の条件式で宣言した変数ってelse節から参照できないの?
できないよ
ifブロックで使う必要ないんだったら条件式を逆転すれば?
ifとelse両方で使いたいならその書き方するもんじゃないし
> ifとelse両方で使いたいならその書き方するもんじゃないし
ifがelse節含め全域を覆っていると考えるか、
if節、else節、って感じで分かれてると考えるか、の違いだろな。
Dは後者だから、全域を覆いたいならそういうブロック文を書かないといけない、
ってところか。
C++ だと else から見れるから
単なる設計思想の違いじゃないかな。
特に検討したことがなかっただけ、なんてオチだったらおもろいが。
C++ではスコープというか生存期間がelse終了まで含まれるので
class synchronizer {
LockObject& lock;
explicit synchronizer(LockObject& lock) : lock(lock) {
lock.lock();
}
~synchronizer() {
lock.unlock();
}
operator bool() const {
return false;
}
};
#define Synchronized(x) if (synchronizer ___locker = synchronizer(x)) ; else
なんてのが出来たりした。(これが有用かはともかく)
265 :
デフォルトの名無しさん:2008/05/03(土) 22:42:49
てす
266 :
デフォルトの名無しさん:2008/07/10(木) 13:15:34
D1.0.3を使っています。
ある文字列に整数以外が入っているかどうかチェックしたいのですが
標準ライブラリで何かできますか?
toIntを使うと整数以外が入っている場合には例外を投げてくれるのですが
動作が止まってしまうので何か解決策が無いかと考えています。
何か良い方法があればよろしくお願いします。
書きそびれましたが、現在はstd.regexpのfindを使って正規表現で振り分けをしています。
string reg = "12345";
std.regexp.find(reg, "[^(0-9)]"); // false
reg = "1235b3323s";
std.regexp.find(ptn, "[^(0-9)]") // true
というようにやっています。
済みません、解決しました
std.stringにisNumericという関数が存在しました。
簡単な動作をするCUIのプログラムを作りました。
これを Linux と Windows の両方で動かしたいのですが、
main.exe: main.d header.d
dmd main.d header.d
とすると Windows では動くものの Linux では更新チェックが働いてくれません。
逆に
main: main.d header.d
dmd main.d header.d
とすると今度は Windows で更新チェックがなされません。
Makefileをどのように工夫すれば両方で正常にコンパイルが終了するのでしょうか。
Windows では Digital Mars Make Version 5.05 を
Linux では GNU Make 3.81 を使っています。
D言語で作っていたプログラムが
WinXPなら動くのにVistaでは動かないのですが
の仕様とかが変わっているのでしょうか?
Win32APIの使い方間違えてるだけだろ。どうせ
ようやくコンパイルまでたどり着いたけどファイルが複数あるときはどうすればいいんだろ、うまくいかない
----------------------------------
// hello.d
import std.stdio;
import hello2;
int main(char[][] args){
int z = hello2();
writef(z);
return 0;
}
-^--------------------------------
// hello2.d
int hello2(){ return 0;}
----------------------------------
>C:\Dev\DSciTE\bud.exe -DCPATHC:\Dev\DSciTE\dmd\bin -IC:\Dev\DSciTE\lib -I.. -I..\.. -full -debug -g -unittest -w hello.d
hello.d(5): Error: function expected before (), not module hello2 of type void
>Exit code: 1
hello2の名前がかぶってるのが原因じゃね?
なんだいマルチかよ糞っ垂れ
書き込んでから過疎スレだと気づいたんだよ、初心者スレなのかどうかもよくわからないし。
なら答えつく前に移動したと書けよ
ある時の俺は過疎スレなのに気づいたけどマルチや移動が見苦しいから忘却することにした
これが匿名掲示板クオリティ
281 :
デフォルトの名無しさん:2008/12/09(火) 00:44:08
dsssでproxyの設定ってできますか?
そうかなあ
283 :
デフォルトの名無しさん:2009/09/02(水) 01:53:53
なるほど
284 :
デフォルトの名無しさん:2010/01/07(木) 17:03:32
これは駄目かも判らんね
285 :
デフォルトの名無しさん:2010/01/16(土) 13:14:38
駄目かも判らんですね
286 :
デフォルトの名無しさん:2010/02/15(月) 06:50:23
mada
owarannyo
まるちやめれ
288 :
デフォルトの名無しさん:
でどうなった