草庐IT

auto-close

全部标签

c++ - VS8 无法处理 file.close(); file.open();,为什么?

我有一个可能微不足道的问题,但我无法理解。我写了简单的代码:fstreamfile;file.open("data",ios::in);if(!file.good()){file.close();file.open("data",ios::out);if(!file.good())cout在新的VS8C++Express项目中。当我运行它并且“数据”不存在时,它会创建文件,但也会返回“不好”(第二个),因此输出不会写入文件。现在有趣的事情来了。如果我在VS10C++Express和Code::Blocks12中编译相同的代码,它工作正常。为什么会这样?@编辑我的friend也在他的PC

c++ - auto using parens 可以表示函数原型(prototype)吗?

这个问题是由于无法对auto使用统一初始化语法而产生的。关键字,因为它将其视为std::initializer_list(评论中的解释here)。以下面的代码为例:classX{};intx(X());//functionprototype(1)autox(X());//copy/moveconstructionofanX,functionprototypeorcompile-timeerror?编译器对autox做了什么?每种可能性的推理:复制/移动构造:我认为这是正确的行为,因为(1)被视为一种缺陷。函数原型(prototype):似乎不太可能,因为没有尾随返回类型。编译时错误:如

具有成员初始化器语法和已删除复制构造函数的 C++ auto

classA{inta;public:A(constA&)=delete;A&operator=(constA&)=delete;A():a{0}{}};intmain(){autoa=A{};}上面的代码没有编译,我得到以下错误:C2280'A::A(constA&)':attemptedtoreferenceadeletedfunction我正在使用visualstudio2015编译器。我的理解是成员初始化语法编译器应该直接使用默认构造函数,这是在没有自动时发生的情况,并且在main中我使用Aa{}。所以我想知道在这种情况下与auto有什么关系。 最佳

c++ - 右值引用和 auto&& 局部变量

将局部变量定义为右值引用或转发(通用)引用有什么意义?据我所知,任何有名称的变量都是左值,并且将被视为左值。例子:Widget&&w1=getWidget();auto&&w2=getWidget();w1和w2都是左值,如果稍后将它们作为参数传递,将被视为左值。他们的decltype可能不是,但这有什么区别呢?为什么有人需要以这种方式定义变量? 最佳答案 如果您有一个函数返回一个无法移动的临时对象。Foosome_function();auto&&f=some_function();这是合法的。autof=some_functio

c++ - 为什么 std::extent 应用于 auto& 会产生零?

我正在试验constexprauto和字符串文字以获得我可以与std::begin一起使用的字符数组以一般方式,当我遇到无法解释的事情时:表达式std::extent::value,其中foo使用自动引用声明,产生零。#include#includenamespace{auto&ARRAY_REFERENCE="foo";templatestd::size_tnumberOfElementsIn(T(&)[N]){returnN;}}intmain(){std::cerr::value上面的代码给出了输出std::extentappliedtoARRAY_REFERENCE:0Numb

c++ - 为什么我不能在 Exception 类中有 auto_ptr

我在异常类中遇到了auto_ptr的问题,我最终将其简化为:#includeclassMyException{std::auto_ptrm_foo2;};intmain(){try{throwMyException();}catch(constMyException&){}return0;}编译失败:/perforce/unstable/test/Common/Exceptions/TestException4.cpp:Infunction'intmain()':/perforce/unstable/test/Common/Exceptions/TestException4.cpp:1

c++ - lambda 函数的类型,使用 auto

我正在尝试编写一个C++lambda函数,但不喜欢必须使用auto作为类型。目前它看起来像:#includeintmain(){//Sendstheaddressofanintegertoafunctionwhichprintsoutthecontents;autoprint_int=[](int*a){std::cout但是,我想更改auto类似于std::function但我不确定如何。的答案Whatisthetypeofalambdafunction?似乎相关,但我不确定如何调整它。谢谢。 最佳答案 Lambda应该与auto

c++ - 如何在 valgrind 中跟踪/捕获 "Warning: invalid file descriptor -1 in syscall close"

valgrind显示以下内容:==13880==Warning:invalidfiledescriptor-1insyscallclose()是否有一种简单的方法来调查此错误?我的意思是-例如显示堆栈跟踪?这是一个巨大的项目,我无法手动检查每个关闭。另外,我想这对于每个系统调用错误的文件描述符都是一样的。我运行它是这样的:valgrind--trace-children=yes--track-fds=yes--log-fd=2--error-limit=no\--leak-check=full--show-possibly-lost=yes--track-origins=yes\--s

c++ - BOOST_CHECK_CLOSE 即使两个值低于阈值也会失败

我正在使用boost执行单元测试。当我使用BOOST_CHECK_CLOSE时,我收到此失败消息:difference{inf%}{-6.9388939e-18}and(0.0){0}exceeds1.0000000000000001e-05%这对我来说听起来很奇怪,因为-6.9388939e-18和0.0之间的差异低于1.0000000000000001e-05%。此外,我不明白为什么它说差异是无限的。知道这种行为背后的原因吗? 最佳答案 BOOST_CHECK_CLOSE使用Knuth的公差谓词来比较float,即abs(x-y

c++ - 我可以通过引用函数来传递 auto_ptr 吗?

下面的函数OK吗:voidDoSomething(auto_ptr&a).... 最佳答案 你可以做到,但我不确定你为什么要这样做。如果您使用auto_ptr来指示ptr的所有权(正如人们通常所做的那样),那么如果您想将ptr的所有权转移给函数,则只需将auto_ptr传递给函数,在这种情况下您将按值传递auto_ptr:voidDoSomething(auto_ptra)因此任何调用DoSomething的代码都会放弃ptr的所有权:auto_ptrp(newint(7));DoSomething(p);//pisnowempty