Clang 6,clang 7和gcc 7.1,7.2和7.3都同意以下是有效的C++ 17代码,但在C++ 14和C++ 11下是不明确的.MSVC 2015和2017也接受它.但是,即使在c ++ 17模式下,gcc-8.1和8.2也拒绝它:
struct Foo
{
explicit Foo(int ptr);
};
template<class T>
struct Bar
{
operator T() const;
template<typename T2>
explicit operator T2() const;
};
Foo foo(Bar<char> x)
{
return (Foo)x;
}
Run Code Online (Sandbox Code Playgroud)
接受它的编译器选择模板显式转换函数,Bar::operator T2().
拒绝它的编译器同意以下两者之间存在歧义:
Bar<char>到char,然后从所述隐式内置转换char到int,然后将显式构造的Foo(INT).那么,哪个编译器是对的?C++ 14和C++ 17之间标准的相关区别是什么?
附录:实际错误消息
这是错误gcc-8.2 -std=c++17.gcc-7.2 -std=c++14打印相同的错误:
<source>: In function 'Foo foo(Bar<char>)':
<source>:17:17: error: call of overloaded 'Foo(Bar<char>&)' …Run Code Online (Sandbox Code Playgroud) 是允许的,还是我需要使用UI线程?
编辑:对官方android文档中某个位置的引用将是理想的。
Android文档明确指出,不允许“从UI线程外部访问Android UI工具包”。
另一方面,似乎允许从工作线程创建Bitmap对象,至少是通过示例代码完成的:http : //developer.android.com/guide/topics/fundamentals/processes-and-threads.html 显然,就线程而言,Bitmap类不被视为“ UI工具包”的一部分。
从非UI线程调用时,我有一段代码似乎可以正常工作。它涉及使用Bitmap.createBitmap(int,int,Bitmap.Config),新的Canvas(bitmap),Typeface.create()和文本绘图。我的代码未引用任何View对象。
有人可以指出我的一些文档,说我可以从后台线程执行这些操作吗?还是会导致随机崩溃?