最近我偶然发现了一篇关于如何在现代C++中导入dll库的this文章。代码完全让我不知所措,所以我一行一行地看了一遍,试图弄清楚它的含义。到现在为止,我认为我明白了,但有一件事我仍然不清楚:
class ShellApi {
DllHelper _dll{"Shell32.dll"};
/* ... */
};
class DllHelper {
public:
explicit DllHelper(LPCTSTR filename) : _module(LoadLibrary(filename)) {}
/* ... */
private:
HMODULE _module;
};
为什么示例化DllHelper _dll{"Shell32.dll"}
是用花括号而不是普通的花括号写的?我在Visual Studio中试过了,不得不意识到这个代码段不能用普通的花括号。为什么不能?这种示例化是如何调用的(这样我可以稍后查找)?还有其他使用这种方法的场景吗?
如果我提供的代码不足以回答这个问题,文章中提供了完整的代码。
2条答案
按热度按时间bwleehnv1#
列表初始化从C++11就存在了,现在通常被看作是初始化对象的实际方式(除了一些特殊情况):
列表初始化和直接初始化之间存在差异,这些差异在https://en.cppreference.com/w/cpp/language/list_initialization上进行了总结,其中一些差异如下:
ShellApi
的非静态成员,您不能使用()
来初始化它:snz8szmq2#
我一直在努力让它工作,但C真的不喜欢这行
DllHelper _dll{“ shell 32.dll”};
C它没有读取_dll,而它应该读取的HMODULE定义是有效的