据我所知,nullptr是某个类的实例,如下所示:
const
class {
public:
template<class T> // convertible to any type
operator T*() const // of null non-member
{ return 0; } // pointer...
template<class C, class T> // or any type of null
operator T C::*() const // member pointer...
{ return 0; }
private:
void operator&() const; // whose address can't be taken
} nullptr = {};
我想是
true
false
也是一些变量。那么事实就是说,prvalue是一个有害的黑客,违反了语言的类型系统吗?
如果nullptr只是一个关键字,那么如何从中派生类型?
typedef decltype(nullptr) nullptr_t;
答案 0 :(得分:1)
看看标准:
8.1.1文字[expr.prim.literal]文字是主要表达式。其类型取决于其形式(5.13)。字符串文字是左值; 所有其他文字都是 prvalues 。
<...>
5.13.6布尔文字[lex.bool]布尔文字:false true
布尔文字是关键字false和true。这样的文字是 prvalue,类型为bool。
5.13.7指针文字[lex.nullptr]指针文字:nullptr
指针文字是关键字nullptr。它是类型的prvalue std :: nullptr_t。 [注意:std :: nullptr_t是一种独特的类型,它是 既不是指针类型也不是成员类型的指针;而是一个prvalue 此类型是null指针常量,可以将其转换为null 指针值或空成员指针值。参见7.11和7.12。 - 结束 注意]
因此,如您所见,class _AppState extends State<App> {
bool _hasImage;
@override
Widget build(BuildContext context) {
_hasImage = false;
return Material(
child: Container(
child: Container(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Wrap(
direction: Axis.vertical,
alignment: WrapAlignment.start,
children: <Widget>[
IconButton(
icon: Icon(Icons.camera_alt),
iconSize: 40.0,
color: Color.fromRGBO(88, 60, 26, 1),
onPressed: () {},
),
Text(
'Camera',
style: TextStyle(color: Colors.white, fontSize: 17.0),
)
],
),
Wrap(
direction: Axis.vertical,
alignment: WrapAlignment.start,
children: <Widget>[
IconButton(
icon: Icon(Icons.image),
iconSize: 40.0,
color: Color.fromRGBO(88, 60, 26, 1),
onPressed: () {},
),
Text(
'Gallery',
style: TextStyle(color: Colors.white, fontSize: 17.0),
)
],
),
if (_hasImage) // this is what you need
Wrap(
direction: Axis.vertical,
alignment: WrapAlignment.start,
children: <Widget>[
IconButton(
icon: Icon(Icons.delete),
iconSize: 40.0,
color: Color.fromRGBO(88, 60, 26, 1),
onPressed: () {},
),
Text(
'Remove',
style: TextStyle(color: Colors.white, fontSize: 17.0),
)
],
)
],
),
),
),
);
}
}
和with cte (pos_id, pos_count, pos_seq) as
(
select pos_id, pos_count, 1 as pos_seq from mytable
union all
select pos_id, pos_count, pos_seq + 1
from cte
where pos_seq < pos_count and pos_count <> 999
)
select *
from cte
order by pos_id, pos_seq;
/ nullptr
都遵循共同的规则。唯一的例外是字符串文字(因为它本质上是一个数组)。