C ++ istream条件直接初始化w /三元运算符

时间:2017-11-17 09:35:46

标签: c++11 g++ ifstream ternary-operator

鉴于此问题 - 例证最小代码:

#include <fstream>
#include <string>

using std::ifstream;
using std::string;

string TEST_PATH;
string TRAIN_PATH;

enum DataContext
{
    TRAINING, TESTING
};

void StreamData(DataContext context)
{
    ifstream dataFile = (context == TRAINING) ? ifstream(TRAIN_PATH) : ifstream(TEST_PATH);

    dataFile.close();
}

void StreamData2(DataContext context)
{
    ifstream datafile;
    datafile.open((context == TRAINING) ? TRAIN_PATH: TEST_PATH);

    datafile.close();
}


int main()
{
    StreamData(TRAINING);
    StreamData2(TRAINING);

    return 0;
}

我正在实施AI Iterative Dichotomizer,但这与此问题无关。相关的是两个外部测试文件,一个带有训练数据,另一个带有测试数据。某些控制流程受当时正在处理的数据类型的控制,简单的枚举用于简化这种关联。

StreamData旨在根据当前上下文的检查有条件地指导初始化ifstream。它与三元运算符一起使用。在Visual Studio(这意味着什么),但也在cygwin g ++ v5.1.0中,使用StreamData函数编写成功编译,并按照我的期望执行。(在我的真实程序中,实际上返回了一些内容)。但是,在Debian,g ++ v4.9.2中,使用该函数会产生一个编译器的文章。我不会复制整个输出,除非有必要,但亮点包括警告g ++正在删除默认 ifstream构造,因为它会形成错误。然后强烈批评试图调用已删除的函数。

&#34; g ++ -o TT -std = c ++ 11 ./ThisCode.cpp"是在两种环境中执行的g ++命令。

StreamData2是StreamData的自然替代品,它在任何地方编译都很好。

我的问题通过StreamData2解决了。我留下了一个问题。 StreamData是否有效C ++ 11 /使用三元运算符?编译失败,g ++版本较少,是错误/错误实现吗?

感谢您的任何见解。

0 个答案:

没有答案