对于std::tuple
,this reference pageè¡¨ç¤ºè¯¥ç±»åž‹çš„é»˜è®¤æž„é€ å‡½æ•°æ˜¯â€œæ˜¾å¼çš„,当且仅当Ti
ä¸èƒ½éšå¼é»˜è®¤æž„é€ è‡³å°‘ä¸€ä¸ª{{1} }}â€ã€‚
我对“éšå¼é»˜è®¤æž„é€ â€æ„味ç€ä»€ä¹ˆæ„Ÿåˆ°å›°æƒ‘。有人å¯ä»¥ä¸¾ä¸ªä¾‹åå—?
ç”案 0 :(得分:11)
以下是一个例å:
struct A {};
struct B { explicit B() = default; };
int main()
{
A a1 = {};
A a2 {};
// B b1 = {}; // Error, would use explicit default constructor
B b2 {};
}
由于列表åˆå§‹åŒ–,使用explicit
çš„æž„é€ å‡½æ•°å› C ++ 11而å˜å¾—æ›´åŠ ç›¸å…³ã€‚
ç”案 1 :(得分:6)
è¿™æ„味ç€ï¼Œstd::tuple<T1,T2,...,Tn>
éšå¼æž„建默认值,所有Ti
类型都必须。
例如,由于std::string
å’Œstd::vector
éšå¼é»˜è®¤æž„é€ ï¼ˆé»˜è®¤æž„é€ å‡½æ•°ä¸æ˜¯explicit
),std::tuple<std::string, std::vector>
是:
void f(std::tuple<std::string, std::vector<int>>);
f({}); // valid and equivalent to:
std::string sempty;
std::vector<int> vempty;
auto tsv = std::make_tuple(sempty, vempty);
f(tsv);
使用éžéšå¼é»˜è®¤å¯æž„é€ ç±»åž‹A
,std::tuple<std::string, A>
æ— æ³•éšå¼æž„é€ é»˜è®¤å€¼ï¼š
struct A
{
explicit A() = default;
};
void f(std::tuple<std::string, A>);
f({}); // error