我在VS-SP1中有下面的类,三元运算符和if-else似乎对getname方法下面的代码有不同的工作方式
template class StringBuf{
public:
StringBuf(const char* src){
strcpy(s,src);
}
// Copy from another StringBuf
StringBuf(const StringBuf& src){
strcpy(s,src.get());
}
// String access
operator const char*() const {return get();}
const char* get() const { return s ; }
private:
char s[size];
};
class MyPony{
StringBuf<10> name;
public:
MyPony(char* name_) : name(name_){}
const char* getname(bool bVal){
//if( bVal )
// return name;
//else
// return "Jimmy";
return (bVal==true) ? name : "Jimmy";
}
};
int main(){
MyPony pony("Pani");
const char* getname = pony.getname(true);
return 0;
}
如果我使用三元运算符getname()方法通过调用复制构造函数生成名称的副本,然后在临时副本上调用运算符const char * .
如果我将三元运算符更改为if-else,则代码只调用运算符const char *而不进行临时副本 .
我的理解是,如果else和三元运算符应该表现相同,但为什么这个类的行为不同?有什么东西我可以忽略吗?
对于三元运算符VS似乎直接调用运算符const char * .