Skip to content

Latest commit

History

History
59 lines (45 loc) 路 5.37 KB

File metadata and controls

59 lines (45 loc) 路 5.37 KB

袣芯薪褋褌褉褍泻褌芯褉褘 胁 C++

袣芯薪褋褌褉褍泻褌芯褉 锌芯 褍屑芯谢褔邪薪懈褞 - 褝褌芯 泻芯薪褋褌褉褍泻褌芯褉, 泻芯褌芯褉褘泄 谢懈斜芯 薪械 懈屑械械褌 锌邪褉邪屑械褌褉芯胁, 谢懈斜芯 胁褋械 锌邪褉邪屑械褌褉褘 泻芯褌芯褉芯谐芯 懈屑械褞褌 蟹薪邪褔械薪懈褟 锌芯 褍屑芯谢褔邪薪懈褞.

袝褋谢懈 写谢褟 泻谢邪褋褋邪 A 泻芯薪褋褌褉褍泻褌芯褉 薪械 蟹邪写邪薪 锌芯谢褜蟹芯胁邪褌械谢械屑, 泻芯屑锌懈谢褟褌芯褉 薪械褟胁薪芯 芯斜褗褟胁谢褟械褌 泻芯薪褋褌褉褍泻褌芯褉 斜械蟹 锌邪褉邪屑械褌褉芯胁 锌芯 褍屑芯谢褔邪薪懈褞 A::A(). 协褌芯褌 泻芯薪褋褌褉褍泻褌芯褉 褟胁谢褟械褌褋褟 inline public 褔谢械薪芯屑 褋胁芯械谐芯 泻谢邪褋褋邪. 袣芯屑锌懈谢褟褌芯褉 斜褍写械褌 薪械褟胁薪芯 芯锌褉械写械谢褟褌褜 A::A(), 泻芯谐写邪 泻芯屑锌懈谢褟褌芯褉 懈褋锌芯谢褜蟹褍械褌 褝褌芯褌 泻芯薪褋褌褉褍泻褌芯褉 写谢褟 褋芯蟹写邪薪懈褟 芯斜褗械泻褌邪 褌懈锌邪 A. 袣芯薪褋褌褉褍泻褌芯褉 薪械 斜褍写械褌 懈屑械褌褜 懈薪懈褑懈邪谢懈蟹邪褌芯褉邪 泻芯薪褋褌褉褍泻褌芯褉邪 懈 薪褍谢械胁芯谐芯 褌械谢邪.

袣芯屑锌懈谢褟褌芯褉 褋薪邪褔邪谢邪 薪械褟胁薪芯 芯锌褉械写械谢褟械褌 薪械褟胁薪芯 芯斜褗褟胁谢械薪薪褘械 泻芯薪褋褌褉褍泻褌芯褉褘 斜邪蟹芯胁褘褏 泻谢邪褋褋芯胁 懈 薪械褋褌邪褌懈褔械褋泻懈械 褝谢械屑械薪褌褘 写邪薪薪褘褏 泻谢邪褋褋邪 A, 锌褉械卸写械 褔械屑 芯锌褉械写械谢褟褌褜 薪械褟胁薪芯 芯斜褗褟胁谢械薪薪褘泄 泻芯薪褋褌褉褍泻褌芯褉 A. 协褌芯 褍褌胁械褉卸写械薪懈械 芯蟹薪邪褔邪械褌, 褔褌芯, 泻芯谐写邪 泻芯屑锌懈谢褟褌芯褉 写芯谢卸械薪 褋芯蟹写邪褌褜 芯锌褉械写械谢械薪懈械 写谢褟 薪械褟胁薪芯 芯斜褗褟胁谢械薪薪芯谐芯 泻芯薪褋褌褉褍泻褌芯褉邪 锌芯 褍屑芯谢褔邪薪懈褞, 锌械褉械写 芯锌褉械写械谢械薪懈械屑 褌械泻褍褖械谐芯 泻芯薪褋褌褉褍泻褌芯褉邪 泻芯屑锌懈谢褟褌芯褉 写芯谢卸械薪 褍斜械写懈褌褜褋褟, 褔褌芯 胁褋械 褔谢械薪褘 屑芯谐褍褌 斜褘褌褜 褋泻芯薪褋褌褉褍懈褉芯胁邪薪褘 锌芯 褍屑芯谢褔邪薪懈褞, 懈 写谢褟 褝褌芯谐芯 械屑褍 屑芯卸械褌 锌芯褌褉械斜芯胁邪褌褜褋褟 薪械褟胁薪芯 芯锌褉械写械谢懈褌褜 谢褞斜芯泄 薪械褟胁薪芯 芯斜褗褟胁谢械薪薪褘泄 泻芯薪褋褌褉褍泻褌芯褉 锌芯 褍屑芯谢褔邪薪懈褞 泻芯薪褋褌褉褍泻褌芯褉 褝谢械屑械薪褌芯胁.

小锌褉邪胁泻邪:

袣褉邪褌泻芯 One Definition Rule(ODR) - 袩褉邪胁懈谢芯 芯写薪芯谐芯 芯锌褉械写械谢械薪懈褟 - 袙 谢褞斜芯泄 械写懈薪懈褑械 褌褉邪薪褋谢褟褑懈懈(褔懈褌邪泄 褎邪泄谢) 写芯锌褍褋泻邪械褌褋褟 褌芯谢褜泻芯 芯写薪芯 芯锌褉械写械谢械薪懈械 谢褞斜芯泄 锌械褉械屑械薪薪芯泄, 褎褍薪泻褑懈懈, 褌懈锌邪 泻谢邪褋褋邪, 褌懈锌邪 锌械褉械褔懈褋谢械薪懈褟, 泻芯薪褑械锌褌邪 (薪邪褔懈薪邪褟 褋 C++20) 懈谢懈 褕邪斜谢芯薪邪 (薪械泻芯褌芯褉褘械 懈蟹 薪懈褏 屑芯谐褍褌 懈屑械褌褜 薪械褋泻芯谢褜泻芯 芯斜褗褟胁谢械薪懈泄, 薪芯 写芯锌褍褋泻邪械褌褋褟 褌芯谢褜泻芯 芯写薪芯 芯锌褉械写械谢械薪懈械).

袩芯写褉芯斜薪芯: [One Definition Rule - odr]

袩褉懈屑械褉 #1: 小芯蟹写邪薪懈械 薪械褟胁薪褘褏 泻芯薪褋褌褉褍泻褌芯褉芯胁

class A { int x; };    
class B { A a; };       // [1]
int main() {
   B b;                 // [2]
}

袨锌褉械写械谢械薪懈械 锌械褉械屑械薪薪芯泄 b 胁 [2] 褟胁谢褟械褌褋褟 懈褋锌芯谢褜蟹芯胁邪薪懈械屑 odr-薪械褟胁薪芯 芯斜褗褟胁谢械薪薪芯谐芯 泻芯薪褋褌褉褍泻褌芯褉邪 写谢褟 B, 薪芯 锌褉械卸写械 褔械屑 泻芯屑锌懈谢褟褌芯褉 薪械褟胁薪芯 芯锌褉械写械谢懈褌 B::B(), 锌芯褋泻芯谢褜泻褍 褍 袙 械褋褌褜 褔谢械薪 褌懈锌邪 A, 芯斜褗褟胁谢械薪薪褘泄 胁 [1], 械屑褍 薪械芯斜褏芯写懈屑芯 薪械褟胁薪芯 芯锌褉械写械谢懈褌褜 A::A(). 袩褉懈褔懈薪邪 胁 褌芯屑, 褔褌芯 B::B() 斜褍写械褌 odr-懈褋锌芯谢褜蟹芯胁邪褌褜 A::A() 胁 褋胁芯械屑 褋锌懈褋泻械 懈薪懈褑懈邪谢懈蟹邪褑懈懈.

袣芯薪褋褌褉褍泻褌芯褉 泻谢邪褋褋邪 A 褟胁谢褟械褌褋褟 褌褉懈胁懈邪谢褜薪褘屑(trivial), 褌芯谢褜泻芯 械褋谢懈 胁械褉薪芯 胁褋械 褋谢械写褍褞褖械械:

  • 袨薪 薪械褟胁薪芯 芯斜褗褟胁谢械薪 懈谢懈 薪邪褔懈薪邪褟 褋 C++11 褟胁薪芯 芯斜褗褟胁谢械薪 default
  • A 薪械 懈屑械械褌 胁懈褉褌褍邪谢褜薪褘褏 褎褍薪泻褑懈泄 懈 胁懈褉褌褍邪谢褜薪褘褏 斜邪蟹芯胁褘褏 泻谢邪褋褋芯胁.
  • 袙褋械 锌褉褟屑褘械 斜邪蟹芯胁褘械 泻谢邪褋褋褘 A 懈屑械褞褌 褌褉懈胁懈邪谢褜薪褘械 泻芯薪褋褌褉褍泻褌芯褉褘.
  • 袣谢邪褋褋褘 胁褋械褏 薪械褋褌邪褌懈褔械褋泻懈褏 褝谢械屑械薪褌芯胁 写邪薪薪褘褏 A 懈屑械褞褌 褌褉懈胁懈邪谢褜薪褘械 泻芯薪褋褌褉褍泻褌芯褉褘.

效谢械薪 union 薪械 屑芯卸械褌 锌褉懈薪邪写谢械卸邪褌褜 泻 褌懈锌褍 泻谢邪褋褋邪, 泻芯褌芯褉褘泄 懈屑械械褌 薪械褌褉懈胁懈邪谢褜薪褘泄 泻芯薪褋褌褉褍泻褌芯褉.

袣邪泻 懈 胁褋械 褎褍薪泻褑懈懈, 泻芯薪褋褌褉褍泻褌芯褉 屑芯卸械褌 懈屑械褌褜 邪褉谐褍屑械薪褌褘 锌芯 褍屑芯谢褔邪薪懈褞. 袨薪懈 懈褋锌芯谢褜蟹褍褞褌褋褟 写谢褟 懈薪懈褑懈邪谢懈蟹邪褑懈懈 芯斜褗械泻褌芯胁-褔谢械薪芯胁. 袝褋谢懈 蟹邪写邪薪褘 蟹薪邪褔械薪懈褟 锌芯 褍屑芯谢褔邪薪懈褞, 泻芯薪械褔薪褘械 邪褉谐褍屑械薪褌褘 屑芯谐褍褌 斜褘褌褜 芯锌褍褖械薪褘 胁 褋锌懈褋泻械 胁褘褉邪卸械薪懈泄 泻芯薪褋褌褉褍泻褌芯褉邪. 袨斜褉邪褌懈褌械 胁薪懈屑邪薪懈械, 褔褌芯 械褋谢懈 褍 泻芯薪褋褌褉褍泻褌芯褉邪 械褋褌褜 泻邪泻懈械-谢懈斜芯 邪褉谐褍屑械薪褌褘, 泻芯褌芯褉褘械 薪械 懈屑械褞褌 蟹薪邪褔械薪懈泄 锌芯 褍屑芯谢褔邪薪懈褞, 褝褌芯 薪械 泻芯薪褋褌褉褍泻褌芯褉 锌芯 褍屑芯谢褔邪薪懈褞. 袙 褋谢械写褍褞褖械屑 锌褉懈屑械褉械 芯锌褉械写械谢褟械褌褋褟 泻谢邪褋褋 褋 芯写薪懈屑 泻芯薪褋褌褉褍泻褌芯褉芯屑 懈 写胁褍屑褟 泻芯薪褋褌褉褍泻褌芯褉邪屑懈 锌芯 褍屑芯谢褔邪薪懈褞.

袩褉懈屑械褉 #2: 袣芯薪褋褌褉褍泻褌芯褉褘

class X {
public:
  X();                       // 袣芯薪褋褌褉褍泻褌芯褉 锌芯 褍屑芯谢褔邪薪懈褞 斜械蟹 邪褉谐褍屑械薪褌芯胁
  X(int = 0);                // 袣芯薪褋褌褉褍泻褌芯褉 锌芯 褍屑芯谢褔邪薪懈褞 褋 邪褉谐褍屑械薪褌邪屑懈 懈屑械褞褖懈屑懈 蟹薪邪褔械薪懈械 锌芯 褍屑芯谢褔邪薪懈褞
  X(int, int , int = 0);     // 袣芯薪褋褌褉褍泻褌芯褉
};