gpt4 book ai didi

c++ - 在 'if' 条件中定义 fstream

转载 作者:可可西里 更新时间:2023-11-01 15:38:51 27 4
gpt4 key购买 nike

answer 中有以下代码:

if (std::ifstream input("input_file.txt"))
;

这似乎很方便,将“输入”变量的范围限制在确认有效的地方,但是 VS2015 和 g++ 似乎都无法编译它。它是某些特定于编译器的东西还是需要一些额外的标志?

在 VS2015 中,IDE 突出显示“std::ifstream”和“input_file.txt”以及最后一个括号。 “std::ifstream”被标记为“错误:此处不允许使用函数类型”。

VS2015 C++ 编译器给出以下错误:

  • C4430 缺少类型说明符 - 假定为 int。注意:C++不支持default-int
  • C2059 语法错误:'('

最佳答案

您拥有的代码还不合法。在 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

从 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
}
}

关于c++ - 在 'if' 条件中定义 fstream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43215529/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com