我知道std::thread析构函数是在主出口或线程对象超出范围时调用的。
但是,当它所调用的函数完成执行时,它还会被销毁吗?
如果不是这样的线程会发生什么,我还join()可以吗?
我正在做一个关于为我的Maybe数据类型中的对象实现括号的练习:
我想要实现的是这种括号:
-- MyJust 'a'
-- MyJust (MyJust 'a')
-- MyJust MyNothing
data MyMaybe a = MyNothing | MyJust a
instance Show a => Show (MyMaybe a) where
showsPrec _ MyNothing = showString "MyNothing"
showsPrec p (MyJust x) =
showParen(p>6)(showString "MyJust ".showsPrec 7 x)
Run Code Online (Sandbox Code Playgroud)
我的代码有效,但有些事情我不明白。首先MyJust运算符的优先级是什么(它必须小于 6 ,否则我会得到类似的东西(MyJust (MyJust 'a'))?另一个问题是我如何将其更改为 9,例如,以便我得到(MyJust (MyJust 'a'))?我试过了,infixl 9 'MyJust'但它不起作用. 我要求这样做是为了更好地理解haskell 中的优先级。