在answer中有以下代码:
if (std::ifstream input("input_file.txt"))
;
这似乎很方便,将'input'变量的范围限制在确认有效的位置,但VS2015和g ++似乎都没有编译它。它是某些编译器特定的东西还是需要一些额外的标志?
在VS2015中,IDE突出显示“std :: ifstream”和“input_file.txt”以及最后一个括号。 “std :: ifstream”标记为“错误:此处不允许使用函数类型”。
VS2015 C ++编译器出现以下错误:
答案 0 :(得分:14)
您拥有的代码尚不合法..在C ++ 11之前,if语句可能是
if(condition)
if(type name = initializer)
和name
将被评估为bool
以确定条件。在C ++ 11/14中,规则允许使用
if(condition)
if(type name = initializer)
if(type name{initializer})
在name
被初始化以确定条件后,bool
再次被评估为if (std::ifstream input("input_file.txt"); input.is_open())
{
// do stuff with input
}
else
{
// do other stuff with input
}
。
从C ++ 17开始,虽然您可以将if语句中的变量声明为复合语句,如for循环,它允许您使用括号初始化变量。
{
std::ifstream input("input_file.txt")
if (input.is_open())
{
// do stuff with input
}
else
{
// do other stuff with input
}
}
应该注意的是,这只是语法糖,上面的代码实际上已翻译成
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"itms-apps://itunes.apple.com/gb/app/id1136613532?action=write-review&mt=8"]];
答案 1 :(得分:8)
根据http://en.cppreference.com/w/cpp/language/if代码不合法(此网站非常有信誉,但如果需要,我可以寻找标准参考)。您可以在if条件中声明变量,但必须由func scrollViewDidScroll(_ scrollView: UIScrollView) {
let offset = scrollView.contentOffset.y
if(offset > 50){
self.myView.frame = CGRect(x: 0, y: offset - 50, width: self.view.bounds.size.width, height: 100)
}else{
self.myView.frame = CGRect(x: 0, y: 0, width: self.view.bounds.size.width, height: 100)
}
}
或=
初始化。所以假设你至少拥有C ++ 11,你可以这样做:
{}