0
我編寫一個簡單的(也可能是錯誤的)C++文件:libstdC++中允許的函數類型不兼容?
// file test_function.cpp
#include <functional>
void foo()
{
void* (*func)() = nullptr;
std::function<void()> func_(func);
}
我覺得func_的類型應該是std::function<void*()>
。正如預期的那樣,鐺++用的libC++提供了一個錯誤:
$ clang++ -std=c++14 -c -stdlib=libc++ test_function.cpp
test_function.cpp:6:27: error: no matching constructor for initialization of 'std::function<void()>'
std::function<void()> func_(func);
^ ~~~~
然而,g ++以及鐺++與++的libstdc沒有給出錯誤:
$ clang++ -std=c++14 -c -stdlib=libstdc++ test_function.cpp
$ g++ -std=c++14 -c test_function.cpp
是這種情況正常嗎? C++標準中是否有關於函數類型轉換的描述?
從http://stackoverflow.com/a/9343400/3786245開始,_proper_和_safe_用法應該是'std :: function'。我對麼? –
如果您需要返回值,這是正確的用法。如果你不這樣做,void()很好。 – KABoissonneault
謝謝@KABoissonneault我看到了理由。 –