Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;11自动变量_C++_C++11 - Fatal编程技术网

C++ C++;11自动变量

C++ C++;11自动变量,c++,c++11,C++,C++11,在这方面,赫伯·萨特主张: auto varname = Constructor{ ... }; 而不是 Constructor varname( ... ); 我试着做: auto log = fstream{"log.txt", fstream::out}; 但是从g++4.8-std=c++11收到一条关于已删除函数的错误消息(无论我使用的是方括号还是圆括号) 是我的错还是g++的错 fstream log{"log.txt", fstream

在这方面,赫伯·萨特主张:

auto varname = Constructor{ ... };
而不是

Constructor varname( ... );
我试着做:

auto log = fstream{"log.txt", fstream::out};
但是从
g++4.8-std=c++11
收到一条关于已删除函数的错误消息(无论我使用的是方括号还是圆括号)

是我的错还是g++的错

fstream log{"log.txt", fstream::out};
很好

MCVE:
#包括
使用名称空间std;
int main(int argc,字符**argv)
{
自动日志=fstream{“log.txt”,fstream::out};
//fstream日志{“log.txt”,fstream::out};

log如果我没有错的话,这个建议来自Herb Sutter

显然,问题是因为您无法复制构造函数
std::fstream
std::fstream
)的复制构造函数标记为
delete
)。但是,直观地说,因为您的右手边有一个临时构造函数,所以应该使用move构造函数而不是copy构造函数

事实上,以下代码在clang上编译得很好(
clang++-std=c++11
,OSX小牛):

#包括
#包括
int main(){
自动日志=std::fstream{“test.cpp”,std::fstream::out};
}

如果我没有错的话,这个建议来自赫伯·萨特

显然,问题是因为您无法复制构造函数
std::fstream
std::fstream
)的复制构造函数标记为
delete
)。但是,直观地说,因为您的右手边有一个临时构造函数,所以应该使用move构造函数而不是copy构造函数

事实上,以下代码在clang上编译得很好(
clang++-std=c++11
,OSX小牛):

#包括
#包括
int main(){
自动日志=std::fstream{“test.cpp”,std::fstream::out};
}

auto-var=Type{…};
语法要求
Type
是可移动构造的,但gcc直到.Your代码才实现可移动的fstream。

auto-var=Type{…};语法要求
类型
可移动构造,但gcc直到。您的代码才实现可移动的fstreams。

请发布错误消息。请提供一个和完整的错误消息。您可能参考了Herb Sutter的建议。但是,fstream的复制构造函数是
删除
,因此这可能是问题所在如果你打算使用C++版本的标签,比如C++ 11,你也应该在这个例子中包含主标签C++。顺便说一下,这些代码中的常量,比如<代码> OUT>代码>实际上是在<代码> iOS 中声明的,所以你可以引用它们作为代码> iOS:OUT/<代码>,而不是<代码> FStuts::Out< <代码>……虽然它可能并不重要。请发布错误信息。请提供一个完整的错误消息。也许您指的是Habor萨特的建议。但是,FScript的复制构造函数是“代码>删除< /代码>,因此可能是问题。注意,如果您要使用C++版本的特定标签,如C++ 11,那么在这种情况下,还应该包括主标记C++。诸如
out
之类的常量实际上是在
ios
中声明的,因此您可以将它们引用为
ios::out
,而不是
fstream::out
。尽管这可能并不重要。关于您的第一句话:是的,的确如此,他创造了术语“AAA”(几乎总是自动的)但是,据我所知,这种风格还没有被广泛采用。就我个人而言,我不确定它的优点和缺点。关于你的第一句话:是的,的确如此,他创造了“AAA”这个词(几乎总是自动的)但是,据我所知,这种风格还没有被广泛采用。就我个人而言,我不确定它的优点和缺点。
#include <fstream>

using namespace std;
int main(int argc, char **argv)
{
    auto log = fstream{"log.txt", fstream::out};
    //fstream log{"log.txt", fstream::out};
    log << "hello world" << endl;
}
g++ -std=c++11    1.cc   -o 1
1.cc: In function ‘int main(int, char**)’:
1.cc:6:47: error: use of deleted function ‘std::basic_fstream<char>::basic_fstream(const std::basic_fstream<char>&)’
     auto log = fstream{"log.txt", fstream::out};
                                               ^
In file included from 1.cc:1:0:
/usr/include/c++/4.8/fstream:776:11: note: ‘std::basic_fstream<char>::basic_fstream(const std::basic_fstream<char>&)’ is implicitly deleted because the default definition would be ill-formed:
     class basic_fstream : public basic_iostream<_CharT, _Traits>
           ^
/usr/include/c++/4.8/fstream:776:11: error: use of deleted function ‘std::basic_iostream<char>::basic_iostream(const std::basic_iostream<char>&)’
In file included from /usr/include/c++/4.8/fstream:38:0,
                 from 1.cc:1:
/usr/include/c++/4.8/istream:795:11: note: ‘std::basic_iostream<char>::basic_iostream(const std::basic_iostream<char>&)’ is implicitly deleted because the default definition would be ill-formed:
     class basic_iostream
           ^
/usr/include/c++/4.8/istream:795:11: error: use of deleted function ‘std::basic_istream<char>::basic_istream(const std::basic_istream<char>&)’
/usr/include/c++/4.8/istream:58:11: note: ‘std::basic_istream<char>::basic_istream(const std::basic_istream<char>&)’ is implicitly deleted because the default definition would be ill-formed:
     class basic_istream : virtual public basic_ios<_CharT, _Traits>
           ^
/usr/include/c++/4.8/istream:58:11: error: use of deleted function ‘std::basic_ios<char>::basic_ios(const std::basic_ios<char>&)’
In file included from /usr/include/c++/4.8/ios:44:0,
                 from /usr/include/c++/4.8/istream:38,
                 from /usr/include/c++/4.8/fstream:38,
                 from 1.cc:1:
/usr/include/c++/4.8/bits/basic_ios.h:66:11: note: ‘std::basic_ios<char>::basic_ios(const std::basic_ios<char>&)’ is implicitly deleted because the default definition would be ill-formed:
     class basic_ios : public ios_base
           ^
In file included from /usr/include/c++/4.8/ios:42:0,
                 from /usr/include/c++/4.8/istream:38,
                 from /usr/include/c++/4.8/fstream:38,
                 from 1.cc:1:
/usr/include/c++/4.8/bits/ios_base.h:786:5: error: ‘std::ios_base::ios_base(const std::ios_base&)’ is private
     ios_base(const ios_base&);
     ^
In file included from /usr/include/c++/4.8/ios:44:0,
                 from /usr/include/c++/4.8/istream:38,
                 from /usr/include/c++/4.8/fstream:38,
                 from 1.cc:1:
/usr/include/c++/4.8/bits/basic_ios.h:66:11: error: within this context
     class basic_ios : public ios_base
           ^
In file included from /usr/include/c++/4.8/fstream:38:0,
                 from 1.cc:1:
/usr/include/c++/4.8/istream:795:11: error: use of deleted function ‘std::basic_ostream<char>::basic_ostream(const std::basic_ostream<char>&)’
     class basic_iostream
           ^
In file included from /usr/include/c++/4.8/istream:39:0,
                 from /usr/include/c++/4.8/fstream:38,
                 from 1.cc:1:
/usr/include/c++/4.8/ostream:58:11: note: ‘std::basic_ostream<char>::basic_ostream(const std::basic_ostream<char>&)’ is implicitly deleted because the default definition would be ill-formed:
     class basic_ostream : virtual public basic_ios<_CharT, _Traits>
           ^
/usr/include/c++/4.8/ostream:58:11: error: use of deleted function ‘std::basic_ios<char>::basic_ios(const std::basic_ios<char>&)’
In file included from /usr/include/c++/4.8/fstream:38:0,
                 from 1.cc:1:
/usr/include/c++/4.8/istream:795:11: error: use of deleted function ‘std::basic_ios<char>::basic_ios(const std::basic_ios<char>&)’
     class basic_iostream
           ^
In file included from 1.cc:1:0:
/usr/include/c++/4.8/fstream:776:11: error: use of deleted function ‘std::basic_ios<char>::basic_ios(const std::basic_ios<char>&)’
     class basic_fstream : public basic_iostream<_CharT, _Traits>
           ^
/usr/include/c++/4.8/fstream:776:11: error: use of deleted function ‘std::basic_filebuf<char>::basic_filebuf(const std::basic_filebuf<char>&)’
/usr/include/c++/4.8/fstream:72:11: note: ‘std::basic_filebuf<char>::basic_filebuf(const std::basic_filebuf<char>&)’ is implicitly deleted because the default definition would be ill-formed:
     class basic_filebuf : public basic_streambuf<_CharT, _Traits>
           ^
In file included from /usr/include/c++/4.8/ios:43:0,
                 from /usr/include/c++/4.8/istream:38,
                 from /usr/include/c++/4.8/fstream:38,
                 from 1.cc:1:
/usr/include/c++/4.8/streambuf:802:7: error: ‘std::basic_streambuf<_CharT, _Traits>::basic_streambuf(const std::basic_streambuf<_CharT, _Traits>&) [with _CharT = char; _Traits = std::char_traits<char>]’ is private
       basic_streambuf(const basic_streambuf& __sb)
       ^
In file included from 1.cc:1:0:
/usr/include/c++/4.8/fstream:72:11: error: within this context
     class basic_filebuf : public basic_streambuf<_CharT, _Traits>
           ^
make: *** [1] Error 1
#include <iostream>
#include <fstream>

int main() {

auto log = std::fstream{"test.cpp", std::fstream::out};

}