d****n 发帖数: 1637 | 1 Constructor pitfalls
Example:
int main()
{ string a("Hello");
string b();
string c = string("World");
// ...
return 0;
}
Pitfall:
string b();
This expression does not construct an object b of type string. Instead, it
is the prototype for a function b with no arguments and return type string.
Moral: Remember to omit the ( ) when invoking the default constructor.
The C feature of declaring a function in a local scope is worthless since it
lies about the true scope. Most programmers place all prototypes in header
files. But even a worthless feature that you never use can haunt you.
readmore at : http://www.horstmann.com/cpp/pitfalls.html |
a**e 发帖数: 64 | 2 这种错误确实很难注意到。不过正常情况下编译的时候一般都会发现的吧。正面想这个
就是个feature,不用include那么的多的header,避免交叉include。 |
a**e 发帖数: 64 | 3 看了一边全文。里面提到的很多pitfalls还是很有道理的,不多留意的话很容易就埋下
bug。 |
d**********x 发帖数: 4083 | 4 read
Imperfect C++
【在 a**e 的大作中提到】 : 看了一边全文。里面提到的很多pitfalls还是很有道理的,不多留意的话很容易就埋下 : bug。
|
M********n 发帖数: 4650 | 5 这应该是C留下来的问题,C++为了兼容,没办法。严格C++的函数原形应该写成
string b(void);
【在 d****n 的大作中提到】 : Constructor pitfalls : Example: : int main() : { string a("Hello"); : string b(); : string c = string("World"); : // ... : return 0; : } : Pitfall:
|
t****t 发帖数: 6806 | 6 事实上, C++不建议无参数函数里写void.
【在 M********n 的大作中提到】 : 这应该是C留下来的问题,C++为了兼容,没办法。严格C++的函数原形应该写成 : string b(void);
|