2008年1月26日土曜日
2008年1月20日日曜日
コピーコンストラクタ
class Value {
private:
int value;
public:
Value(int value = 0) {
this->value = value;
}
Value(Value& value) {
this->value = value.value;
}
};
int main(int argc, char** argv) {
Value a = Value(1);
return 0;
}
このコードをコンパイルすると
$ g++ -Wall test.cpp
test.cpp: In function 'int main(int, char**)':
test.cpp:44: error: no matching function for call to 'Value::Value(Value)'
test.cpp:11: note: candidates are: Value::Value(Value&)
test.cpp:7: note: Value::Value(int)
って怒られる。
使ってるgccは以下。
$ g++ -Wall test.cpp
$ g++ -v
Using built-in specs.
Target: i686-apple-darwin8
Configured with: /private/var/tmp/gcc/gcc-5250.obj~20/src/configure --disable-checking -enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.0/ --with-gxx-include-dir=/include/c++/4.0.0 --build=powerpc-apple-darwin8 --with-arch=pentium-m --with-tune=prescott --program-prefix= --host=i686-apple-darwin8 --target=i686-apple-darwin8
Thread model: posix
gcc version 4.0.1 (Apple Computer, Inc. build 5250)
どうも、テンポラリオブジェクトがconstで作成されてるみたい。
Value(const Value& value) {
this->value = value.value;
}
みたく、コピーコンストラクタの引数をonst referenceにすればOK、というか、そうすべきみたい。
代入演算子
をオーバーロードした場合、戻り値は参照にすべき。
そうしないと、以下のコードの(1),(2)のような式が成り立たなくなってしまう。
そうしないと、以下のコードの(1),(2)のような式が成り立たなくなってしまう。
class Value {
private:
int value;
public:
Value(int value = 0) {
this->value = value;
}
int get() {
return value;
}
Value& operator=(Value& value) {
this->value = value.value;
return *this;
}
Value& operator+=(int value) {
this->value += value;
return *this;
}
};
int main(int argc, char** argv) {
Value a = 1;
Value b = 2;
Value c = 3;
Value d = 4;
c = b = a; // (1)
printf("c=%d,b=%d,a=%d\n", c.get(), b.get(), a.get());
(a = d) += 1; // (2)
printf("a=%d,d=%d\n", a.get(), d.get());
return 0;
}
2008年1月15日火曜日
画面遷移しないファイルアップロード
2008年1月11日金曜日
window.onload Problem
The window.onload Problem - Solved!
によれば、
ってことで、ブラウザ毎の回避策が書いてある。
によれば、
The problem is that the onload event fires after all page content has loaded (including images and other binary content). If your page includes lots of images then you may see a noticeable lag before the page becomes active. What we want is a way to determine when the DOM has fully loaded without waiting for all those pesky images to load also.
ってことで、ブラウザ毎の回避策が書いてある。
conditional compilation
http://msdn2.microsoft.com/en-us/library/121hztk3(vs.71).aspx
こんな事ができるのね、、、
こんな事ができるのね、、、
if (1 /*@cc_on -1 @*/) alert("not ie");
登録:
投稿 (Atom)