そこで、次のように書くとcinのコピーが起こってしまうため(?)コンパイルエラーとなり、
// Error
int main(int argc, char * argv[]){
ifstream & is = argc==2 ? ifstream(argv[1], ios::in) : cin;
}
// OK
int doit(istream & in){
int x; in >> x;
cout << x << endl;
return x;
}
int main(int argc, char * argv[]){
if(argc==2){
ifstream ifs(argv[1], ios::in);
doit(ifs);
} else {
doit(cin);
}
}
また、できれば始めに挙げた方法で書きたいのですが、うまく行く方法はありますか?(良くない書き方だったりするのでしょうか)