我有这个简单的代码:
#include <iostream>
#include <functional>
class a {
public:
a() {
func = [] {
static int i = 0;
i++;
std::cout << i << std::endl;
};
}
std::function<void()> func;
};
int main()
{
a a1;
a1.func();
a a2;
a2.func();
}
Run Code Online (Sandbox Code Playgroud)
我期望这样的输出:
1
1
Run Code Online (Sandbox Code Playgroud)
但它却是:
1
2
Run Code Online (Sandbox Code Playgroud)
然后我检查了两个实例中 lambda 表达式的内存地址a,它们是相同的。这意味着 lambda 创建一次,然后在所有实例中使用。我正在寻找的是让构造函数每次被调用时都创建一个不同的 lambda。我关闭了编译器优化,但没有效果。
信息:我正在使用 MSVC。
是否可以在编辑控件上设置扩展样式(简单编辑,而不是丰富编辑)?例如我想将扩展样式设置为WS_EX_ZOOMABLE | WS_EX_ALLOWEOL_ALL. 控件的创建如下:
HWND hEdit = CreateWindowExW(
ES_EX_ZOOMABLE | ES_EX_ALLOWEOL_ALL,
L"EDIT",
L"",
WS_BORDER | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL,
0, 0, 100, 100,
hWndMain, (HMENU)ID_EDIT, hInstance, NULL
);
Run Code Online (Sandbox Code Playgroud)
问题是所有扩展样式都不起作用。是EOL静止的CR LF并且控件不可缩放。