在 'if' 条件中定义 fstream
Defining fstream inside a 'if' conditional
在 中有以下代码:
if (std::ifstream input("input_file.txt"))
;
这似乎很方便,将 'input' 变量的范围限制在确认有效的地方,但是 VS2015 和 g++ 似乎都无法编译它。它是特定于编译器的东西还是需要一些额外的标志?
在 VS2015 中,IDE 突出显示 "std::ifstream" 和 "input_file.txt" 以及最后一个括号。 "std::ifstream" 标记为 "Error: a function type is not allowed here"。
VS2015 C++ 编译器给出以下错误:
- C4430 缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int
- C2059 语法错误:'('
您的代码还不合法..。在 C++11 之前,if 语句可以是
if(condition)
if(type name = initializer)
和 name
将被评估为 bool
以确定条件。在 C++11/14 中,规则扩展为 allow
if(condition)
if(type name = initializer)
if(type name{initializer})
其中,name
在初始化以确定条件后被计算为 bool
。
从 C++17 开始,您将能够在 if 语句中将变量声明为复合语句,例如 for 循环,它允许您使用括号初始化变量。
if (std::ifstream input("input_file.txt"); input.is_open())
{
// do stuff with input
}
else
{
// do other stuff with input
}
需要注意的是,这只是语法糖,上面的代码实际上被翻译成了
{
std::ifstream input("input_file.txt")
if (input.is_open())
{
// do stuff with input
}
else
{
// do other stuff with input
}
}
根据 http://en.cppreference.com/w/cpp/language/if,该代码是不合法的(该站点信誉良好,但如果需要,我可以寻找标准参考)。您可以 在 if 条件中声明变量,但它们必须由 =
或 {}
初始化。所以假设你至少有 C++11 你可以这样做:
if (std::ifstream input{"input_file.txt"})
;
在
if (std::ifstream input("input_file.txt"))
;
这似乎很方便,将 'input' 变量的范围限制在确认有效的地方,但是 VS2015 和 g++ 似乎都无法编译它。它是特定于编译器的东西还是需要一些额外的标志?
在 VS2015 中,IDE 突出显示 "std::ifstream" 和 "input_file.txt" 以及最后一个括号。 "std::ifstream" 标记为 "Error: a function type is not allowed here"。
VS2015 C++ 编译器给出以下错误:
- C4430 缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int
- C2059 语法错误:'('
您的代码还不合法..。在 C++11 之前,if 语句可以是
if(condition)
if(type name = initializer)
和 name
将被评估为 bool
以确定条件。在 C++11/14 中,规则扩展为 allow
if(condition)
if(type name = initializer)
if(type name{initializer})
其中,name
在初始化以确定条件后被计算为 bool
。
从 C++17 开始,您将能够在 if 语句中将变量声明为复合语句,例如 for 循环,它允许您使用括号初始化变量。
if (std::ifstream input("input_file.txt"); input.is_open())
{
// do stuff with input
}
else
{
// do other stuff with input
}
需要注意的是,这只是语法糖,上面的代码实际上被翻译成了
{
std::ifstream input("input_file.txt")
if (input.is_open())
{
// do stuff with input
}
else
{
// do other stuff with input
}
}
根据 http://en.cppreference.com/w/cpp/language/if,该代码是不合法的(该站点信誉良好,但如果需要,我可以寻找标准参考)。您可以 在 if 条件中声明变量,但它们必须由 =
或 {}
初始化。所以假设你至少有 C++11 你可以这样做:
if (std::ifstream input{"input_file.txt"})
;