根据此问题的答案和注释,当通过值捕获引用变量时,lambda对象应该复制引用的对象,而不是引用本身.但是,海湾合作委员会似乎并没有这样做.
使用以下测试:
#include <stddef.h>
#include <iostream>
using std::cout;
using std::endl;
int main(int argc, char** argv)
{
int i = 10;
int& ir = i;
[=]
{
cout << "value capture" << endl
<< "i: " << i << endl
<< "ir: " << ir << endl
<< "&i: " << &i << endl
<< "&ir: " << &ir << endl
<< endl;
}();
[&]
{
cout << "reference capture" << endl
<< "i: " << i << endl …Run Code Online (Sandbox Code Playgroud) 是否boost::asio::io_service保证以与通过它们给出的顺序相同的方式调用处理程序post()?我在文档中找不到任何说法.假设调用io_service::post是序列化的.
虽然使用枚举名称限定枚举值是无效的C++ 03,但根据我的理解,它是有效的C++ 11.尽管如此,MSVC 10还会针对以下内容生成警告C4482:
enum E { A, B };
int i = E::A; // warning C4482 (but valid C++11?)
Run Code Online (Sandbox Code Playgroud)
由于我们的大部分代码都使用C++ 11特性(特别是lambdas),因此禁用此警告似乎是安全的.我是对的,代码是有效的C++ 11吗?
注意:我没有编写有问题的代码,我宁愿不经历并更改每次出现的代码.
编辑:添加了一些相关链接.