草庐IT

c++ - 保证省略和链式函数调用

假设我有以下类型:structX{X&operator+=(Xconst&);friendXoperator+(Xlhs,Xconst&rhs){lhs+=rhs;returnlhs;}};我有声明(假设所有命名的变量都是X类型的左值):Xsum=a+b+c+d;在C++17中,我对这个表达式将执行多少个拷贝和移动有什么保证?非保证省略呢? 最佳答案 这将执行1次复制构造和3次移动构造。复制a以绑定(bind)到lhs。将构造lhs移出第一个+。第一个+的返回值会通过省略号绑定(bind)到第二个+的按值lhs参数。第二个lhs的返

c++ - 具有原始类型的单个数组成员的标准布局结构的保证内存布局

考虑以下简单结构:structA{floatdata[16];};我的问题是:假设float是32位IEEE754float的平台(如果这很重要的话),C++标准是否保证structA的预期内存布局?如果不是,它保证什么和/或执行保证的方法是什么?预期内存布局是指结构占用内存中的16*4=64字节,每个连续的4字节占用通过data数组中的单个float。换句话说,预期内存布局意味着以下测试通过:static_assert(sizeof(A)==16*sizeof(float));static_assert(offsetof(A,data[0])==0*sizeof(float));st

C++ 运算符 % 保证

是否保证(-x)%m,其中x和m在c++中为正standard(c++0x)为负数,等于-(x%m)?我知道它在我知道的所有机器上都是正确的。 最佳答案 除了Luchian的回答,这是来自C++11标准的对应部分:Thebinary/operatoryieldsthequotient,andthebinary%operatoryieldstheremainderfromthedivisionofthefirstexpressionbythesecond.Ifthesecondoperandof/or%iszerothebehavio

c++ - C++11 标准是否保证跨实现的相同种子具有相同的随机数?

例如,如果我在GCC和MSVC下用完全相同的种子和参数实例化一个std::mt19937,我应该得到相同的随机数序列吗?如果是这样,我假设这个属性通常适用于mersenne_twister_engine,因为mt19937只是具有特定参数的一个。这不适用于C中的rand()。看起来标准记录了根据特定代码应用的转换,所以我怀疑它应该总是相同的,但魔鬼在细节中... 最佳答案 对于新的随机数引擎,是的,对于相同的种子和参数,您将在所有平台上获得相同的值序列。对于rand(),没有。你也没有随机数分布的保证,即使它们被输入相同的输入值序列

c++ - 程序终止时保证文件删除 (C/C++)

Win32的CreateFile有FILE_FLAG_DELETE_ON_CLOSE,但我在Linux上。我想打开一个临时文件,该文件将在程序终止时被删除。我可以理解,在程序崩溃的情况下,保证这一点可能不切实际,但在任何其他情况下,我希望它能够工作。我知道RAII。我知道信号。我知道atexit(3)。我知道我可以打开该文件并立即将其删除,并且该文件将保持可访问状态,直到文件描述符关闭(甚至可以处理崩溃)。这些似乎都不是一个完整而直接的解决方案:RAII:去过那里,做到了:我有一个对象,其析构函数会删除文件,但如果程序被信号终止,则不会调用析构函数。信号:我正在编写一个低级库,它使注册

c++ - 当对象在堆栈上声明时,你能保证析构函数的顺序吗?

我有根据范围控制互斥锁/解锁的代码:voidPerformLogin(){ScopeLockLoginLock(&m_LoginLock);doLoginCommand();ScopeLockMemoryLock(&m_SharedMemory);doStoreLogin();...}我能保证MemoryLock会在LoginLock之前被销毁吗? 最佳答案 是的,是的。在任何特定范围内,本地对象都会按照它们被构造的相反顺序被销毁。 关于c++-当对象在堆栈上声明时,你能保证析构函数的顺

c++ - 在保证复制省略的情况下,为什么需要完全定义类?

thispost的后续。考虑以下几点:classC;Cfoo();这是一对有效的声明。C在仅仅声明一个函数时不需要完全定义。但是如果我们要添加以下函数:classC;Cfoo();inlineCbar(){returnfoo();}然后突然C需要是一个完全定义的类型。但是通过保证复制省略,不需要它的任何成员。没有复制甚至移动,该值在其他地方初始化,并且仅在调用者的上下文中销毁(到bar)。那为什么?标准中有什么禁止的? 最佳答案 出于兼容性和/或效率的原因,保证复制省略有异常(exception)。即使在其他情况下可以保证复制省略的

c++ - C++ 标准是否保证 std::uintmax_t 可以保存 std::size_t 的所有值?

C++标准是否保证(通过明确声明或通过逻辑推导隐含)std::uintmax_t可以保存std::size_t的所有值?或者std::numeric_limits::max()有可能吗?大于std::numeric_limits::max()? 最佳答案 是的。size_t被定义为无符号整数类型,大到足以包含任何对象的大小。uintmax_t被定义为能够存储任何无符号整数类型的任何值。所以如果size_t可以存储,uintmax_t可以存储。size_t的定义来自C++11§18.2:Thetypesize_tisanimpleme

ios - 身份验证(护照)足以保证 Node js 后端服务器的安全性?

对于带有NodeJS的iOS后端,使用Facebook身份验证的PassportJS是否足够?我也有toobusy包,可以在事情变得繁忙时拒绝请求(我猜这对DDOS很有好处)。我也在考虑使用nginx作为我的Node.JS服务器的反向代理。还有哪些可以扩展的安全措施?一些建议和技巧?我应该担心PassportJS的身份验证session无法处理的任何与安全相关的问题? 最佳答案 在一篇文章中塞入所有与安全相关的最佳实践有点困难,但无论如何,这是我对这个问题的看法。提供身份验证和保护它是两件不同的事情。PassportJS将能够处理与

javascript - 我如何保证在我的应用程序中一次性使用 gulp?

作为我正在编写的一个小程序的一部分,我想使用gulp将大量文件转换为markdown。这不是独立于程序的构建步骤的一部分。这是程序的一部分。所以我没有使用gulpfile来处理这个问题。问题是,因为它是异步的,所以我想使用一个Promise,它会在gulp任务完成时提醒我。这样的东西是理想的:io.convertSrc=function(){vardef=q.defer();gulp.src(src+'/*.md').pipe(marked({})).pipe(gulp.dest(dist),function(){def.resolve('Wearedone!');});returnd