Khiêu chuyển đáo nội dung

C++11

本页使用了标题或全文手工转换
本页使用了标题或全文手工转换
Duy cơ bách khoa, tự do đích bách khoa toàn thư

C++11,Tiên tiền bị xưng tácC++0x,Tức ISO/IEC 14882:2011, thịC++ trình thức ngữ ngônĐích nhất cá tiêu chuẩn. Tha thủ đại đệ nhị bản tiêu chuẩn ISO/IEC 14882:2003 ( đệ nhất bản ISO/IEC 14882:1998 công khai ô 1998 niên, đệ nhị bản ô 2003 niên canh tân, phân biệt thông xưng C++98 dĩ cập C++03, lưỡng giả soa dị ngận tiểu ), thả dĩ bịC++14Thủ đại. Tương bỉ vu C++03, C++11 tiêu chuẩn bao hàmHạch tâm ngữ ngônĐích tân cơ năng, nhi thả khoách triểnC++ tiêu chuẩn trình thức khố,Tịnh nhập liễu đại bộ phân đíchC++ Technical Report 1Trình thức khố ( sổ học đích đặc thù hàm thức trừ ngoại ). ISOIECJTC1/SC22/WG21 C++ tiêu chuẩn ủy viên hội kế hoa tại 2010 niên 8 nguyệt chi tiền hoàn thành đối tối chung ủy viên hội thảo án đích đầu phiếu, dĩ cập ô 2011 niên 3 nguyệt triệu khai đích tiêu chuẩn hội nghị hoàn thành quốc tế tiêu chuẩn đích tối chung thảo án. Nhiên nhi, WG21 dự kỳ ISO tương yếu hoa phí lục cá nguyệt đáo nhất niên đích thời gian tài năng chính thức phát bố tân đích C++ tiêu chuẩn. Vi liễu năng cú như kỳ hoàn thành, ủy viên hội quyết định trí lực ô trực chí 2006 niên vi chỉ đích đề án, hốt lược tân đích đề án[1].Tối chung vu 2011 niên 8 nguyệt 12 nhật công bố, tịnh vu 2011 niên 9 nguyệt xuất bản.

2012 niên 2 nguyệt 28 nhật đích quốc tế tiêu chuẩn thảo án[1]Thị tối tiếp cận vu C++11 tiêu chuẩn đích thảo án, soa dị cận hữu biên tập thượng đích tu chính.

Tượng C++ giá dạng đíchTrình thức ngữ ngôn,Thấu quá nhất chủng diễn hóa đích quá trình lai phát triển kỳ định nghĩa. Giá cá quá trình bất khả tị miễn địa tương dẫn phát dữ hiện hữu trình thức mã đích tương dung vấn đề, tại C++ đích phát triển quá trình trung ngẫu nhĩ hội phát sinh. Bất quá căn cưBỉ nhã ni · tư đặc lao tư đặc lỗ phổ( C++ đích sang thủy nhân tịnh thả thị ủy viên hội đích nhất viên ) biểu kỳ, tân đích tiêu chuẩn tương kỉ hồ 100% tương dung ô hiện hữu tiêu chuẩn.

Thiết kế nguyên tắc[Biên tập]

C++ đích tu đính bao hàm hạch tâm ngữ ngôn dĩ cập tiêu chuẩn trình thức khố.

Tại phát triển tân tiêu chuẩn đích mỗi cá cơ năng thượng, ủy viên hội thải thủ liễu kỉ cá phương hướng:

  • Duy trì ổn định tính hòa dữ C++98, khả năng đích thoại hoàn hữuCChi gian đích kiêm dung tính;
  • Tẫn khả năng bất thấu quá hạch tâm ngữ ngôn đích khoách triển, nhi thị thấu quá tiêu chuẩn trình thức khố lai dẫn tiến tân đích đặc tính;
  • Năng cú diễn tiến biên trình kỹ thuật đích biến canh ưu tiên;
  • Cải tiến C++ dĩ bang trợ hệ thống dĩ cập hàm thức khố thiết kế, nhi bất thị dẫn tiến chỉ châm đối đặc biệt ứng dụng đích tân đặc tính;
  • Tăng tiến hình biệt an toàn, đề cung đối hiện hành bất an toàn đích kỹ thuật canh an toàn đích thế đại phương án;
  • Tăng tiến trực tiếp đối ngạnh thể công tác đích năng lực dữ biểu hiện;
  • Đề cung hiện thật thế giới trung vấn đề đích thích đương giải quyết phương án;
  • Thật hành “zero-overhead” nguyên tắc ( mỗ ta công năng yếu cầu đích ngạch ngoại chi viện chỉ hữu tại cai công năng bị sử dụng thời tài năng sử dụng );
  • Sử C++ dịch ô giáo thụ dữ học tập

Quan chiếu sơ học giả bị nhận vi thị trọng yếu đích, nhân vi tha môn cấu thành liễu kế toán cơ trình tự viên đích chủ thể. Dã nhân vi hứa đa sơ học giả bất nguyện khoách triển tha môn đối C++ đích tri thức, chỉ hạn ô sử dụng tha môn đối C++ chuyên tinh đích bộ phân. Thử ngoại, khảo lự đáo C++ bị quảng phiếm đích sử dụng ( bao hàm ứng dụng lĩnh vực hòa biên trình phong cách ), tức tiện thị tối hữu kinh nghiệm đích trình tự viên tại diện đối tân đích biên trình phạm thức thời dã hội thành vi sơ học giả.

C++ hạch tâm ngữ ngôn đích khoách sung[Biên tập]

C++ ủy viên hội đích chủ yếu tác dụng chi nhất thị cải thiện ngữ ngôn hạch tâm. Hạch tâm ngữ ngôn tương bị đại phúc cải thiện đích lĩnh vực bao quátĐa tuyến trìnhChi viện,Phiếm hình biên trình,Thống nhất đích sơ thủy hóa, dĩ cập hiệu năng biểu hiện đích gia cường.

Tại thử phân thành 4 cá khu khối lai thảo luận hạch tâm ngữ ngôn đích đặc sắc dĩ cập biến canh: Chấp hành kỳ biểu hiện cường hóa, kiến cấu kỳ biểu hiện cường hóa, khả dụng tính cường hóa, hoàn hữu tân đích công năng. Mỗ ta đặc tính khả năng hội đồng thời chúc ô đa cá khu khối, đãn tại thử cận ô kỳ tối cụ đại biểu tính đích khu khối miêu thuật.

Hạch tâm ngữ ngôn đích chấp hành kỳ biểu hiện cường hóa[Biên tập]

Dĩ hạ đích ngữ ngôn cơ năng chủ yếu dụng lai đề thăng mỗ ta hiệu năng biểu hiện, tượng thị ký ức thể hoặc thị tốc độ thượng đích biểu hiện.

Hữu trị dẫn dụng hòa move ngữ ý[Biên tập]

Tại C++03 cập chi tiền đích tiêu chuẩn, lâm thời đối tượng ( xưng vi hữu trị "R-values", nhân vi tha môn thông thường vị ô phú trị vận toán tử hữu trắc ) vô pháp bị cải biến, tại C trung diệc đồng ( thả bị thị vi đẳng đồng vuconst T&). Tẫn quản như thử, tại mỗ ta tình huống hạ lâm thời đối tượng nhưng nhiên khả năng hội bị cải biến, đãn giá chủng biểu hiện dã bị thị vi thị nhất cá hữu dụng đích lậu động.

C++11 tăng gia nhất cá tân đích phi thường sổ dẫn dụng ( reference ) hình biệt, xưng tácHữu trị dẫn dụng( R-value reference ), tiêu ký viT &&.Hữu trị dẫn dụng sở bảng định đích lâm thời đối tượng khả dĩ tại cai lâm thời đối tượng bị sơ thủy hóa chi hậu tố tu cải, giá thị vi liễu duẫn hứamove ngữ ý.

C++03 đê tính năng vấn đề đích chi nhất, tựu thị tại dĩ truyện trị phương thức truyện đệ đối tượng thời ẩn thức phát sinh đích háo thời thả bất tất yếu đíchThâm độ khảo bối.Cử lệ nhi ngôn,std::vector<T>Bổn chất thượng thị nhất cá C-style trận liệt cập kỳ đại tiểu đích phong trang, như quả nhất cástd::vector<T>Đích lâm thời vật kiện thị tại hàm thức nội bộ hoặc giả hàm sổ phản hồi thời sang kiến, yếu tương kỳ trữ tồn tựu chỉ năng thấu quá sinh thành tân đíchstd::vector<T>Tịnh thả bả cai lâm thời vật kiện sở hữu đích tư liêu phục chế quá khứ ( vi liễu thảo luận thượng đích phương tiện, giá lí hốt lượcPhản hồi trị ưu hóa). Nhiên hậu cai lâm thời vật kiện hội bị tích cấu, kỳ sử dụng đích ký ức thể hội bị thích phóng.

Tại C++11, bả nhất cávectorĐích hữu trị dẫn dụng tác vi tham sổstd::vectorĐích "move kiến cấu tử", khả dĩ bả hữu trị tham sổ sở bảng định đíchvectorNội bộ đích chỉ hướng C-style trận liệt đích chỉ tiêu phục chế cấp tân đíchvector,Nhiên hậu bả cai chỉ tiêu trí null. Do vu lâm thời biến lượng bất hội bị tái thứ sử dụng, sở dĩ bất hội hữu đại mã khứ phóng vấn cai null chỉ châm; hựu nhân vi cai chỉ châm vi null, đương cai lâm thời đối tượng siêu xuất tác dụng vực thời tằng kinh chỉ hướng đích nội bộ C-style trận liệt sở sử dụng đích nội tồn bất hội bị thích phóng. Nhân thử, cai thao tác bất cận vô hình trung miễn khứ liễu thâm khảo bối đích khai tiêu, nhi thả hoàn ngận an toàn.

Hữu trị dẫn dụng tác vi sổ cư loại hình đích dẫn nhập, sử đắc hàm sổ khả dĩTrọng tái khu phânTha đích tham sổ thị trị loại hình, truyện thống đích tả trị dẫn dụng hoàn thị hữu trị dẫn dụng. Giá nhượng trừ liễu tiêu chuẩn khố đích hiện hữu đại mã vô tu nhậm hà cải động tựu năng đẳng đáo tính năng đề thăng. Nhất cá phản hồistd::vector<T>Đích hàm sổ đích phản hồi loại hình vô tu vi liễu điều dụng move cấu tạo hàm sổ nhi hiển thức tu cải vistd::vector<T>&&,Nhân vi lâm thời đối tượng tự động tác viHữu trị.( đãn thị, như quảstd::vector<T>Thị một hữu move cấu tạo hàm sổ đích C++03 bản, do vu truyện thống đíchTả trị dẫn dụngDã khả dĩ bảng định đáo lâm thời đối tượng thượng, nhân thử cụ hữuconst std::vector<T>&Tham sổ đích phục chế cấu tạo hàm sổ hội bị điều dụng, đạo trí nhất thứ hiển trứ đích nội tồn phân phối. )

Xuất vu an toàn đích khảo lự, thôi hành liễu nhất ta hạn chế. Cụ danh đích biến lượng bị nhận định vi tả trị, tức sử tha thị bị tuyên cáo vi hữu trị dẫn dụng sổ cư loại hình; vi liễu hoạch đắc hữu trị tất tu sử dụng hiển thức loại hình chuyển hoán, như mô bản hàm sổstd::move<T>().Hữu trị dẫn dụng sở bảng định đích đối tượng ứng cai chỉ tại đặc định tình cảnh hạ bị tu cải, chủ yếu dụng vu move cấu tạo hàm sổ trung.

boolis_r_value(int&&){returntrue;}
boolis_r_value(constint&){returnfalse;}

voidtest(int&&i)
{
is_r_value(i);// i vi cụ danh biến sổ, tức sử bị tuyên cáo thành hữu trị dẫn dụng loại hình, i tác vi thật tham biểu đạt thức dã bất hội bị nhận định thị hữu trị biểu đạt thức.
is_r_value(std::move<int&>(i));// sử dụng std::move<T>() thủ đắc hữu trị.
}

Do ô hữu trị dẫn dụng đích ngữ nghĩa đặc tính dĩ cập đối ôTả trị dẫn dụng( L-value references;regular references ) đích mỗ ta ngữ nghĩa tu chính, hữu trị dẫn dụng nhượng khai phát giả năng cú đề cung hàm sổ tham sổ đíchHoàn mỹ chuyển phát( perfect function forwarding ). Đương dữBất định trường tham sổ mô bảnKết hợp, giá hạng năng lực duẫn hứa hàm thức mô bản năng cú hoàn mỹ địa chuyển tống tham sổ cấp kỳ tha tiếp thụ giá ta đặc định tham sổ đích hàm thức. Tối đại đích dụng xử thị chuyển tống kiến cấu tử tham sổ, sang tạo xuất năng cú tự động vi giá ta đặc định tham sổ hô khiếu chính xác kiến cấu thức đích công hán hàm thức ( factory function ). Giá cá dụng pháp khả dĩ tại C++ tiêu chuẩn khố trung đíchemplace_back(Hiệt diện tồn đương bị phân,Tồn vuHỗ liên võng đương án quán) phương pháp trung khán đáo.

constexpr – phiếm hóa đích thường sổ biểu kỳ thức[Biên tập]

C++ bổn lai tựu dĩ cụ bị thường sổ biểu kỳ thức ( constant expression ) đích khái niệm. Tượng thị3+4Tổng thị hội sản sinh tương đồng đích kết quả tịnh thả một hữu nhậm hà đích phó tác dụng. Thường sổ biểu kỳ thức đối biên dịch khí lai thuyết thị tối giai hóa đích cơ hội, biên dịch khí thời thường tại biên dịch kỳ chấp hành tha môn tịnh thả tương trị tồn nhập trình thức trung. Đồng dạng địa, tại hứa đa tràng hợp hạ, C++ quy cách yếu cầu sử dụng thường sổ biểu kỳ thức. Lệ như tại trận liệt đại tiểu đích định nghĩa thượng, dĩ cập liệt cử trị ( enumerator values ) đô yếu cầu tất tu thị thường sổ biểu kỳ thức.

Nhiên nhi, thường sổ biểu kỳ thức bất năng hàm hữu hàm thức hô khiếu hoặc thị vật kiện kiến cấu thức. Sở dĩ tượng thị dĩ hạ đích lệ tử thị bất hợp pháp đích:

intGetFive(){return5;}

intsome_value[GetFive()+7];// dục sản sinh 12 cá chỉnh sổ đích trận liệt. Bất hợp pháp đích C++ tả pháp

Giá tại C++03 trung thị bất hợp pháp đích, nhân viGetFive() + 7Tịnh bất thị thường sổ biểu kỳ thức. C++03 biên dịch khí vô tòng đắc triGetFiveThật tế thượng tại chấp hành kỳ thị thường sổ. Lý luận thượng nhi ngôn, giá cá hàm thức khả năng hội ảnh hưởng toàn vực biến sổ, hoặc giả hô khiếu kỳ tha đích phi chấp hành kỳ ( non-runtime ) thường sổ hàm thức đẳng.

C++11 dẫn tiến quan kiện tựconstexprDuẫn hứa sử dụng giả bảo chứng hàm thức hoặc thị vật kiện kiến cấu thức thị biên dịch kỳ thường sổ. Dĩ thượng đích lệ tử khả dĩ bị tả thành tượng thị hạ diện giá dạng:

constexprintGetFive(){return5;}

intsome_value[GetFive()+7];// dục sản sinh 12 cá chỉnh sổ đích trận liệt. Hợp pháp đích C++11 tả pháp

Giá sử đắc biên dịch khí năng cú liễu giải tịnh khứ nghiệm chứngGetFiveThị cá biên dịch kỳ thường sổ.

DụngconstexprTu sức hàm sổ tương hạn chế hàm thức đích hành vi. Thủ tiên, cai hàm thức đích hồi phản trị hình biệt bất năng vi void. Đệ nhị, hàm thức đích nội dung tất tu y chiếu "returnexpr"Đích hình thức. Đệ tam, tại tham sổ thế hoán hậu,exprTất tu thị cá thường sổ biểu kỳ thức. Giá ta thường sổ biểu kỳ thức chỉ năng cú hô khiếu kỳ tha bị định nghĩa viconstexprĐích hàm thức, hoặc thị kỳ tha thường sổ biểu kỳ thức đích tư liêu biến sổ. Tối hậu, hữu trứ giá dạng tu sức phù đích hàm thức trực đáo tại cai biên dịch đan nguyên nội bị định nghĩa chi tiền thị bất năng cú bị hô khiếu đích.

Thanh minh viconstexprĐích hàm sổ dã khả dĩ tượng kỳ tha hàm sổ nhất dạng dụng vu thường lượng biểu đạt thức dĩ ngoại đích địa phương, thử thời bất nhu yếu mãn túc hậu lưỡng điểm.

C++11 chi tiền, khả dĩ tại thường lượng biểu đạt thức trung sử dụng đích biến lượng tất tu bị thanh minh viconst,Dụng thường lượng biểu đạt thức lai sơ thủy hóa, tịnh thả tất tu thị chỉnh hình hoặc mai cử loại hình. C++11 khứ trừ liễu biến lượng tất tu thị chỉnh hình hoặc mai cử loại hình đích hạn chế, chỉ yếu biến lượng sử dụng liễuconstexprQuan kiện tự lai định nghĩa:

constexprdoubleearth_gravitational_acceleration=9.8;
constexprdoublemoon_gravitational_acceleration=earth_gravitational_acceleration/6.0;

Giá ta biến lượng đô thị ẩn thức thường lượng, tất tu sử dụng thường lượng biểu đạt thức lai sơ thủy hóa.

Vi liễu nhượng sử dụng giả tự định nghĩa hình biệt ( user-defined type ) tham dữ kiến cấu thường lượng biểu kỳ thức, kiến cấu thức dã khả dĩ dụngconstexprLai thanh minh. DữconstexprHàm thức nhất dạng,constexprKiến cấu thức tất tu tại cai biên dịch đan nguyên nội sử dụng chi tiền bị định nghĩa. Tha đích hàm sổ thể tất tu vi không. Tha tất tu dụng thường lượng biểu kỳ thức sơ thủy hóa tha đích thành viên ( member ). Nhi giá chủng hình biệt đích giải cấu thức ứng đương thị bình phàm đích ( trivial ).

Ủng hữuconstexprCấu tạo hàm sổ đích loại hình đích phục chế cấu tạo hàm sổ thông thường dã ứng cai bị định nghĩa viconstexpr,Dĩ tiện cai loại hình đích đối tượng dĩ trị truyện đệ đích phương thức tòngconstexprHàm sổ phản hồi. Cai loại biệt đích nhậm hà thành viên hàm thức, tượng thị phục chế kiến cấu thức, vận toán phù trọng tái hàm sổ đẳng đẳng, chỉ yếu tha môn phù hợp thường sổ biểu đạt thức hàm thức đích định nghĩa, đô khả dĩ bị tuyên cáo thànhconstexpr.Sử đắc biên dịch khí năng cú tại biên dịch kỳ tiến hành loại biệt đích phục chế, đối tha môn thi hành vận toán đẳng đẳng.

Thường sổ biểu đạt thức hàm thức hoặc kiến cấu thức, khả dĩ dĩ phi thường sổ biểu kỳ thức (non-constexpr) tác vi tham sổ hoán khởi. Tựu như đồngconstexprChỉnh sổ tự diện trị năng cú chỉ phái cấpnon-constexprBiến sổ,constexprHàm thức dã khả dĩ tiếp thụnon-constexprTham sổ, kỳ kết quả trữ tồn ônon-constexprBiến sổ.constexprQuan kiện tự chỉ hữu đương biểu kỳ thức đích thành viên đô thịconstexpr,Tài duẫn hứa biên dịch kỳ thường sổ tính đích khả năng.

Đối POD định nghĩa đích tu chính[Biên tập]

Tại C++03 trung, nhất cá loại ( class ) hoặc kết cấu ( struct ) yếu tưởng bị tác viPOD,Tất tu tuân thủ kỉ điều quy tắc. Phù hợp giá chủng định nghĩa đích hình biệt năng cú sản sinh dữ C tương dung đích vật kiện nội tồn bố cục ( object layout ), nhi thả khả dĩ bị tĩnh thái sơ thủy hóa. Đãn C++03 tiêu chuẩn nghiêm cách hạn chế liễu hà chủng loại hình dữ C kiêm dung hoặc khả dĩ bị tĩnh thái sơ thủy hóa đích, tẫn quản tịnh bất tồn tại kỹ thuật nguyên nhân đạo trí biên dịch khí vô pháp xử lý. Như quả sang kiến nhất cá C++03 POD loại hình, nhiên hậu vi kỳ thiêm gia nhất cá phi hư thành viên hàm sổ, giá cá loại hình tựu bất tái thị POD loại hình liễu, tòng nhi vô pháp bị tĩnh thái sơ thủy hóa, dã bất tái dữ C kiêm dung, tẫn quản kỳ nội tồn bố cục tịnh một hữu phát sinh biến hóa.

C++11 thông quá bả POD khái niệm hoa phân thành lưỡng cá khái niệm:Bình phàm đích ( trivial )Hòa tiêu chuẩn bố cục( standard-layout ),Phóng khoan liễu quan ô POD đích định nghĩa.

Nhất cá bình phàm đích loại hình khả dĩ bị tĩnh thái sơ thủy hóa, ý vị trứ sử dụngmemcpyLai phục chế sổ cư thị hợp pháp đích, nhi vô tu sử dụng phục chế cấu tạo hàm sổ. Bình phàm đích loại hình đối tượng đích sinh mệnh chu kỳ khai thủy vu kỳ tồn trữ không gian bị phân phối thời, nhi bất thị kỳ cấu tạo hàm sổ hoàn thành thời. Sử dụng mô bản loại std::is_trivial<T>::value lai phán đoạn sổ cư loại hình thị phủ vi bình phàm loại hình

Nhất cá bình phàm đích loại biệt hoặc kết cấu phù hợp dĩ hạ định nghĩa:

  1. Bình phàm đích dự thiết kiến cấu thức. Giá khả dĩ sử dụngDự thiết kiến cấu thức ngữ pháp,Lệ nhưSomeConstructor() = default;
  2. Bình phàm đích phục chế kiến cấu thức hòa move cấu tạo hàm sổ, khả sử dụng dự thiết ngữ pháp ( default syntax )
  3. Bình phàm đích phú trị vận toán tử hòa move phú trị thao tác phù, khả sử dụng dự thiết ngữ pháp ( default syntax )
  4. Bình phàm đích giải cấu thức, bất khả dĩ thị hư hàm sổ ( virtual )
  5. Loại một hữu hư cơ loại hòa hư thành viên hàm sổ
  6. Phục chế cấu tạo hàm sổ hòa phú trị thao tác phù hoàn ngạch ngoại yếu cầu sở hữu phi tĩnh thái sổ cư thành viên đô thị bình phàm đích.

Nhất cá phù hợp tiêu chuẩn bố cục đích loại phong trang thành viên đích phương thức dữ C kiêm dung. Sử dụng mô bản loại std::is_standard_layout<A>::value lai phán đoạn loại hình thị phủ thị nhất cá tiêu chuẩn bố cục loại hình. Nhất cá tiêu chuẩn bố cục ( standard-layout ) đích loại biệt hoặc kết cấu phù hợp dĩ hạ định nghĩa:

  1. Sở hữu non-static thành viên hữu tương đồng đích tồn thủ khống chế ( public, private, protected )
  2. Một hữu hư nghĩ hàm thức
  3. Một hữu hư cơ loại
  4. Sở hữu cơ sở loại biệt phù hợp tiêu chuẩn bố cục
  5. Sở hữu phi tĩnh thái đích ( non-static ) tư liêu thành viên chúc vu phù hợp tiêu chuẩn bố cục đích loại biệt
  6. Loại trung đệ nhất cá phi tĩnh thái loại biệt dữ cơ loại bất thị đồng nhất cá loại biệt. Lệ như: struct A:B{ B b; int c;} bất phù hợp yếu cầu
  7. Lưỡng chủng tình huống tất cục kỳ nhất: Hoặc giả sở hữu cơ sở loại biệt đô một hữu non-static thành viên; hoặc giả tối phái sinh loại biệt một hữu non-static tư liêu thành viên thả chí đa nhất cá đái hữu non-static thành viên đích cơ sở loại biệt. Cơ bổn thượng, tại cai loại biệt đích kế thừa thể hệ trung chỉ hội hữu nhất cá loại biệt đái hữu non-static thành viên.

Nhất cá loại, kết cấu, liên hợp chỉ hữu tại kỳ thị bình phàm đích, phù hợp tiêu chuẩn bố cục, tịnh thả sở hữu phi tĩnh thái thành viên hòa cơ loại đô thị POD thời, tài bị thị vi POD. Sử dụng <type_traits> trung đích is_pod<T>::value phán đoạn T thị bất thị POD loại hình

Thông quá hoa phân, sử đắc phóng khí nhất cá đặc tính nhi bất thất khứ lánh nhất cá thành vi khả năng. Nhất cá cụ hữu phục tạp đích phục chế hòa move cấu tạo hàm sổ đích loại khả năng bất thị bình phàm đích, đãn thị tha khả năng phù hợp tiêu chuẩn bố cục, tòng nhi năng dữ C trình tự giao hỗ. Loại tự địa, nhất cá đồng thời cụ hữu public hòa private sổ cư thành viên đích loại bất phù hợp tiêu chuẩn bố cục, đãn tha khả dĩ thị bình phàm đích, tòng nhi năng cú sử dụngmemcpyLai phục chế.

Hạch tâm ngữ ngôn kiến cấu kỳ biểu hiện đích gia cường[Biên tập]

Ngoại bộ mô bản[Biên tập]

Tại tiêu chuẩn C++ trung, chỉ yếu tại biên dịch đan nguyên nội ngộ đáo bị hoàn chỉnh định nghĩa đích mô bản, biên dịch khí đô tất tu tương kỳ cụ hiện hóa ( instantiate ). Giá hội đại đại tăng gia biên dịch thời gian, đặc biệt thị mô bản tại hứa đa biên dịch đan nguyên nội sử dụng tương đồng đích tham sổ cụ hiện hóa. Khán khởi lai một hữu bạn pháp cáo tố C++ bất yếu dẫn phát mô bản đích cụ hiện hóa.

C++11 tương hội dẫn nhập ngoại bộ mô bản giá nhất khái niệm. C++ dĩ kinh hữu liễu cường chế biên dịch khí tại đặc định vị trí khai thủy cụ hiện hóa đích ngữ pháp:

templateclassstd::vector<MyClass>;

Nhi C++ sở khuyết phạp đích thị trở chỉ biên dịch khí tại mỗ cá biên dịch đan nguyên nội cụ hiện hóa mô bản đích năng lực. C++11 tương giản đan địa khoách sung tiền văn ngữ pháp như hạ:

externtemplateclassstd::vector<MyClass>;

Giá dạng tựu cáo tố biên dịch khíBất yếuTại cai biên dịch đan nguyên nội tương cai mô bản cụ hiện hóa.

Hạch tâm ngữ ngôn sử dụng tính đích gia cường[Biên tập]

Giá ta đặc sắc tồn tại đích chủ yếu mục đích thị vi liễu sử C++ năng cú canh dung dịch sử dụng. Cử phàm khả dĩ tăng tiến hình biệt an toàn, giảm thiếu trình thức mã trọng phục, bất dịch ngộ dụng trình thức mã chi loại đích.

Sơ thủy hóa liệt biểu[Biên tập]

Tiêu chuẩn C++ tòng C đái lai liễuSơ thủy hóa liệt biểu( initializer list ) đích khái niệm. Giá cá cấu tưởng thị kết cấu hoặc thị sổ tổ năng cú y cư thành viên tại cai kết cấu nội định nghĩa đích thuận tự thấu quá cấp dư đích nhất xuyến dẫn sổ lai sản sinh. Giá taSơ thủy hóa liệt biểuThị đệ hồi đích, sở dĩ kết cấu đích sổ tổ hoặc thị bao hàm kỳ tha kết cấu đích kết cấu khả dĩ sử dụng tha môn. Giá đối tĩnh thái liệt biểu hoặc thị cận thị bả kết cấu sơ thủy hóa vi mỗ trị nhi ngôn tương đương hữu dụng. C++ hữu cấu tạo hàm sổ, năng cú trọng phục đối tượng đích sơ thủy hóa. Đãn đan đan chỉ hữu na dạng tịnh bất túc dĩ thủ đại giá hạng đặc sắc đích sở hữu cơ năng. Tại C++03 trung, chỉ duẫn hứa tại nghiêm cách tuân thủ POD đích định nghĩa hòa hạn chế điều kiện đích kết cấu cập loại biệt thượng sử dụng giá hạng cơ năng, phi POD đích hình biệt bất năng sử dụng, tựu liên tương đương hữu dụng đích STL dung khí std::vector dã bất hành.

C++11 tương hội bả sơ thủy hóa liệt biểu đích khái niệm bảng đáo hình biệt thượng, xưng tácstd::initializer_list.Giá duẫn hứa cấu tạo hàm sổ hoặc kỳ tha hàm sổ tượng tham sổ bàn địa sử dụngSơ thủy hóa liệt biểu.Cử lệ lai thuyết:

classSequenceClass
{
public:
SequenceClass(std::initializer_list<int>list);
};

Giá tương duẫn hứaSequenceClassDo nhất liên xuyến đích chỉnh sổ cấu tạo, tựu tượng:

SequenceClasssomeVar={1,4,5,6};

Giá cá cấu tạo hàm sổ thị chủng đặc thù đích cấu tạo hàm sổ, xưng tácSơ thủy hóa liệt biểu cấu tạo hàm sổ.Hữu trứ giá chủng cấu tạo hàm sổ đích loại biệt tại thống nhất sơ thủy hóa đích thời hầu hội bị đặc biệt đối đãi.

Loại biệtstd::initializer_list<>Thị cá đệ nhất cấp đích C++11 tiêu chuẩn trình thức khố hình biệt. Nhiên nhi tha môn chỉ năng cú kinh do C++11 biên dịch khí thấu quá {} ngữ pháp đích sử dụng bị tĩnh thái địa cấu tạo. Giá cá liệt biểu nhất kinh cấu tạo tiện khả phục chế, tuy nhiên giá chỉ thị copy-by-reference. Sơ thủy hóa liệt biểu thị thường sổ; nhất đán bị kiến lập, kỳ thành viên quân bất năng bị cải biến, thành viên trung đích tư liêu dã bất năng cú bị biến động.

Nhân vi sơ thủy hóa liệt biểu thị chân thật hình biệt, trừ liễu loại biệt cấu tạo thức chi ngoại hoàn năng cú bị dụng tại kỳ tha địa phương. Chính quy đích hàm sổ năng cú sử dụng sơ thủy hóa liệt biểu tác vi hình tham. Lệ như:

voidFunctionName(std::initializer_list<float>list);

FunctionName({1.0f,-3.45f,-0.4f});

Tiêu chuẩn dung khí dã năng cú dĩ giá chủng phương thức sơ thủy hóa:

vector<string>v={"xyzzy","plugh","abracadabra"};
vector<string>v({"xyzzy","plugh","abracadabra"});
vector<string>v{"xyzzy","plugh","abracadabra"};// kiến hạ tiết “Thống nhất đích sơ thủy hóa”

Thống nhất đích sơ thủy hóa[Biên tập]

Tiêu chuẩn C++ tại sơ thủy hóa hình biệt phương diện hữu trứ hứa đa vấn đề. Sơ thủy hóa hình biệt hữu sổ chủng phương pháp, nhi thả giao hoán sử dụng thời bất hội đô sản sinh tương đồng kết quả. Truyện thống đích kiến cấu thức ngữ pháp, khán khởi lai tượng thị hàm thức tuyên cáo, nhi thả vi liễu năng sử biên dịch khí bất hội lộng thác tất tu thải thủ nhất ta bộ sậu. Chỉ hữu tập hợp thể hòa POD hình biệt năng cú bị tập hợp thức đích sơ thủy hóa ( sử dụngSomeType var = {/*stuff*/};).

C++11 tương hội đề cung nhất chủng thống nhất đích ngữ pháp sơ thủy hóa nhậm ý đích vật kiện, tha khoách sung liễu sơ thủy hóa xuyến liệt ngữ pháp:

structBasicStruct
{
intx;
floaty;
};

structAltStruct
{
AltStruct(int_x,float_y):x(_x),y(_y){}

private:
intx;
floaty;
};

BasicStructvar1{5,3.2f};
AltStructvar2{2,4.3f};

var1Đích sơ thủy hóa đích vận tác tựu như đồng C-style đích sơ thủy hóa xuyến liệt. Mỗi cá công khai đích biến sổ tương bị đối ứng ô sơ thủy hóa xuyến liệt đích trị cấp sơ thủy hóa. Ẩn thức hình biệt chuyển hoán hội tại nhu yếu đích thời hầu bị sử dụng, giá lí đích ẩn thức hình biệt chuyển hoán bất hội sản sinh phạm vi súc hạn ( narrowing ). Yếu thị bất năng cú chuyển hoán, biên dịch tiện hội thất bại. ( phạm vi súc hạn ( narrowing ): Chuyển hoán hậu đích hình biệt vô pháp biểu kỳ nguyên hình biệt. Như tương 32-bit đích chỉnh sổ chuyển hoán vi 16-bit hoặc 8-bit chỉnh sổ, hoặc thị phù điểm sổ chuyển hoán vi chỉnh sổ. )var2Đích sơ thủy hóa tắc thị giản đan địa hô khiếu kiến cấu thức.

Thống nhất đích sơ thủy hóa kiến cấu năng cú miễn trừ cụ thể chỉ định đặc định hình biệt đích tất yếu:

structIdString
{
std::stringname;
intidentifier;
};

IdStringvar3{"SomeName",4};

Cai ngữ pháp tương hội sử dụngconst char *Tham sổ sơ thủy hóastd::string.Nhĩ dã khả dĩ tố tượng hạ diện đích sự:

IdStringGetString()
{
return{"SomeName",4};// chú ý giá lí bất nhu yếu minh xác đích hình biệt
}

Thống nhất sơ thủy hóa bất hội thủ đại kiến cấu thức ngữ pháp. Nhưng nhiên hội hữu nhu yếu dụng đáo kiến cấu thức ngữ pháp đích thời hầu. Như quả nhất cá loại biệt ủng hữuSơ thủy hóa liệt biểu cấu tạo hàm sổ(TypeName(initializer_list<SomeType>);), nhi sơ thủy hóa xuyến liệt dữ cấu tạo hàm sổ đích tham sổ loại hình nhất trí, na ma tha bỉ kỳ tha hình thức đích kiến cấu thức đích ưu tiên quyền đô lai đích cao. C++11 bản bổn đíchstd::vectorTương hội hữu sơ thủy hóa xuyến liệt kiến cấu thức. Giá biểu kỳ:

std::vector<int>theVec{4};

Giá tương hội hô khiếu sơ thủy hóa xuyến liệt kiến cấu thức, nhi bất thị hô khiếustd::vectorChỉ tiếp thụ nhất cá xích thốn tham sổ sản sinh tương ứng xích thốn vector đích kiến cấu thức. Yếu sử dụng giá cá kiến cấu thức, sử dụng giả tất tu trực tiếp sử dụng tiêu chuẩn đích kiến cấu thức ngữ pháp.

Hình biệt thôi đạo[Biên tập]

Tại C++03 hòa C, sử dụng biến sổ tất tu minh xác đích chỉ xuất kỳ hình biệt. Nhiên nhi, tùy trứ mô bản hình biệt đích xuất hiện dĩ cậpMô bản siêu biên trìnhĐích kỹ xảo, mỗ vật đích hình biệt, đặc biệt thị hàm thức định nghĩa minh xác đích hồi phản hình biệt, tựu bất dung dịch biểu kỳ. Tại giá dạng đích tình huống hạ, tương trung gian kết quả trữ tồn ô biến sổ thị kiện khốn nan đích sự, khả năng hội nhu yếu tri đạo đặc định đích siêu biên trình trình thức khố đích nội bộ tình huống.

C++11 đề cung lưỡng chủng phương pháp hoãn giải thượng thuật sở ngộ đáo đích khốn nan. Thủ tiên, hữu bị minh xác sơ thủy hóa đích biến sổ khả dĩ sử dụngautoQuan kiện tự. Đối vu chỉ châm loại hình, thanh minh vi auto* hoặc giả auto thị nhất dạng đích. Đối vu dẫn dụng loại hình, tất tu sử dụng auto &. Giá hội y cư cai sơ thủy hóa tử ( initializer ) đích cụ thể hình biệt sản sinh biến sổ:

autointegralVariable=5;
autounsignedVariable=5UL;
autoptrToObject=newMyPackage::Object();

Tại thượng diện đích giản dịch lệ tử trung, trình tự viên hòa biên dịch khí đô năng khinh dịch phán đoạn xuất kỉ cá biến lượng đích loại hình. Nhi thông quá sử dụngULHậu chuế,unsignedVariableĐích loại hình tự động thành viunsigned long.Tối hậu, động thái sang kiến đối tượng thời dĩ kinh yếu tạinewHậu thâu nhập loại hình, thử thời sử dụngautoTựu năng tỉnh lược điệu luy chuế đíchMyPackage::Object*Thanh minh.

usingnamespacestd::placeholders;
autosomeStrangeCallableType=std::bind(&SomeFunction,_2,_1,someObject);
autootherVariable=5;

Thượng diện đích lệ tử trung thuyết minhautoHữu lợi vu C++ chi viện hàm sổ thức biên trình. Giá lí chú ýstd::bindDã thị C++11 tòngBoost C++ LibrariesTrung dẫn nhập đích mô bản hàm sổ.std::bindThật hiện liễu thiên hàm sổ, tại thượng diện đích lệ tử trung tha tương hàm sổSomeFunctionĐích đệ tam cá tham sổ bảng định visomeObject,Tịnh tương đệ nhất hòa đệ nhị cá tham sổ đích tại tham sổ liệt biểu trung đích thuận tự đảo chuyển, do thử sinh thành nhất cá hàm sổ đối tượngsomeStrangeCallableType.Cai hàm sổ đối tượng đích loại hình phi thường phục tạp, đãn biên dịch khí khước năng khinh dịch địa tương kỳ thôi đạo xuất lai.

Trừ thử chi ngoại,decltypeNăng cú bị dụng lai tại biên dịch kỳ quyết định nhất cá biểu kỳ thức đích hình biệt. Cử lệ:

intsomeInt;
decltype(someInt)otherIntegerVariable=5;

decltypeHòaautoNhất khởi sử dụng hội canh vi hữu dụng, nhân vi auto biến sổ đích hình biệt chỉ hữu biên dịch khí tri đạo. Nhiên nhidecltypeĐối ô na ta đại lượng vận dụng vận toán tử trọng tái hòa đặc hóa đích hình biệt đích trình thức mã đích biểu kỳ dã phi thường hữu dụng.

autoĐối ô giảm thiếu nhũng chuế đích trình thức mã dã ngận hữu dụng. Cử lệ nhi ngôn, trình thức viên bất dụng tả tượng hạ diện giá dạng:

for(vector<int>::const_iteratoritr=myvec.cbegin();itr!=myvec.cend();++itr)

Nhi khả dĩ dụng canh giản đoản đích

for(autoitr=myvec.cbegin();itr!=myvec.cend();++itr)

Do vu "myvec" thật hiện liễu begin/end điệt đại khí, C++11 đề cung liễu cơ vu phạm vi đíchforTuần hoàn lai đại phúc độ tỉnh lược đại mã.

for(auto&x:myvec)

Giá hạng soa dị tùy trứ trình thức viên khai thủy khảm sáo dung khí nhi canh vi hiển trứ, tuy nhiên tại giá chủng tình huống hạtypedefThị nhất cá giảm thiếu trình thức mã đích hảo phương pháp.

decltypeSở biểu kỳ đích hình biệt khả dĩ hòaautoThôi đạo xuất lai đích bất đồng.

#include<vector>

intmain()
{
conststd::vector<int>v(1);
autoa=v[0];// a vi int hình biệt
decltype(v[0])b=0;// b vi const int& hình biệt, tức
// std::vector<int>::operator[] ( size_type ) const đích hồi phản hình biệt
autoc=0;// c vi int hình biệt
autod=c;// d vi int hình biệt
decltype(c)e;// e vi int hình biệt, c thật thể đích hình biệt
decltype((c))f=e;// f vi int& hình biệt, nhân vi ( c ) thị tả trị
decltype(0)g;// g vi int hình biệt, nhân vi 0 thị hữu trị
}

Cơ vu phạm vi đích for hồi quyển[Biên tập]

forNgữ cú tương duẫn hứa giản đan đích phạm vi điệt đại:

intmy_array[5]={1,2,3,4,5};
// double the value of each element in my_array:
for(int&x:my_array)
{
x*=2;
}
// similar but also using type inference for array elements
for(auto&x:my_array){
x*=2;
}

Thượng diệnforThuật cú đích đệ nhất bộ phân định nghĩa bị dụng lai tố phạm vi điệt đại đích biến lượng, tựu tượng bị tuyên cáo tại nhất bàn for hồi quyển đích biến lượng nhất dạng, kỳ tác dụng vực cận chỉ ô hồi quyển đích phạm vi. Nhi tại ":" Chi hậu đích đệ nhị khu khối, đại biểu tương bị điệt đại đích phạm vi. Giá chủng for ngữ cú hoàn khả dĩ dụng vu C hình sổ tổ, sơ thủy hóa liệt biểu, hòa nhậm hà định nghĩa liễubegin()Hòaend()Lai phản hồi thủ vĩ điệt đại khí đích loại hình.

Lambda hàm thức dữ biểu kỳ thức[Biên tập]

Tại tiêu chuẩn C++, đặc biệt thị đương sử dụng C++ tiêu chuẩn trình thức khố diễn toán pháp hàm thức chư nhưsortHòafind,Sử dụng giả kinh thường hi vọng năng cú tại diễn toán pháp hàm thức hô khiếu đích phụ cận định nghĩa nhất cá lâm thời đích thuật bộ hàm thức ( hựu xưng vị từ hàm sổ, predicate function ). Do vu ngữ ngôn bổn thân duẫn hứa tại hàm thức nội bộ định nghĩa loại biệt, khả dĩ khảo lự sử dụng hàm sổ đối tượng, nhiên nhi giá thông thường kí ma phiền hựu nhũng chuế, dã trở ngại liễu trình thức mã đích lưu trình. Thử ngoại, tiêu chuẩn C++ bất duẫn hứa định nghĩa ô hàm thức nội bộ đích loại biệt bị dụng ô mô bản, sở dĩ tiền thuật đích tác pháp thị bất khả hành đích.

C++11 đốilambda( tứcNặc danh hàm sổ) đích chi viện khả dĩ giải quyết thượng thuật vấn đề.

Nhất cá lambda hàm thức khả dĩ dụng như hạ đích phương thức định nghĩa:

[](intx,inty){returnx+y;}

Giá cá bất cụ danh hàm thức đích hồi phản hình biệt thịdecltype(x+y).Chỉ hữu tại lambda hàm thức phù hợp "returnexpression"Đích hình thức hạ, tha đích hồi phản hình biệt tài năng bị hốt lược. Tại tiền thuật đích tình huống hạ, lambda hàm thức cận năng vi nhất cá thuật cú.

Tại nhất cá canh vi phục tạp đích lệ tử trung, hồi phản hình biệt khả dĩ bị minh xác đích chỉ định như hạ:

[](intx,inty)->int{intz=x+y;returnz+x;}

Bổn lệ trung, nhất cá tạm thời đích biến sổzBị kiến lập dụng lai trữ tồn trung gian kết quả. Như đồng nhất bàn đích hàm thức,zĐích trị bất hội bảo lưu đáo hạ nhất thứ cai bất cụ danh hàm thức tái thứ bị hô khiếu thời.

Như quả lambda hàm thức một hữu truyện hồi trị ( lệ nhưvoid), kỳ hồi phản hình biệt khả bị hoàn toàn hốt lược.

Định nghĩa tại dữ lambda hàm thức tương đồng tác dụng vực đích biến sổ tham khảo dã khả dĩ bị sử dụng. Giá chủng đích biến sổ tập hợp nhất bàn bị xưng tác closure (Bế bao).

[]// một hữu định nghĩa nhậm hà biến lượng. Sử dụng vị định nghĩa biến lượng hội dẫn phát thác ngộ.
[x,&y]// x dĩ truyện trị phương thức truyện nhập ( mặc nhận ), y dĩ dẫn dụng phương thức truyện nhập.
[&]// nhậm hà bị sử dụng đáo đích ngoại bộ biến lượng đô ẩn thức địa dĩ dẫn dụng phương thức gia dĩ dẫn dụng.
[=]// nhậm hà bị sử dụng đáo đích ngoại bộ biến lượng đô ẩn thức địa dĩ truyện trị phương thức gia dĩ dẫn dụng.
[&,x]// x hiển thức địa dĩ truyện trị phương thức gia dĩ dẫn dụng. Kỳ dư biến lượng dĩ dẫn dụng phương thức gia dĩ dẫn dụng.
[=,&z]// z hiển thức địa dĩ dẫn dụng phương thức gia dĩ dẫn dụng. Kỳ dư biến lượng dĩ truyện trị phương thức gia dĩ dẫn dụng.

closure bị định nghĩa dữ sử dụng như hạ:

std::vector<int>someList;
inttotal=0;
std::for_each(someList.begin(),someList.end(),[&total](intx){
total+=x;
});
std::cout<<total;

Thượng lệ khả kế toánsomeListNguyên tố đích tổng hòa tịnh tương kỳ ấn xuất. Biến sổtotalThị lambda hàm thức closure đích nhất bộ phân, đồng thời tha dĩ dẫn dụng phương thức bị truyện đệ nhập vị từ hàm sổ, nhân thử tha đích trị khả bị lambda hàm thức cải biến.

Nhược bất sử dụng dẫn dụng đích phù hào&,Tắc đại biểu biến sổ dĩ truyện trị đích phương thức truyện nhập lambda hàm thức. Nhượng sử dụng giả khả dĩ dụng giá chủng biểu kỳ pháp minh xác khu phân biến sổ truyện đệ đích phương pháp: Truyện trị, hoặc thị truyện tham khảo. Do ô lambda hàm thức khả dĩ bất tại bị tuyên cáo đích địa phương tựu địa sử dụng ( như trí nhậpstd::functionVật kiện trung ); Giá chủng tình huống hạ, nhược biến sổ thị dĩ truyện tham khảo đích phương thức liên kết đáo closure trung, thị vô ý nghĩa thậm chí thị nguy hiểm đích hành vi.

Nhược lambda hàm thức chỉ tại định nghĩa đích tác dụng vực sử dụng, tắc khả dĩ dụng[&]Tuyên cáo lambda hàm thức, đại biểu sở hữu dẫn dụng đáo stack trung đích biến sổ, đô thị dĩ tham khảo đích phương thức truyện nhập, bất tất nhất nhất hiển thức chỉ minh:

std::vector<int>someList;
inttotal=0;
std::for_each(someList.begin(),someList.end(),[&](intx){
total+=x;
});

Biến sổ truyện nhập lambda hàm thức đích phương thức khả năng tùy thật tố hữu sở biến hóa, nhất bàn kỳ vọng đích phương pháp thị lambda hàm thức năng bảo lưu kỳ tác dụng vực hàm thức đích stack chỉ tiêu, tạ thử tồn thủ khu vực biến sổ.

Nhược sử dụng[=]Nhi phi[&],Tắc đại biểu sở hữu đích tham khảo đích biến sổ đô thị truyện trị sử dụng.

Đối ô bất đồng đích biến sổ, truyện trị hoặc truyện tham khảo khả dĩ hỗn hòa sử dụng. Bỉ phương thuyết, sử dụng giả khả dĩ nhượng sở hữu đích biến sổ đô dĩ truyện tham khảo đích phương thức sử dụng, đãn đái hữu nhất cá truyện trị sử dụng đích biến sổ:

inttotal=0;
intvalue=5;
[&,value](intx){total+=(x*value);};

totalThị truyện tham khảo đích phương thức truyện nhập lambda hàm thức, nhivalueTắc thị truyện trị.

Nhược nhất cá lambda hàm thức bị định nghĩa ô mỗ loại biệt đích thành viên hàm thức trung, tắc khả dĩ sử dụng cai loại biệt vật kiện đích tham khảo, tịnh thả năng cú tồn thủ kỳ nội bộ đích thành viên.

[](SomeType*typePtr){typePtr->SomePrivateMemberFunction();};

Giá chỉ hữu đương cai lambda hàm thức sang kiến đích tác dụng vực thị tạiSomeTypeĐích thành viên hàm thức nội bộ thời tài năng vận tác.

Tại thành viên hàm thức trung chỉ thiệp vật kiện đích this chỉ tiêu, tất tu yếu hiển thức đích truyện nhập lambda hàm thức, phủ tắc thành viên hàm thức trung đích lambda hàm thức vô pháp sử dụng nhậm hà cai vật kiện đích biến sổ hoặc hàm thức.

[this](){this->SomePrivateMemberFunction();};

Nhược thị lambda hàm thức sử dụng [&] hoặc thị [=] đích hình thức,thisTại lambda hàm thức tức vi khả kiến.

lambda hàm thức thị biên dịch khí tòng chúc hình biệt đích hàm thức vật kiện; giá chủng hình biệt danh xưng chỉ hữu biên dịch khí tự kỷ năng cú sử dụng. Như quả sử dụng giả hi vọng tương lambda hàm thức tác vi tham sổ truyện nhập, cai hình biệt tất tu thị mô bản hình biệt, hoặc thị tất tu sang kiến nhất cástd::functionKhứ hoạch thủ lambda đích trị. Sử dụngautoQuan kiện tự nhượng ngã môn năng cú trữ tồn lambda hàm thức:

automyLambdaFunc=[this](){this->SomePrivateMemberFunction();};
automyOnheapLambdaFunc=newauto([=]{/*...*/});

lambda hàm sổ án chiếu trị phương thức bộ hoạch đích hoàn cảnh trung đích biến lượng, thị bất năng tu cải đích. Phủ tắc, biên dịch khí hội báo thác: “by copy capture cannot be modified in a non-mutable lambda”. Kỳ trị thị lambda hàm sổ định nghĩa thời bộ hoạch đích trị, bất tái cải biến. Như quả tại lambda hàm sổ định nghĩa thời gia thượng mutable quan kiện tự, tắc cai bộ hoạch đích truyện trị biến lượng thị khả dĩ tu cải đích, đối đồng nhất cá lambda hàm sổ đích tùy hậu điều dụng dã hội luy gia ảnh hưởng cai bộ hoạch đích truyện trị biến lượng, đãn đối ngoại giới hoàn cảnh trung bị bộ hoạch đích na cá biến lượng vô ảnh hưởng. Lệ như:

#include<iostream>
usingnamespacestd;
intmain()
{
size_tt=9;
autof=[t]()mutable{returnt;};
cout<<f()<<endl;
t=100;
cout<<f()<<endl;
cout<<"t:"<<t<<endl;
return0;
}

Phản hồi hình biệt hậu trí đích hàm thức tuyên cáo[Biên tập]

Tiêu chuẩn CHàm thức tuyên cáo ngữ pháp đối ô C ngữ ngôn dĩ kinh túc cú. Diễn hóa tự C đích C++ trừ liễu C đích cơ sở ngữ pháp ngoại, hựu khoách sung ngạch ngoại đích ngữ pháp. Nhiên nhi, đương C++ biến đắc canh vi phục tạp thời, tha bạo lộ xuất hứa đa ngữ pháp thượng đích hạn chế, đặc biệt thị châm đối hàm sổ mô bản đích tuyên cáo. Hạ diện đích phạm lệ, bất thị hợp pháp đích C++03:

template<typenameLHS,typenameRHS>
RetAddingFunc(constLHS&lhs,constRHS&rhs){returnlhs+rhs;}//Ret đích hình biệt tất tu thị (lhs+rhs) đích hình biệt

RetĐích hình biệt doLHSDữRHSTương gia chi hậu đích kết quả đích hình biệt lai quyết định. Tức sử sử dụng C++11 tân gia nhập đíchdecltypeLai tuyên cáoAddingFuncĐích phản hồi hình biệt, y nhiên bất khả hành.

template<typenameLHS,typenameRHS>
decltype(lhs+rhs)AddingFunc(constLHS&lhs,constRHS&rhs){returnlhs+rhs;}// bất hợp pháp đích C++11

Bất hợp pháp đích nguyên nhân tại ôlhsCậprhsTại định nghĩa tiền tựu xuất hiện liễu. Trực đáo phẩu tích khí giải tích đáo hàm sổ nguyên hình đích hậu bán bộ,lhsDữrhsTài thị hữu ý nghĩa đích.

Châm đối thử vấn đề, C++11 dẫn tiến nhất chủng tân đích hàm sổ định nghĩa dữ thanh minh đích ngữ pháp:

template<typenameLHS,typenameRHS>
autoAddingFunc(constLHS&lhs,constRHS&rhs)->decltype(lhs+rhs){returnlhs+rhs;}

Giá chủng ngữ pháp dã năng sáo dụng đáo nhất bàn đích hàm sổ định nghĩa dữ thanh minh:

structSomeStruct
{
autoFuncName(intx,inty)->int;
};

autoSomeStruct::FuncName(intx,inty)->int
{
returnx+y;
}

Quan kiện tựautoĐích sử dụng dữ kỳ tại tự động hình biệt thôi đạo đại biểu bất đồng đích ý nghĩa.

Vật kiện kiến cấu đích cải lương[Biên tập]

Tại C++03 trung, kiến cấu thức bất năng hô khiếu kỳ tha đích kiến cấu thức; mỗi cá kiến cấu thức tất tu tự kỷ sơ thủy hóa sở hữu đích thành viên hoặc thị hô khiếu nhất cá cộng dụng đích thành viên hàm thức. Cơ sở loại biệt đích kiến cấu thức bất năng cú trực tiếp tác vi diễn sinh loại biệt đích kiến cấu thức; tựu toán cơ loại đích kiến cấu thức dĩ kinh túc cú, mỗi cá diễn thân đích loại biệt nhưng tất tu thật tố tự kỷ đích kiến cấu thức. Loại biệt trung non-constant đích tư liêu thành viên bất năng cú tại tuyên cáo đích địa phương bị sơ thủy hóa, tha môn chỉ năng tại kiến cấu thức trung bị sơ thủy hóa. C++11 tương hội đề cung giá ta vấn đề đích giải quyết phương án.

C++11 duẫn hứa kiến cấu thức hô khiếu kỳ tha kiến cấu thức, giá chủng tố pháp xưng tác ủy thác ( delegation ) cấu tạo. Cận cận chỉ nhu yếu gia nhập thiếu lượng đích đại mã, tựu năng nhượng sổ cá kiến cấu thức chi gian đạt thành công năng phục dụng ( reuse ).JavaDĩ cậpC♯Đô hữu đề cung giá chủng công năng. C++11 ngữ pháp như hạ:

classSomeType{
intnumber;
stringname;
SomeType(inti,string&s):number(i),name(s){}
public:
SomeType():SomeType(0,"invalid"){}
SomeType(inti):SomeType(i,"guest"){}
SomeType(string&s):SomeType(1,s){PostInit();}
};

classDCExcept{
public:
DCExcept(doubled)
try:DCExcept(1,d){
cout<<"run the body."<<endl;
}catch(...){
cout<<"caught exception."<<endl;
}
private:
DCExcept(inti,doubled){
cout<<"going to throw"<<endl;
throw0;
}

inttype;
doubledate;
};

C++03 trung, kiến cấu thức chấp hành kết thúc đại biểu vật kiện kiến cấu hoàn thành; Nhi duẫn hứa sử dụng chuyển tiếp kiến cấu thức đích C++11 tắc thị dĩ "Nhậm hà" nhất cá kiến cấu thức kết thúc đại biểu kiến cấu hoàn thành. Sử dụng ủy thác đích kiến cấu thức, hàm thức bổn thể trung đích đại mã tương ô bị ủy thác đích kiến cấu thức hoàn thành hậu kế tục chấp hành ( như thượng lệ đíchPostInit()). Nhược cơ loại sử dụng liễu ủy thác kiến cấu thức, tắc diễn sinh loại biệt đích kiến cấu thức hội tại "Sở hữu" cơ để loại biệt đích kiến cấu thức đô hoàn thành hậu, tài hội khai thủy chấp hành.

C++11 duẫn hứa diễn sinh loại biệt thủ động kế thừa cơ để loại biệt đích kiến cấu thức, biên dịch khí khả dĩ sử dụng cơ để loại biệt đích kiến cấu thức hoàn thành diễn sinh loại biệt đích kiến cấu. Nhi tương cơ loại đích kiến cấu thức đái nhập diễn sinh loại đích động tác, vô pháp tuyển trạch tính địa bộ phân đái nhập, yếu bất tựu thị kế thừa cơ loại toàn bộ đích kiến cấu thức, yếu bất tựu thị nhất cá đô bất kế thừa ( bất thủ động đái nhập ). Thử ngoại, nhược khiên thiệp đáo đa trọng kế thừa, tòng đa cá cơ để loại biệt kế thừa nhi lai đích kiến cấu thức bất khả dĩ hữu tương đồng đích hàm thức thiêm danh ( signature ). Nhi diễn sinh loại biệt đích tân gia nhập đích kiến cấu thức dã bất khả dĩ hòa kế thừa nhi lai đích cơ để kiến cấu thức hữu tương đồng đích hàm thức thiêm danh, nhân vi giá tương đương ô trọng phục tuyên cáo.

Ngữ pháp như hạ:

classBaseClass
{
public:
BaseClass(intiValue);
};

classDerivedClass:publicBaseClass
{
public:
usingBaseClass::BaseClass;
};

Thử ngữ pháp đẳng đồng ô DerivedClass tuyên cáo nhất cáDerivedClass(int)Đích kiến cấu thức. Đồng thời dã nhân vi DerivedClass hữu liễu nhất cá kế thừa nhi lai đích kiến cấu thức, sở dĩ bất hội hữu dự thiết kiến cấu thức.

Lánh nhất phương diện, C++11 khả dĩ sử dụng dĩ hạ đích ngữ pháp hoàn thành sổ cư thành viên đích nguyên địa ( in-place) sơ thủy hóa:

classSomeClass
{
public:
SomeClass(){}
explicitSomeClass(intiNewValue):iValue(iNewValue){}

private:
intiValue=5;
};

Nhược thị kiến cấu thức trung một hữu thiết địnhiValueĐích sơ thủy trị, tắc hội thải dụng loại biệt định nghĩa trung đích thành viên sơ thủy hóa, lệnhiValueSơ trị vi 5. Tại thượng lệ trung, vô tham sổ bản bổn đích kiến cấu thức,iValueTiện thải dụng dự thiết sở định nghĩa đích trị; nhi đái hữu nhất cá chỉnh sổ tham sổ đích kiến cấu thức tắc hội dĩ chỉ định đích trị hoàn thành sơ thủy hóa.

Thành viên sơ thủy hóa trừ liễu thượng lệ trung đích phú trị hình thức ( sử dụng "=" ), dã khả dĩ thải dụng kiến cấu thức dĩ cập thống nhất hình đích sơ thủy hóa ( uniform initialization, sử dụng "{}" ).

Hiển thức hư hàm sổ trọng tái[Biên tập]

Tại C++ lí, tại tử loại biệt trung dung dịch ý ngoại đích trọng tái hư hàm sổ. Cử lệ lai thuyết:

structBase{
virtualvoidsome_func();
};

structDerived:Base{
voidsome_func();
};

Derived::some_funcĐích chân thật ý đồ vi hà? Trình tự viên chân đích thí đồ trọng tái cai hư hàm sổ, hoặc giá chỉ thị ý ngoại? Giá dã khả năng thịbaseĐích duy hộ giả tại kỳ trung gia nhập liễu nhất cá dữDerived::some_funcĐồng danh thả ủng hữu tương đồng thiêm danh đích hư hàm thức.

Lánh nhất cá khả năng đích trạng huống thị, đương cơ loại trung đích hư hàm thức đích thiêm danh bị cải biến, tử loại trung ủng hữu cựu thiêm danh đích hàm thức tựu bất tái trọng tái cai hư hàm thức. Nhân thử, như quả trình tự viên vong ký tu cải sở hữu tử loại, chấp hành kỳ tương bất hội chính xác hô khiếu đáo cai hư hàm thức chính xác đích thật hiện.

C++11 tương gia nhập chi viện dụng lai phòng chỉ thượng thuật tình hình sản sinh, tịnh tại biên dịch kỳ nhi phi chấp hành kỳ bộ hoạch thử loại thác ngộ. Vi bảo trì hướng hậu kiêm dung, thử công năng tương thị tuyển trạch tính đích. Kỳ ngữ pháp như hạ:

structBase{
virtualvoidsome_func(float);
};

structDerived:Base{
virtualvoidsome_func(int)override;// thác ngộ cách thức: Derive::some_func tịnh một hữu override Base::some_func
virtualvoidsome_func(float)override;// OK: Hiển thức cải tả
};

Biên dịch khí hội kiểm tra cơ để loại biệt thị phủ tồn tại nhất hư nghĩ hàm sổ, dữ diễn sinh loại biệt trung đái hữu thanh minhoverrideĐích hư nghĩ hàm sổ, hữu tương đồng đích hàm sổ thiêm danh ( signature ); nhược bất tồn tại, tắc hội hồi báo thác ngộ.

C++11 dã đề cung chỉ kỳ tựfinal,Dụng lai tị miễn loại biệt bị kế thừa, hoặc thị cơ để loại biệt đích hàm sổ bị cải tả:

structBase1final{};

structDerived1:Base1{};// thác ngộ cách thức: class Base1 dĩ tiêu minh vi final

structBase2{
virtualvoidf()final;
};

structDerived2:Base2{
voidf();// thác ngộ cách thức: Base2::f dĩ tiêu minh vi final
};

Dĩ thượng đích phạm lệ trung,virtual void f() final;Thanh minh nhất tân đích hư nghĩ hàm sổ, đồng thời dã biểu minh cấm chỉ diễn sinh hàm sổ cải tả nguyên hư nghĩ hàm sổ.

overrideDữfinalĐô bất thị ngữ ngôn quan kiện tự ( keyword ), chỉ hữu tại đặc định đích vị trí tài hữu đặc biệt hàm ý, kỳ tha địa phương nhưng cựu khả dĩ tác vi nhất bàn chỉ kỳ tự ( identifier ) sử dụng.

Không chỉ tiêu[Biên tập]

Tảo tại 1972 niên, C ngữ ngôn đản sinh đích sơ kỳ, thường sổ0Đái hữu thường sổ cập không chỉ tiêu đích song trọng thân phân. C sử dụng preprocessor macroNULLBiểu kỳ không chỉ tiêu, nhượngNULLCập0Phân biệt đại biểu không chỉ tiêu cập thường sổ 0. NULLKhả bị định nghĩa vi((void*)0)Hoặc thị0.

C++ tịnh bất thải dụng C đích quy tắc, bất duẫn hứa tươngvoid*Ẩn thức chuyển hoán vi kỳ tha hình biệt đích chỉ tiêu. Vi liễu sử đại mãchar* c = NULL;Năng thông quá biên dịch, NULL chỉ năng định nghĩa vi0.Giá dạng đích quyết định sử đắc hàm sổ đa tái vô pháp khu phân đại mã đích ngữ ý:

voidfoo(char*);
voidfoo(int);
voidfoo(nullptr_t);

C++ kiến nghịNULLỨng đương định nghĩa vi0,Sở dĩfoo(NULL);Tương hội hô khiếufoo(int),Giá tịnh bất thị trình tự viên tưởng yếu đích hành vi, dã vi phản liễu đại mã đích trực quan tính. 0 đích kỳ nghĩa tại thử xử tạo thành khốn nhiễu.

C++11 dẫn nhập liễu tân đích quan kiện tự lai đại biểu không chỉ tiêu thường sổ:nullptr,Tương không chỉ tiêu hòa chỉnh sổ 0 đích khái niệm sách khai. nullptrĐích hình biệt vinullptr_t,Năng ẩn thức chuyển hoán vi nhậm hà chỉ tiêu hoặc thị thành viên chỉ tiêu đích hình biệt, dã năng hòa tha môn tiến hành tương đẳng hoặc bất đẳng đích bỉ giác. NhinullptrBất năng ẩn thức chuyển hoán vi chỉnh sổ, dã bất năng hòa chỉnh sổ tố bỉ giác.

Vi liễu hướng hạ tương dung,0Nhưng khả đại biểu không chỉ tiêu thường sổ.

char*pc=nullptr;// OK
int*pi=nullptr;// OK
inti=nullptr;// error
boolb=nullptr;// OK

foo(pc);// điều dụng foo(char *), nhi bất thị foo(int);
foo(nullptr);// điều dụng foo(nullptr_t);

Trị đắc chú ý đích thị thượng diện đích foo(nullptr_t) bị ẩn thức chuyển hoán vi foo(char *) chỉ hội phát sinh tại cai hàm sổ bất tồn tại kỳ tha đích chỉ châm loại hình trọng tái ( bỉ như foo(int*), foo(MyClass*) đẳng ) thời hầu, phủ tắc tựu hội sản sinh kỳ nghĩa thác ngộ ( khả dĩ thông quá hiển kỳ thanh minh nhất cá foo(nullptr_t) lai tiêu trừ cai kỳ nghĩa ). Tại C++11 đích tiêu chuẩn loại hình đầu văn kiện trung, nullptr_t loại hình ứng cai bị thanh minh vi:

typedefdecltype(nullptr)nullptr_t;

Nhi bất thị:

typedefintnullptr_t;// C++11 chi tiền đích tiêu chuẩn nhu yếu định nghĩa NULL vi 0
typedefvoid*nullptr_t;// ANSI C định nghĩa NULL vi ((void*)0)

Cường hình biệt liệt cử[Biên tập]

Tại C++03 trung, liệt cử hình biệt bất thị hình biệt an toàn đích. Liệt cử hình biệt bị thị vi chỉnh sổ, giá sử đắc lưỡng chủng bất đồng đích liệt cử hình biệt chi gian khả dĩ tiến hành bỉ giác. C++03 duy nhất đề cung đích an toàn cơ chế thị nhất cá chỉnh sổ hoặc nhất cá mai cử hình trị bất năng ẩn thức chuyển hoán đáo lánh nhất cá liệt cử biệt hình. Thử ngoại, liệt cử sở sử dụng chỉnh sổ hình biệt cập kỳ đại tiểu đô do thật tác phương pháp định nghĩa, giai vô pháp minh xác chỉ định. Tối hậu, liệt cử đích danh xưng toàn sổ bạo lộ ô mai cử loại hình đíchTác dụng vựcTrung, nhân thử lưỡng cá bất đồng đích liệt cử, bất khả dĩ hữu tương đồng đích liệt cử danh. ( hảo bỉenum Side{ Right, Left };Hòaenum Thing{ Wrong, Right };Bất năng nhất khởi sử dụng. )

C++11 dẫn tiến liễu nhất chủng đặc biệt đích "Liệt cử loại", khả dĩ tị miễn thượng thuật đích vấn đề. Sử dụngenum classĐích ngữ pháp lai tuyên cáo:

enumclassmyEnumeration
{
Val1,
Val2,
Val3=100,
Val4/* = 101 */,
};

Thử chủng liệt cử vi hình biệt an toàn đích. Liệt cử loại biệt bất năng ẩn thức địa chuyển hoán vi chỉnh sổ; dã vô pháp dữ chỉnh sổ sổ trị tố bỉ giác. ( biểu kỳ thứcEnumeration::Val4 == 101Hội xúc phát biên dịch kỳ thác ngộ ).

Liệt cử loại biệt sở sử dụng hình biệt tất tu hiển thức chỉ định. Tại thượng diện đích phạm lệ trung, sử dụng đích thị dự thiết hình biệtint,Đãn dã khả dĩ chỉ định kỳ tha hình biệt:

enumclassEnum2:unsignedint{Val1,Val2};

Liệt cử loại biệt đíchTác dụng vực( scoping ) bất bao hàm mai cử trị đích danh tự. Sử dụng mai cử trị đích danh tự, tất tu minh xác hạn định vu kỳ sở chúc đích mai cử loại hình. Lệ như, tiền thuật liệt cử loại biệt Enum2,Enum2::Val1Thị hữu ý nghĩa đích biểu kỳ pháp, nhi đan độc đíchVal1Tắc phủ.

Thử ngoại, C++11 duẫn hứa vi truyện thống đích liệt cử chỉ định sử dụng hình biệt:

enumEnum3:unsignedlong{Val1=1,Val2};

Liệt cử danhVal1Định nghĩa ô Enum3 đích liệt cử phạm vi trung ( Enum3::Val1 ), đãn vi liễu hướng hậu tương dung tính, Val1Nhưng nhiên khả dĩ ô sở chúc mai cử loại hình sở tại đích tác dụng vực trung đan độc sử dụng.

Tại C++11 trung, liệt cử loại biệt đích tiền trí thanh minh ( forward declaration ) dã thị khả hành đích, chỉ yếu sử dụng khả chỉ định hình biệt đích tân thức liệt cử tức khả. Chi tiền đích C++ vô pháp tả xuất liệt cử đích tiền trí thanh minh, thị do ô vô pháp xác định liệt cử biến sổ sở chiêm đích không gian đại tiểu, C++11 giải quyết liễu giá cá vấn đề:

enumEnum1;// C++ dữ C++11 trung bất hợp pháp; vô pháp phán biệt đại tiểu
enumEnum2:unsignedint;// hợp pháp đích C++11
enumclassEnum3;// hợp pháp đích C++11, liệt cử loại biệt sử dụng dự thiết hình biệt int
enumclassEnum4:unsignedint;// hợp pháp đích C++11
enumEnum2:unsignedshort;// bất hợp pháp đích C++11, Enum2 dĩ bị thanh minh vi unsigned int

Giác quát hào[Biên tập]

C++03 đích phẩu tích khí nhất luật tương ">>" thị vi hữu di vận toán tử. Đãn tại khảm sáo dạng bản định nghĩa thức trung, tuyệt đại đa sổ đích tràng hợp kỳ thật đô đại biểu lưỡng cá liên tục hữu giác quát hào. Vi liễu tị miễn phẩu tích khí ngộ phán, soạn mã thời bất năng bả hữu giác quát hào liên trứ tả.

C++11 biến canh liễu phẩu tích khí đích giải độc quy tắc; đương ngộ đáo liên tục đích hữu giác quát hào thời, hội tại hợp lý đích tình huống hạ tương hữu tiêm quát hào giải tích vi dạng bản dẫn sổ đích kết thúc phù hào. Cấp sử dụng>,>=,>>Đích biểu đạt thức gia thượng viên quát hào, khả dĩ tị miễn kỳ dữ viên quát hào ngoại bộ đích tả tiêm quát hào tương thất phối:

template<boolbTest>classSomeType;
std::vector<SomeType<1>2>>x1;// giải độc vi std::vector of "SomeType<true> 2>",
// phi pháp đích biểu kỳ thức, chỉnh sổ 1 bị chuyển hoán vi bool hình biệt true
std::vector<SomeType<(1>2)>>x1;// giải độc vi std::vector of "SomeType<false>",
// hợp pháp đích C++11 biểu kỳ thức, (1>2) bị chuyển hoán vi bool hình biệt false

Hiển thức hình biệt chuyển hoán tử[Biên tập]

C++98 dẫn nhập liễu quan kiện tựexplicitLai tị miễn dụng hộ tự định đích đan dẫn sổ kiến cấu thức bị đương thành ẩn thức hình biệt chuyển hoán tử. Đãn thị, khước một hữu hạn chế minh xác định nghĩa đích loại hình chuyển hoán hàm sổ. Bỉ phương thuyết, nhất cá smart pointer loại biệt cụ hữu nhất cáoperator bool(),Bị định nghĩa thành nhược cai smart pointer bất vi null tắc truyện hồi true, phản chi truyện hồi false. Ngộ đáo giá dạng đích đại mã thời:if(smart_ptr_variable),Biên dịch khí khả dĩ tạ dooperator bool()Ẩn thức chuyển hoán thành bố lâm trị, hòa trắc thí nguyên sinh chỉ tiêu đích phương pháp nhất dạng. Đãn thị giá loại ẩn thức chuyển hoán đồng dạng dã hội phát sinh tại phi dự kỳ chi xử. Do ô C++ đíchboolHình biệt dã thị toán thuật hình biệt, năng ẩn thức hoán vi chỉnh sổ thậm chí thị phù điểm sổ. Nã vật kiện chuyển hoán xuất đích bố lâm trị tố bố lâm vận toán dĩ ngoại đích sổ học vận toán, vãng vãng bất thị trình tự viên tưởng yếu đích.

Tại C++11 trung, quan kiện tựexplicitTu sức phù dã năng sáo dụng đáo hình biệt chuyển hoán hàm sổ thượng. Như đồng kiến cấu thức nhất dạng, tha năng tị miễn hình biệt chuyển hoán hàm sổ bị ẩn thức chuyển hoán điều dụng. Đãn C++11 đặc biệt chỉ định, tạiifĐiều kiện thức, hồi quyển, la tập vận toán đẳng nhu yếu bố lâm trị đích địa phương, tương kỳ tác vi hiển thức loại hình chuyển hoán, nhân thử tức sử đối ứng đích loại hình chuyển hoán hàm sổ bị explicit tu sức dã khả dĩ điều dụng. Giá chủ yếu vi liễu giải quyếtsafe bool(Hiệt diện tồn đương bị phân,Tồn vuHỗ liên võng đương án quán) vấn đề.

Mô bản đích biệt danh[Biên tập]

Tại tiến nhập giá cá chủ đề chi tiền, các vị ứng cai tiên lộng thanh sở “Mô bản” hòa “Hình biệt” bổn chất thượng đích bất đồng. class template ( loại biệt mô bản, thị mô bản ) thị dụng lai sản sinh template class ( mô bản loại biệt, thị hình biệt ). Tại C++03 trung,typedefKhả định nghĩa mô bản loại biệt nhất cá tân đích hình biệt danh xưng, đãn thị bất năng cú sử dụngtypedefLai định nghĩa mô bản đích biệt danh. Cử lệ lai thuyết:

template<typenamefirst,typenamesecond,intthird>
classSomeType;

template<typenamesecond>
typedefSomeType<OtherType,second,5>TypedefName;// tại C++03 thị bất hợp pháp đích

Giá bất năng cú thông quá biên dịch.

Vi liễu định nghĩa mô bản đích biệt danh, C++11 tương hội tăng gia dĩ hạ đích ngữ pháp:

template<typenamefirst,typenamesecond,intthird>
classSomeType;

template<typenamesecond>
usingTypedefName=SomeType<OtherType,second,5>;

usingDã năng tại C++11 trung định nghĩa nhất bàn hình biệt đích biệt danh, đẳng đồngtypedef:

typedefvoid(*PFD)(double);// truyện thống ngữ pháp
usingPFD=void(*)(double);// tân tăng ngữ pháp

Mô bản tham sổ đích khuyết tỉnh trị[Biên tập]

C++98 chi trì loại mô bản đích mô bản tham sổ mặc nhận trị, bất chi trì hàm sổ mô bản đích mô bản tham sổ mặc nhận trị. C++11 khả dĩ chi trì hàm sổ mô bản đích mô bản tham sổ mặc nhận trị. Loại mô bản đích mô bản tham sổ mặc nhận trị nhu yếu tòng hữu đáo tả y thứ xuất hiện; hàm sổ mô bản đích mặc nhận mô bản tham sổ một hữu thử ước thúc.

voidDefParm(intm=3){}// c++98 biên dịch thông quá, c++11 biên dịch thông quá

template<typenameT=int>
classDefClass{};// c++98 biên dịch thông quá, c++11 biên dịch thông quá

template<typenameT=int>
voidDefTempParm(){};// c++98 biên dịch thất bại, c++11 biên dịch thông quá


// dĩ hạ vi C++11 biên dịch:
template<typenameT1,typenameT2=int>
classDefClass1{};

template<typenameT1=int,typenameT2>
classDefClass2{};// ERROR: Vô pháp thông quá biên dịch: Nhân vi mô bản tham sổ đích mặc nhận trị một hữu tuân tuần “Do hữu vãng tả” đích quy tắc

template<typenameT,inti=0>
classDefClass3{};

template<inti=0,typenameT>
classDefClass4{};// ERROR: Vô pháp thông quá biên dịch: Nhân vi mô bản tham sổ đích mặc nhận trị một hữu tuân tuần “Do hữu vãng tả” đích quy tắc

template<typenameT1=int,typenameT2>
voidDefFunc1(T1a,T2b){};// OK hàm sổ mô bản bất dụng tuân tuần “Do hữu vãng tả” đích quy tắc

template<inti=0,typenameT>
voidDefFunc2(Ta){};// OK hàm sổ mô bản bất dụng tuân tuần “Do hữu vãng tả” đích quy tắc

// thông thường, như quả năng cú tòng hàm sổ thật tham trung thôi đạo xuất loại hình đích thoại, na ma mặc nhận mô bản tham sổ tựu bất hội bị sử dụng, phản chi, mặc nhận mô bản tham sổ tắc khả năng hội bị sử dụng:
template<classT,classU=double>
voidf(Tt=0,Uu=0){};
voidg()
{
f(1,'c');// f<int, char>(1, 'c')
f(1);// f<int, double>(1, 0), sử dụng liễu mặc nhận mô bản tham sổ double
f();// thác ngộ: T vô pháp bị thôi đạo xuất lai
f<int>();// f<int, double>(0, 0), sử dụng liễu mặc nhận mô bản tham sổ double
f<int,char>();// f<int, char>(0, 0)
}

Vô hạn chế đích unions[Biên tập]

Tại C++03 trung, tịnh phi nhậm ý đích hình biệt đô năng tố vi union đích thành viên. Bỉ phương thuyết, đái hữu non-trivial kiến cấu thức đích hình biệt tựu bất năng thị union đích thành viên. Tại tân đích tiêu chuẩn lí, di trừ liễu sở hữu đối union đích sử dụng hạn chế, trừ liễu kỳ thành viên nhưng nhiên bất năng thị dẫn dụng hình biệt. Giá nhất cải biến sử đắc union canh cường đại, canh hữu dụng, dã dịch ô sử dụng.[2]

Đãn thị như quả union thành viên cụ hữu phi bình phàm đíchĐặc thù thành viên hàm sổ(Hiệt diện tồn đương bị phân,Tồn vuHỗ liên võng đương án quán), tắc biên dịch khí bất hội vi union sinh thành đối ứng đích đặc thù thành viên hàm sổ, tất tu thủ công định nghĩa.

Dĩ hạ vi C++11 trung union sử dụng đích giản đan phạm lệ:

structPoint
{
Point(){}
Point(intx,inty):x_(x),y_(y){}
intx_,y_;
};
unionU
{
intz;
doublew;
Pointp;// tại C++03 trung thị bất hợp pháp ( point hữu nhất non-trivial kiến cấu thức ), đãn thị tại C++11 thị hợp pháp đích
U(){}// do vu Point thành viên đích tồn tại, tất tu yếu định nghĩa nhất cá cấu tạo hàm sổ
U(constPoint&pt):p(pt){}// thông quá sơ thủy hóa liệt biểu cấu tạo Point đối tượng
U&operator=(constPoint&pt){new(&p)Point(pt);return*this;}// thông quá nguyên địa new phương thức phú trị cấu tạo Point đối tượng
};

Giá nhất cải biến cận phóng khoan union đích sử dụng hạn chế, bất hội ảnh hưởng kí hữu đích cựu đại mã.

Hạch tâm ngữ ngôn năng lực đích đề thăng[Biên tập]

Giá ta đặc tính nhượng C++ ngữ ngôn năng cú tố nhất ta dĩ tiền tố bất đáo đích, hoặc giả cực kỳ phục tạp đích, hoặc giả nhu cầu nhất ta bất khả di thực đích khố đích sự tình.

Khả biến tham sổ mô bản[Biên tập]

Tại C++11 chi tiền, bất luận thị loại mô bản hoặc thị hàm thức mô bản, đô chỉ năng án kỳ bị thanh minh thời sở chỉ định đích dạng tử, tiếp thụ nhất tổ cố định sổ mục đích mô bản tham sổ; C++11 gia nhập tân đích biểu kỳ pháp, duẫn hứa nhậm ý trường độ, nhậm ý hình biệt đích mô bản tham sổ, bất tất tại định nghĩa thời tương tham sổ đích cá sổ cố định.

template<typename...Values>classtuple;

Mô bản loạitupleĐích vật kiện, năng tiếp thụ bất hạn cá sổ đích typename tác vi tha đích mô bản dẫn sổ:

classtuple<int,std::vector<int>,std::map<std::string,std::vector<int>>>someInstanceName;

Thật tham đích cá sổ dã khả dĩ thị 0, sở dĩclass tuple<> someInstanceNameGiá dạng đích định nghĩa dã thị khả dĩ đích.

Nhược bất hi vọng sản sinh thật tham cá sổ vi 0 đích bất định trường tham sổ mô bản, tắc khả dĩ thải dụng dĩ hạ đích định nghĩa:

template<typenameFirst,typename...Rest>classtuple;

Bất định trường tham sổ mô bản dã năng vận dụng đáo mô bản hàm thức thượng. Truyện thống C trung đích printf hàm thức, tuy nhiên dã năng đạt thành bất định trường độ đích dẫn sổ đích điều dụng, đãn kỳ tịnh phi hình biệt an toàn. Dĩ hạ đích phạm lệ trung, C++11 trừ liễu năng định nghĩa hình biệt an toàn đích bất định trường dẫn sổ hàm thức ngoại, hoàn năng nhượng loại tự printf đích hàm thức năng tự nhiên địa xử lý phi nội kiến hình biệt đích vật kiện. Trừ liễu tại mô bản tham sổ trung năng sử dụng...Biểu kỳ bất định trường mô bản tham sổ ngoại, hàm sổ tham sổ dã sử dụng đồng dạng đích biểu kỳ pháp đại biểu bất định trường tham sổ.

template<typename...Params>voidprintf(conststd::string&strFormat,Params...parameters);

Kỳ trung,ParamsDữparametersPhân biệt đại biểu mô bản dữ hàm thức đích bất định trường tham sổ tập hợp, xưng chi vi tham sổ bao ( parameter pack ). Tham sổ bao tất tu yếu hòa toán tử "..." Đáp phối sử dụng, tị miễn ngữ pháp thượng đích kỳ nghĩa.

Bất định trường tham sổ mô bản trung, bất định trường tham sổ bao vô pháp như đồng nhất bàn tham sổ tại loại hoặc hàm thức trung sử dụng; Nhân thử điển hình đích thủ pháp thị dĩ đệ hồi đích phương pháp thủ xuất khả dụng tham sổ, tham khán dĩ hạ đích C++11printfPhạm lệ:

voidprintf(constchar*s)
{
while(*s)
{
if(*s=='%'&&*(++s)!='%')
throwstd::runtime_error("invalid format string: missing arguments");
std::cout<<*s++;
}
}

template<typenameT,typename...Args>
voidprintf(constchar*s,Tvalue,Args...args)
{
while(*s)
{
if(*s=='%'&&*(++s)!='%')
{
std::cout<<value;
printf(*s?++s:s,args...);// tức tiện đương *s == 0 dã hội sản sinh điều dụng, dĩ kiểm trắc canh đa đích loại hình tham sổ.
return;
}
std::cout<<*s++;
}
throwstd::logic_error("extra arguments provided to printf");
}

printf hội bất đoạn địa đệ hồi điều dụng tự thân: Hàm thức tham sổ baoargs...Tại điều dụng thời, hội bị mô bản hình biệt thất phối phân ly viT valueHòaArgs... args.Trực đáoargs...Biến vi không tham sổ, tắc hội dữ giản đan đíchprintf(const char *s)Hình thành thất phối, kết thúc đệ hồi.

Lánh nhất cá lệ tử vi kế toán mô bản tham sổ đích trường độ, giá lí sử dụng tương tự đích kỹ xảo triển khai mô bản tham sổ baoArgs...:

template<typename...args>
structCount{};
template<>
structcount<>{
staticconstintvalue=0;
};

template<typenameT,typename...Args>
structcount<T,Args...>{
staticconstintvalue=1+count<Args...>::value;
};

Tuy nhiên một hữu nhất cá giản khiết đích cơ chế năng cú đốiBiến trường tham sổ mô bảnTrung đích trị tiến hành điệt đại, đãn sử dụng toán tử "..." Hoàn năng tại đại mã các xử đối tham sổ bao thi dĩ canh phục tạp đích triển khai thao tác. Cử lệ lai thuyết, nhất cá mô bản loại đích định nghĩa:

template<typename...BaseClasses>classClassName:publicBaseClasses...
{
public:

ClassName(BaseClasses&&...baseClasses):BaseClasses(baseClasses)...{}
}

BaseClasses...Hội bị triển khai thành loại biệtClassNameĐích cơ để loại; ClassName đích kiến cấu thức nhu yếu sở hữu cơ để loại đích hữu trị dẫn dụng, nhi mỗi nhất cá cơ để loại đô thị dĩ truyện nhập đích tham sổ tố sơ thủy hóa (BaseClasses(baseClasses)...).

Tại hàm thức mô bản trung, bất định trường tham sổ khả dĩ hòa hữu trị tham chiếu đáp phối, đạt thành dẫn sổ đích hoàn mỹ chuyển tống ( perfect forwarding ):

template<typenameTypeToConstruct>structSharedPtrAllocator
{
template<typename...Args>std::shared_ptr<TypeToConstruct>ConstructWithSharedPtr(Args&&...params)
{
returnstd::shared_ptr<TypeToConstruct>(newTypeToConstruct(std::forward<Args>(params)...));
}
}

Tham sổ baoparmsKhả triển khai viTypeToConstructKiến cấu thức đích dẫn sổ. Biểu kỳ thứcstd::forward<Args>(params)Khả tương dẫn sổ đích hình biệt tín tức bảo lưu ( lợi dụng hữu trị tham chiếu ), truyện nhập kiến cấu thức. Nhi toán tử "..." Tắc năng tương tiền thuật đích biểu kỳ thức sáo dụng đáo mỗi nhất cá tham sổ bao trung đích tham sổ. Giá chủng công hán hàm thức ( factory function ) đích thủ pháp, sử dụngstd::shared_ptrQuản lý phối trí vật kiện đích ký ức thể, tị miễn liễu bất đương sử dụng sở sản sinh đích ký ức thể tiết lậu ( memory leaks ).

Thử ngoại, bất định trường tham sổ đích sổ lượng khả dĩ tạ dĩ hạ đích ngữ pháp đắc tri:

template<typename...Args>structSomeStruct
{
staticconstintsize=sizeof...(Args);
}

SomeStruct<Type1, Type2>::sizeThị 2, nhiSomeStruct<>::sizeHội thị 0. (sizeof...(Args)Đích kết quả thị biên dịch kỳ thường sổ. )

Tân đích tự xuyến tự diện trị[Biên tập]

Tiêu chuẩn C++ đề cung liễu lưỡng chủng tự xuyến tự diện trị. Đệ nhất chủng, bao hàm hữu song dẫn hào, sản sinh dĩ không tự nguyên kết vĩ đíchconst charTrận liệt. Đệ nhị chủng hữu trứ tiền tiêu L, sản sinh dĩ không tự nguyên kết vĩ đíchconst wchar_tTrận liệt, kỳ trungwchar_tĐại biểu khoan tự nguyên. Đối ôUnicodeBiên mã đích chi viện thượng phó khuyết như.

Vi liễu gia cường C++ biên dịch khí đối Unicode đích chi viện, hình biệtcharĐích định nghĩa bị tu cải vi kỳ đại tiểu chí thiếu năng cú trữ tồnUTF-8Đích 8 vị nguyên biên mã, tịnh thả năng cú dung nạp biên dịch khí đích cơ bổn tự nguyên tập đích nhậm hà thành viên.

C++11 tương chi viện tam chủng Unicode biên mã phương thức:UTF-8,UTF-16,HòaUTF-32.Trừ liễu thượng thuậtcharĐịnh nghĩa đích biến canh, C++11 tương tăng gia lưỡng chủng tân đích tự nguyên hình biệt:char16_tHòachar32_t.Tha môn các tự bị thiết kế dụng lai trữ tồn UTF-16 dĩ cập UTF-32 đích tự nguyên.

Dĩ hạ triển kỳ như hà sản sinh sử dụng giá ta biên mã đích tự xuyến tự diện trị:

u8"I'm a UTF-8 string."
u"This is a UTF-16 string."
U"This is a UTF-32 string."

Đệ nhất cá tự xuyến đích hình biệt thị thông thường đíchconst char[];Đệ nhị cá tự xuyến đích hình biệt thịconst char16_t[];Đệ tam cá tự xuyến đích hình biệt thịconst char32_t[].

Đương kiến lập Unicode tự xuyến tự diện trị thời, khả dĩ trực tiếp tại tự xuyến nội sáp nhập Unicode codepoints. C++11 đề cung liễu dĩ hạ đích ngữ pháp:

u8"This is a Unicode Character:\u2018."
u"This is a bigger Unicode Character:\u2018."
U"This is a Unicode Character:\U00002018."

Tại '\u' chi hậu đích thị 16 cá vị nguyên đích thập lục tiến vị sổ trị; tha bất nhu yếu '0x' đích tiền tiêu. Thức biệt tự '\u' đại biểu liễu nhất cá 16 vị nguyên đích Unicode codepoint; như quả yếu thâu nhập 32 vị nguyên đích codepoint, sử dụng '\U' hòa 32 cá vị nguyên đích thập lục tiến vị sổ trị. Chỉ hữu hữu hiệu đích Unicode codepoints năng cú bị thâu nhập. Cử lệ nhi ngôn, codepoints tại phạm vi U+D800—U+DFFF chi gian thị bị cấm chỉ đích, tha môn bị bảo lưu cấp UTF-16 biên mã đích surrogate pairs.

Hữu thời hầu tị miễn thủ động tương tự xuyến hoán mã dã thị ngận hữu dụng đích, đặc biệt thị tại sử dụngXMLĐương án hoặc thị nhất taCước bổn ngữ ngônĐích tự diện trị đích thời hầu. C++11 tương đề cung raw ( nguyên thủy ) tự xuyến tự diện trị:

R "(The String Data \ Stuff" ) "
R" delimiter(The String Data \ Stuff ")delimiter"

Tại đệ nhất cá lệ tử trung, nhậm hà bao hàm tại()Quát hào ( tiêu chuẩn dĩ kinh tòng[]Cải vi()) đương trung đích đô thị tự xuyến đích nhất bộ phân. Kỳ trung"Hòa\Tự nguyên bất nhu yếu kinh quá chuyển nghĩa. Tại đệ nhị cá lệ tử trung,"delimiter(Khai thủy tự xuyến, chỉ hữu tại ngộ đáo)delimiter "Tài đại biểu kết thúc. Kỳ trungdelimiterKhả dĩ thị tối đa 16 cá tự phù đích nhậm ý đích tự xuyến ( bao hàm không tự phù xuyến ), đãn bất năng bao hàm không cách, khống chế tự phù hòa '(', ')', '\'. Nguyên thủy tự phù xuyến duẫn hứa sử dụng giả sử dụng viên quát hào(,),Lệ như R "delimiter((a-z))delimiter" đẳng giới vu "(a-z)". Nguyên thủy tự xuyến tự diện trị năng cú hòa khoan tự diện trị hoặc thị Unicode tự diện trị kết hợp:

u8R"XXX(I'm a "raw UTF-8" string.)XXX"
// uR "*@(This is a" raw UTF-16 "string.)*@" //visual studio not support '@'
uR"*(This is a "raw UTF-16" string.)*"
UR"(This is a "raw UTF-32" string.)"

Dụng hộ định nghĩa tự diện lượng[Biên tập]

Tiêu chuẩn C++ đề cung liễu sổ chủng tự diện trị. Tự nguyên "12.5" thị năng cú bị biên dịch khí giải thích vi sổ trị 12.5 đíchdoubleHình biệt tự diện trị. Nhiên nhi, gia thượng "f" đích hậu trí, tượng thị "12.5f", tắc hội sản sinh sổ trị vi 12.5 đíchfloatHình biệt tự diện trị. Chi tiền đích C++ quy phạm trung tự diện trị đích tu sức phù thị cố định đích, C++ đại mã bất năng sang lập tân đích tự diện tu sức phù.

C++11 khai phóng sử dụng giả định nghĩa tân đích tự diện tu sức phù ( literal modifier ), lợi dụng tự đính đích tu sức phù hoàn thành do tự diện trị kiến cấu vật kiện.

Tự diện trị chuyển hoán khả dĩ định nghĩa vi lưỡng cá giai đoạn: Nguyên thủy dữ chuyển hoán hậu ( raw dữ cooked ). Nguyên thủy tự diện trị chỉ đặc định loại hình đích tự phù tự liệt, nhi chuyển hoán hậu đích tự diện trị tắc đại biểu lánh nhất chủng hình biệt. Như tự diện trị1234,Nguyên thủy tự diện trị thị'1', '2', '3', '4'Đích tự phù tự liệt; nhi chuyển hoán hậu đích tự diện trị thị chỉnh sổ trị1234.Lánh ngoại, tự diện trị0xAChuyển hoán tiền thị tự liệt'0', 'x', 'A';Chuyển hoán hậu đại biểu chỉnh sổ trị 10.

Đa công ký ức thể mô hình[Biên tập]

C++ tiêu chuẩn ủy viên hội kế hoa thống nhất đốiĐa tự biên trìnhĐích chi viện.

Giá tương thiệp cập lưỡng cá bộ phân: Đệ nhất, thiết kế nhất cá khả dĩ sử đa cá tuyến trình tại nhất cá tiến trình trung cộng tồn đích nội tồn mô hình; đệ nhị, vi tuyến trình chi gian đích hỗ động đề cung chi viện. Đệ nhị bộ phân tương do trình thức khố đề cung chi trì, canh đa thỉnh khánTự trình chi viện.

Tại đa cá tuyến trình khả năng hội phóng vấn tương đồng nội tồn đích tình hình hạ, do nhất cá nội tồn mô hình đối tha môn tiến hành điều độ thị phi thường hữu tất yếu đích. Tuân thủ mô hình quy tắc đích trình tự thị bị bảo chứng chính xác vận hành đích, đãn vi phản quy tắc đích trình tự hội phát sinh bất khả dự liêu đích hành vi, giá ta hành vi y lại vuBiên dịch khí đích tối giai hóaHòa ký ức thể nhất trí tính đích vấn đề.

thread-local đích tồn trữ kỳ hạn[Biên tập]

Tại đa tự hoàn cảnh hạ, nhượng các tự trình ủng hữu các tự đích biến sổ thị ngận phổ biến đích. Giá dĩ kinh tồn tại ô hàm thức đích khu vực biến sổ, đãn thị đối ô toàn vực hòa tĩnh thái biến sổ đô hoàn bất hành.

Tân đíchthread_localTồn trữ kỳ hạn ( tại hiện hành đíchstatic,dynamicHòaautomaticChi ngoại ) bị tác vi hạ cá tiêu chuẩn nhi đề xuất. Tự trình khu vực đích tồn trữ kỳ hạn hội tạ do tồn trữ chỉ định tựthread_localLai biểu minh.

static vật kiện ( sinh mệnh chu kỳ vi chỉnh cá trình thức đích chấp hành kỳ gian ) đích tồn trữ kỳ hạn khả dĩ bị thread-local cấp thế đại. Tựu như đồng kỳ tha sử dụng static tồn trữ kỳ đích biến sổ, thread-local vật kiện năng cú dĩ kiến cấu thức sơ thủy hóa tịnh dĩ giải cấu thức tồi hủy.

Sử dụng hoặc cấm dụng vật kiện đích dự thiết hàm thức[Biên tập]

Tại truyện thống C++ trung, nhược sử dụng giả một hữu đề cung, tắc biên dịch khí hội tự động vi vật kiện sinh thành dự thiết kiến cấu thức (default constructor), phục chế kiến cấu thức ( copy constructor ), phú trị vận toán tử ( copy assignment operatoroperator=) dĩ cập giải cấu thức ( destructor ). Lánh ngoại, C++ dã vi sở hữu đích loại biệt định nghĩa liễu sổ cá toàn vực toán tử ( nhưoperator deleteCậpoperator new). Đương sử dụng giả hữu nhu yếu thời, dã khả dĩ đề cung tự đính đích bản bổn cải tả thượng thuật đích hàm thức.

Vấn đề tại ô nguyên tiên đích c++ vô pháp tinh xác địa khống chế giá ta dự thiết hàm sổ đích sinh thành. Bỉ phương thuyết, yếu nhượng loại biệt bất năng bị khảo bối, tất tu tương phục chế kiến cấu thức dữ phú trị vận toán tử tuyên cáo vi private, tịnh bất khứ định nghĩa tha môn. Thường thí sử dụng giá ta vị định nghĩa đích hàm thức hội đạo trí biên dịch kỳ hoặc liên kết kỳ đích thác ngộ. Đãn giá chủng thủ pháp tịnh bất thị nhất cá lý tưởng đích giải quyết phương án.

Thử ngoại, biên dịch khí sản sinh đích dự thiết kiến cấu thức dữ sử dụng giả định nghĩa đích kiến cấu thức vô pháp đồng thời tồn tại. Nhược sử dụng giả định nghĩa liễu nhậm hà kiến cấu thức, biên dịch khí tiện bất hội sinh thành dự thiết kiến cấu thức; Đãn hữu thời đồng thời đái hữu thượng thuật lưỡng giả đề cung đích kiến cấu thức dã thị ngận hữu dụng đích. Mục tiền tịnh một hữu hiển thức chỉ định biên dịch khí sản sinh dự thiết kiến cấu thức đích phương pháp.

C++11 duẫn hứa hiển thức địa biểu minh thải dụng hoặc cự dụng biên dịch khí đề cung đích nội kiến hàm thức. Lệ như yếu cầu loại biệt đái hữu dự thiết kiến cấu thức, khả dĩ dụng dĩ hạ đích ngữ pháp:

structSomeType
{
SomeType()=default;// dự thiết kiến cấu thức đích hiển thức thanh minh
SomeType(OtherTypevalue);
};

Lánh nhất phương diện, dã khả dĩ cấm chỉ biên dịch khí tự động sản sinh mỗ ta hàm thức. Như hạ diện đích lệ tử, loại biệt bất khả phục chế:

structNonCopyable
{
NonCopyable&operator=(constNonCopyable&)=delete;
NonCopyable(constNonCopyable&)=delete;
NonCopyable()=default;
};

Cấm chỉ loại biệt dĩoperator newPhối trí ký ức thể:

structNonNewable
{
void*operatornew(std::size_t)=delete;
};

Thử chủng vật kiện chỉ năng sinh thành ô stack trung hoặc thị đương tác kỳ tha loại biệt đích thành viên, tha vô pháp trực tiếp phối trí ô heap chi trung, trừ phi sử dụng liễu dữ bình đài tương quan, bất khả di thực đích thủ pháp. ( sử dụng placement new toán tử tuy nhiên khả dĩ tại dụng hộ tự phối trí đích ký ức thể thượng hô khiếu vật kiện kiến cấu thức, đãn tại thử lệ trung kỳ tha hình thức đích new toán tử nhất tịnh bị thượng thuật đích định nghĩa già tế ( "name hiding" ), sở dĩ dã bất khả hành. )

= deleteĐích thanh minh ( đồng thời dã thị định nghĩa ) dã năng thích dụng ô phi nội kiến hàm thức, cấm chỉ thành viên hàm thức dĩ đặc định đích dẫn sổ hô khiếu:

structNoDouble
{
voidf(inti);
voidf(double)=delete;
};

Nhược thường thí dĩ double đích dẫn sổ hô khiếuf(),Tương hội dẫn phát biên dịch kỳ thác ngộ, biên dịch khí bất hội tự động tương double dẫn sổ chuyển hình vi int tái hô khiếuf().Nhược yếu triệt để đích cấm chỉ dĩ phi int đích dẫn sổ hô khiếuf(),Khả dĩ tương= deleteDữ mô bản tương kết hợp:

structOnlyInt
{
voidf(inti);
template<classT>voidf(T)=delete;
};

long long intHình biệt[Biên tập]

Tại 32 vị nguyên hệ thống thượng, nhất cálong long intThị bảo hữu chí thiếu 64 cá hữu hiệu vị nguyên đích chỉnh sổ hình biệt.C99Tương giá cá hình biệt dẫn nhập liễu tiêu chuẩn C trung, mục tiền đại đa sổ đích C++ biên dịch khí dã chi viện giá chủng hình biệt. C++11 tương bả giá chủng hình biệt thiêm gia đáo tiêu chuẩn C++ trung.

Tĩnh thái assertion[Biên tập]

C++ đề cung liễu lưỡng chủng phương pháp trắc thí assertion ( thanh minh ): Cự tậpassertDĩ cậpTiền xử lý khíChỉ lệnh#error.Đãn thị giá lưỡng giả đối ô mô bản lai thuyết đô bất hợp dụng. Cự tập tại chấp hành kỳ trắc thí assertion, nhi tiền xử lý khí chỉ lệnh tắc tại tiền trí xử lý thời trắc thí assertion, giá thời hầu mô bản hoàn vị năng cụ hiện hóa. Sở dĩ tha môn đô bất thích hợp lai trắc thí khiên xả đáo mô bản tham sổ đích tương quan đặc tính.

Tân đích cơ năng hội dẫn tiến tân đích phương thức khả dĩ tại biên dịch kỳ trắc thí assertion, chỉ yếu sử dụng tân đích quan kiện tựstatic_assert.Tuyên cáo thải thủ dĩ hạ đích hình thức:

static_assert(constant-expression,error-message);

Giá lí hữu nhất ta như hà sử dụngstatic_assertĐích lệ tử:

static_assert(3.14<GREEKPI&&GREEKPI<3.15,"GREEKPI is inaccurate!");
template<classT>
structCheck
{
static_assert(sizeof(int)<=sizeof(T),"T is not big enough!");
};

Đương thường sổ biểu kỳ thức trị vifalseThời, biên dịch khí hội sản sinh tương ứng đích thác ngộ tấn tức. Đệ nhất cá lệ tử thị tiền xử lý khí chỉ lệnh#errorĐích thế đại phương án; đệ nhị cá lệ tử hội tại mỗi cá mô bản loại biệtCheckSinh thành thời kiểm tra assertion.

Tĩnh thái assertion tại mô bản chi ngoại dã thị tương đương hữu dụng đích. Lệ như, mỗ cá diễn toán pháp đích thật tác y lại ôlong longHình biệt đích đại tiểu bỉintHoàn đại, giá thị tiêu chuẩn sở bất bảo chứng đích. Giá chủng giả thiết tại đại đa sổ đích hệ thống dĩ cập biên dịch khí thượng thị hữu hiệu đích, đãn bất thị toàn bộ.

Duẫn hứa sizeof vận toán tử tác dụng tại loại biệt đích tư liêu thành viên thượng, vô tu minh xác đích vật kiện[Biên tập]

C++98,sizeofChỉ năng đối thật lệ đích biến lượng hoặc giả loại đích tĩnh thái thành viên tiến hành thao tác, bất năng đối loại đích phi tĩnh thái thành viên tiến hành thao tác, nhược yếu tưởng đạt thành đối loại đích phi tĩnh thái thành viên đích thao tác, khả dĩ dụng như hạ ugly phương thức, 0 cường chuyển thành đối tượng đích chỉ châm, tịnh giải tích phóng vấn đối ứng phi tĩnh thái thành viên biến lượng.

structSomeType{OtherTypemember;};

sizeof((SomeType*)(0)->member);//C++98

sizeof(SomeType::member);// trực tiếp do SomeType hình biệt thủ đắc phi tĩnh thái thành viên đích đại tiểu, C++03 bất hành. C++11 duẫn hứa

Giá hội truyện hồiOtherTypeĐích đại tiểu. C++03 tịnh bất duẫn hứa giá dạng tố, sở dĩ hội dẫn phát biên dịch thác ngộ. C++11 tương hội duẫn hứa giá chủng sử dụng.

Lạp ngập hồi thu cơ chế[Biên tập]

Thị phủ hội tự động hồi thu na ta vô pháp bị sử dụng đáo ( unreachable ) đích động thái phân phối vật kiện do thật tác quyết định.

Tham kiến <memory> đầu văn kiện trung đích kỉ cá hàm sổ:

  • void declare_reachable(void* p);
  • template<class T> T* undeclare_reachable(T *p) noexcept;
  • void declare_no_pointers(char*p,size_t n)noexcept;
  • void undeclare_no_pointers(char*p,size_t n) noexcept;

C++ tiêu chuẩn trình thức khố đích biến canh[Biên tập]

C++11 tiêu chuẩnTrình thức khốHữu sổ cá tân cơ năng. Kỳ trung hứa đa khả dĩ tại hiện hành tiêu chuẩn hạ thật tác, nhi lánh ngoại nhất ta tắc y lại ô ( hoặc đa hoặc thiếu ) tân đích C++11 hạch tâm ngữ ngôn cơ năng.

Tân đích trình thức khố đích đại bộ phân bị định nghĩa ôC++ tiêu chuẩn ủy viên hội đích Library Technical Report( xưng TR1 ), ô 2005 niên phát bố. Các thức TR1 đích hoàn toàn hoặc bộ phân thật tác mục tiền đề cung tạiMệnh danh không gianstd::tr1.C++11 hội tương kỳ di trí ô mệnh danh không gianstdChi hạ.

Tiêu chuẩn khố nguyên kiện thượng đích thăng cấp[Biên tập]

Mục tiền đích tiêu chuẩn khố năng thụ ích ô C++11 tân tăng đích nhất ta ngữ ngôn đặc tính. Cử lệ lai thuyết, đối ô đại bộ phân đích tiêu chuẩn khố dung khí nhi ngôn, tượng thị bàn di nội hàm đại lượng nguyên tố đích dung khí, hoặc thị dung khí chi nội đối nguyên tố đích bàn di, cơ ôHữu trị dẫn dụng( Rvalue reference ) đíchmoveKiến cấu tử đô năng ưu hóa tiền thuật động tác. Tại thích đương đích tình huống hạ, tiêu chuẩn khố nguyên kiện tương khả lợi dụng C++11 đích ngữ ngôn đặc tính tiến hành thăng cấp. Giá ta ngữ ngôn đặc tính bao hàm đãn bất cục hạn dĩ hạ sở liệt:

  • Hữu trị dẫn dụng hòa kỳ tương quan đíchmoveChi viện
  • Chi viện UTF-16 biên mã, hòa UTF-32 tự nguyên tập
  • Biến trường tham sổ mô bản ( dữ hữu trị dẫn dụng đáp phối khả dĩ đạt thànhHoàn mỹ chuyển phát( perfect forwarding ) )
  • Biên dịch kỳ thường sổ biểu đạt thức
  • Decltype
  • Hiển thức hình biệt chuyển hoán tử
  • Sử dụng hoặc cấm dụng vật kiện đích dự thiết hàm thức

Thử ngoại, tự C++ tiêu chuẩn hóa chi hậu dĩ kinh quá hứa đa niên. Hiện hữu hứa đa đại mã lợi dụng đáo liễu tiêu chuẩn khố; giá đồng thời yết lộ liễu bộ phân đích tiêu chuẩn khố khả dĩ tố ta cải lương. Kỳ trung chi nhất thị tiêu chuẩn khố đích ký ức thể phối trí khí ( allocator ). C++11 tương hội gia nhập nhất cá cơ ô tác dụng vực mô hình đích ký ức thể phối trí khí lai chi viện hiện hữu đích mô hình.

Chấp hành tự chi viện[Biên tập]

Tuy nhiên C++11 hội tại ngữ ngôn đích định nghĩa thượng đề cung nhất cá ký ức thể mô hình dĩ chi viện chấp hành tự, đãn chấp hành tự đích sử dụng chủ yếu tương dĩ C++11 tiêu chuẩn hàm thức khố đích phương thức trình hiện.

C++11 tiêu chuẩn hàm thức khố hội đề cung loại biệtthread(std::thread). Nhược yếu chấp hành nhất cá chấp hành tự, khả dĩ kiến lập nhất cá loại biệtthreadĐích thật thể, kỳ sơ thủy tham sổ vi nhất cá hàm thức vật kiện, dĩ cập cai hàm thức vật kiện sở nhu yếu đích tham sổ. Thấu quá thành viên hàm thứcstd::thread::join()Đối chấp hành tự hội hợp đích chi viện, nhất cá chấp hành tự khả dĩ tạm đình trực đáo kỳ tha chấp hành tự chấp hành hoàn tất. Nhược hữu để tằng bình đài chi viện, thành viên hàm thứcstd::thread::native_handle()Tương khả đề cung đối nguyên sinh chấp hành tự vật kiện chấp hành bình đài đặc định đích thao tác.

Đối ô chấp hành tự gian đích đồng bộ, tiêu chuẩn hàm thức khố tương hội đề cung thích đương đích hỗ xích tỏa ( tượng thịstd::mutex,std::recursive_mutexĐẳng đẳng ) hòa điều kiện biến sổ (std::condition_variableHòastd::condition_variable_any). Tiền thuật đồng bộ cơ chế tương hội dĩ RAII tỏa (std::lock_guardHòastd::unique_lock) hòa tỏa tương quan diễn toán pháp đích phương thức trình hiện, dĩ phương tiện trình thức viên sử dụng.

Đối ô yếu cầu cao hiệu năng, hoặc thị cực để tằng đích công tác, hữu thời hoặc thậm chí thị tất tu đích, ngã môn hi vọng chấp hành tự gian đích thông tấn năng tị miễn hỗ xích tỏa sử dụng thượng đích khai tiêu. Dĩ nguyên tử thao tác lai tồn thủ ký ức thể khả dĩ đạt thành thử mục đích. Châm đối bất đồng tình huống, ngã môn khả dĩ thấu quá hiển tính đích ký ức thể bình chướng cải biến cai tồn thủ ký ức thể động tác đích khả kiến tính.

Đối ô chấp hành tự gian phi đồng bộ đích truyện thâu, C++11 tiêu chuẩn hàm thức khố gia nhập liễu dĩ cậpstd::packaged_taskDụng lai bao trang nhất cá hội truyện hồi phi đồng bộ kết quả đích hàm thức hô khiếu. Nhân vi khuyết thiếu kết hợp sổ cá future đích công năng, hòa vô pháp phán định nhất tổ promise tập hợp trung đích mỗ nhất cá promise thị phủ hoàn thành, futures thử nhất đề án nhân thử nhi thụ đáo liễu phê bình.

Canh cao cấp đích chấp hành tự chi viện, như chấp hành tự trì, dĩ kinh quyết định lưu đãi tại vị lai đích Technical Report gia nhập thử loại chi viện. Canh cao cấp đích chấp hành tự chi viện bất hội thị C++11 đích nhất bộ phân, đãn thiết tưởng thị kỳ tối chung thật hiện tương kiến lập tại mục tiền dĩ hữu đích chấp hành tự chi viện chi thượng.

std::asyncĐề cung liễu nhất cá giản tiện phương pháp dĩ dụng lai chấp hành chấp hành tự, tịnh tương chấp hành tự bảng định tạistd::future.Sử dụng giả khả dĩ tuyển trạch nhất cá công tác thị yếu đa cá chấp hành tự thượng phi đồng bộ đích chấp hành, hoặc thị tại nhất cá chấp hành tự thượng chấp hành tịnh đẳng đãi kỳ sở nhu yếu đích tư liêu. Dự thiết đích tình huống, thật tác khả dĩ căn cư để tằng ngạnh thể tuyển trạch tiền diện lưỡng cá tuyển hạng đích kỳ trung chi nhất. Lánh ngoại tại giác giản đan đích sử dụng tình hình hạ, thật tác dã khả dĩ lợi dụng chấp hành tự trì đề cung chi viện.

Đa nguyên tổ hình biệt[Biên tập]

Đa nguyên tổThị nhất cá nội do sổ cá dị chất vật kiện dĩ đặc định thuận tự bài liệt nhi thành đích tư liêu kết cấu. Đa nguyên tổ khả bị thị vi thịstructKỳ tư liêu thành viên đích nhất bàn hóa.

Do TR1 diễn tiến nhi lai đích C++11 đa nguyên tổ hình biệt tương thụ ích ô C++11 mỗ ta đặc sắc tượng thịKhả biến tham sổ mô bản.TR1 bản bổn đích đa nguyên tổ hình biệt đối sở năng dung nạp đích vật kiện cá sổ hội nhân thật tác nhi hữu sở hạn chế, thả thật tác thượng nhu yếu dụng đáo đại lượng đích cự tập kỹ xảo. Tương phản đích, C++11 bản bổn đích đa nguyên tổ hình cơ bổn thượng ô đối kỳ năng dung nạp đích vật kiện cá sổ một hữu hạn chế. Nhiên nhi, biên dịch khí đối ô mô bản thật thể hóa đích đệ hồi thâm độ thượng đích hạn chế nhưng cựu ảnh hưởng liễu nguyên tổ hình biệt sở năng dung nạp đích vật kiện cá sổ ( giá thị vô pháp tị miễn đích tình huống ); C++11 bản bổn đích đa nguyên tổ hình bất hội bả giá cá trị nhượng sử dụng giả tri đạo.

Sử dụngKhả biến tham sổ mô bản,Đa nguyên tổ hình biệt đích tuyên cáo khả dĩ trường đắc tượng hạ diện giá dạng:

template<class...Types>classtuple;

Để hạ thị nhất cá đa nguyên tổ hình biệt đích định nghĩa hòa sử dụng tình huống:

typedefstd::tuple<int,double,long&,constchar*>test_tuple;
longlengthy=12;
test_tupleproof(18,6.5,lengthy,"Ciao!");

lengthy=std::get<0>(proof);// tương proof đích đệ nhất cá nguyên tố phú trị cấp lengthy ( tác dẫn tòng linh khai thủy khởi khiêu )
std::get<3>(proof)="Beautiful!";// tu cải proof đích đệ tứ cá nguyên tố

Ngã môn khả dĩ định nghĩa nhất cá đa nguyên tổ hình biệt vật kiệnproofNhi bất chỉ định kỳ nội dung, tiền đề thịproofLí đích nguyên tố kỳ hình biệt định nghĩa liễu dự thiết kiến cấu tử ( default constructor ). Thử ngoại, dĩ nhất cá đa nguyên tổ hình biệt vật kiện phú trị cấp lánh nhất cá đa nguyên tổ hình biệt vật kiện thị khả năng đích, đãn chỉ hữu tại dĩ hạ tình huống: Nhược giá lưỡng cá đa nguyên tổ hình biệt tương đồng, tắc kỳ nội hàm đích mỗi nhất cá nguyên tố kỳ hình biệt đô yếu định nghĩa khảo bối kiến cấu tử ( copy constructor ); phủ tắc đích thoại, phú trị thao tác phù hữu biên đích đa nguyên tổ kỳ nội hàm nguyên tố đích hình biệt tất tu năng chuyển hoán thành tả biên đích đa nguyên tổ kỳ đối ứng đích nguyên tố hình biệt, hựu hoặc giả phú trị thao tác phù tả biên đích đa nguyên tổ kỳ nội hàm nguyên tố đích hình biệt tất tu định nghĩa thích đương đích kiến cấu tử.

std::tuple<int,double,string>t1;
std::tuple<char,short,constchar*>t2('X',2,"Hola!");
t1=t2;// khả hành. Tiền lưỡng cá nguyên tố hội tác hình biệt chuyển hoán,
// đệ tam cá tự xuyến nguyên tố khả do 'const char *' sở kiến cấu.

Đa nguyên tổ loại hình vật kiện đích bỉ giác vận toán thị khả hành đích ( đương tha môn ủng hữu đồng dạng sổ lượng đích nguyên tố ). Thử ngoại, C++11 đề cung lưỡng cá biểu đạt thức dụng lai kiểm tra đa nguyên tổ loại hình đích nhất ta đặc tính ( cận tại biên dịch kỳ tố thử kiểm tra ).

  • std::tuple_size<T>::valueHồi truyện đa nguyên tổTNội đích nguyên tố cá sổ,
  • std::tuple_element<I, T>::typeHồi truyện đa nguyên tổTNội đích đệICá nguyên tố đích hình biệt

Tạp thấu biểu[Biên tập]

Tại quá khứ, bất đoạn hữu yếu cầu tưởng tương tạp thấu biểu ( vô tự quan liên thức dung khí ) dẫn tiến tiêu chuẩn khố. Chỉ nhân vi thời gian thượng đích hạn chế, tạp thấu biểu tài một hữu bị tiêu chuẩn khố sở thải nạp. Tuy nhiên, tạp thấu biểu tại tối tao tình huống hạ ( như quả xuất hiện hứa đa trùng đột ( collision ) đích thoại ) tại hiệu năng thượng bỉ bất quá bình hành thụ. Đãn thật tế vận dụng thượng, tạp thấu biểu đích biểu hiện tắc giác giai.

Nhân vi tiêu chuẩn ủy viên hội hoàn khán bất đáo hữu nhậm hà cơ hội năng tương khai phóng định chỉ pháp tiêu chuẩn hóa, sở dĩ mục tiền trùng đột cận năng thấu quáLiên địa chỉ pháp ( linear chaining )Đích phương thức xử lý. Vi tị miễn dữ đệ tam phương hàm thức khố phát triển đích tạp thấu biểu phát sinh danh xưng thượng đích trùng đột, tự thủ tương thải dụng unordered nhi phi hash.

Hàm thức khố tương dẫn tiến tứ chủng tạp thấu biểu, kỳ trung soa biệt tại ô để hạ lưỡng cá đặc tính: Thị phủ tiếp thụ cụ tương đồng kiện trị đích hạng mục ( Equivalent keys ), dĩ cập thị phủ hội tương kiện trị ánh xạ đáo tương đối ứng đích tư liêu ( Associated values ).

Tạp thấu biểu loại hình Hữu vô quan liên trị Tiếp thụ tương đồng kiện trị
std::unordered_set Phủ Phủ
std::unordered_multiset Phủ Thị
std::unordered_map Thị Phủ
std::unordered_multimap Thị Thị

Thượng thuật đích loại biệt tương mãn túc đối nhất cá dung khí loại biệt đích yếu cầu, đồng thời dã đề cung tồn thủ kỳ trung nguyên tố đích thành viên hàm thức:insert,erase,begin,end.

Tạp thấu biểu bất nhu yếu đối hiện hữu hạch tâm ngữ ngôn tố khoách triển ( tuy nhiên tạp thấu biểu đích thật tác hội lợi dụng đáo C++11 tân đích ngữ ngôn đặc tính ), chỉ hội đối tiêu đầu đương<functional>Tố ta hứa khoách triển, tịnh dẫn nhập<unordered_set>Hòa<unordered_map>Lưỡng cá tiêu đầu đương. Đối ô kỳ tha hiện hữu đích loại biệt bất hội hữu nhậm hà tu cải. Đồng thời, tạp thấu biểu dã bất hội y lại kỳ tha tiêu chuẩn khố đích khoách triển công năng.

Chính quy biểu kỳ thức[Biên tập]

Quá khứ hứa đa hoặc đa hoặc thiếu tiêu chuẩn hóa đích trình thức khố bị kiến lập dụng lai xử lýChính quy biểu kỳ thức.Hữu giam ô giá ta diễn toán pháp đích sử dụng phi thường phổ biến, nhân thử tiêu chuẩn trình thức khố tương hội bao hàm tha môn, tịnh sử dụng các chủngVật kiện đạo hướng ngữ ngônĐích tiềm lực.

Giá cá tân đích trình thức khố, bị định nghĩa ô<regex>Tiêu đầu đương, do kỉ cá tân đích loại biệt sở tổ thành:

  • Chính quy biểu kỳ thức ( dạng thức ) dĩ dạng bản loạibasic_regexĐích thật thể biểu kỳ
  • Dạng thức thất phối đích tình huống dĩ dạng bản loạimatch_resultsĐích thật thể biểu kỳ

Hàm thứcregex_searchThị dụng lai sưu tầm dạng thức; nhược yếu sưu tầm tịnh thủ đại, tắc yếu sử dụng hàm thứcregex_replace,Cai hàm thức hội hồi truyện nhất cá tân đích tự xuyến. Diễn toán phápregex_searchHòaregex_replaceTiếp thụ nhất cá chính quy biểu kỳ thức ( dạng thức ) hòa nhất cá tự xuyến, tịnh tương cai dạng thức thất phối đích tình huống trữ tồn tại structmatch_results.

Để hạ miêu thuật liễumatch_resultsĐích sử dụng tình huống:

constchar*reg_esp="[,.\\t\\n;:] ";// phân cách tự nguyên liệt biểu

std::regexrgx(reg_esp);// 'regex' thị dạng bản loại 'basic_regex' dĩ hình biệt vi 'char'
// đích tham sổ cụ hiện hóa đích thật thể
std::cmatchmatch;// 'cmatch' thị dạng bản loại match_results' dĩ hình biệt vi 'const char *'
// ' đích tham sổ cụ hiện hóa đích thật thể
constchar*target="Polytechnic University of Turin";

// biện biệt sở hữu bị phân cách tự nguyên sở phân cách đích tự
if(regex_search(target,match,rgx))
{
// nhược thử chủng tự tồn tại

constsize_tn=match.size();
for(size_ta=0;a<n;a++)
{
stringstr(match[a].first,match[a].second);
cout<<str<<"\n";
}
}

Chú ý song phản tà tuyến đích sử dụng, nhân vi C++ tương phản tà tuyến tác vi khiêu thoát tự nguyên sử dụng. Đãn C++11 đíchraw stringKhả dĩ dụng lai tị miễn thử nhất vấn đề. Hàm thức khố <regex> bất nhu yếu cải động đáo hiện hữu đích tiêu đầu đương, đồng thời dã bất nhu yếu đối hiện hữu đích ngữ ngôn tác khoách triển.

Thông dụng trí năng chỉ châm[Biên tập]

Giá ta chỉ châm thị do TR1 trí năng chỉ tiêu diễn biến nhi lai. Chú ý! Trí năng chỉ châm thị loại biệt nhi phi nhất bàn chỉ tiêu.

shared_ptrThị nhất dẫn dụng kế sổ ( reference-counted ) chỉ châm, kỳ hành vi dữ nhất bàn C++ chỉ tiêu cực vi tương tự. Tại TR1 đích thật tác trung, khuyết thiếu liễu nhất ta nhất bàn chỉ châm sở ủng hữu đích đặc sắc, tượng thị biệt danh hoặc thị chỉ tiêu vận toán. C++11 tân tăng tiền thuật đặc sắc.

Nhất cáshared_ptrChỉ hữu tại dĩ kinh một hữu nhậm hà kỳ thashared_ptrChỉ hướng kỳ nguyên bổn sở chỉ hướng vật kiện thời, tài hội tiêu hủy cai vật kiện.

Nhất cáweak_ptrChỉ hướng đích thị nhất cá bịshared_ptrSở chỉ hướng đích vật kiện. Caiweak_ptrKhả dĩ dụng lai quyết định cai vật kiện thị phủ dĩ bị tiêu hủy.weak_ptrBất năng bị giải tham khảo; tưởng yếu tồn thủ kỳ nội bộ sở bảo tồn đích chỉ châm, chỉ năng thấu quáshared_ptr.Hữu lưỡng chủng phương pháp khả đạt thành thử mục đích. Đệ nhất, loại biệtshared_ptrHữu nhất cá dĩweak_ptrVi tham sổ đích kiến cấu tử. Đệ nhị, loại biệtweak_ptrHữu nhất cá danh vilockĐích thành viên hàm thức, kỳ phản hồi trị vi nhất cáshared_ptr.weak_ptrTịnh bất ủng hữu tha sở chỉ hướng đích vật kiện, nhân thử bất ảnh hưởng cai vật kiện đích tiêu hủy dữ phủ.

Để hạ thị nhất cáshared_ptrĐích sử dụng phạm lệ:

intmain()
{
std::shared_ptr<double>p_first(newdouble);

{
std::shared_ptr<double>p_copy=p_first;

*p_copy=21.2;

}// thử thời 'p_copy' hội bị tiêu hủy, đãn động thái phân phối đích double bất hội bị tiêu hủy.

return0;// thử thời 'p_first' hội bị tiêu hủy, động thái phân phối đích double dã hội bị tiêu hủy ( nhân vi bất tái hữu chỉ châm chỉ hướng tha ).
}

auto_ptrTương hội bị C++ tiêu chuẩn sở phế khí, thủ nhi đại chi đích thịunique_ptr.unique_ptrĐề cungauto_ptrĐại bộ phân đặc tính, duy nhất đích lệ ngoại thịauto_ptrĐích bất an toàn, ẩn tính đích tả trị bàn di. Bất tượngauto_ptr,unique_ptrKhả dĩ tồn phóng tại C++11 đề xuất đích na ta năng sát giác bàn di động tác đích dung khí chi trung.

Khả khoách triển đích tùy cơ sổ công năng[Biên tập]

C tiêu chuẩn khố duẫn hứa sử dụngrandHàm sổ lai sinh thànhNgụy tùy cơ sổ.Bất quá kỳ diễn toán pháp tắc thủ quyết ô các trình thức khố khai phát giả. C++ trực tiếp tòng C kế thừa liễu giá bộ phân, đãn thị C++11 tương hội đề cung sản sinh ngụy loạn sổ đích tân phương pháp.

C++11 đích tùy cơ sổ công năng phân vi lưỡng bộ phân: Đệ nhất, nhất cá loạn sổ sinh thành dẫn kình, kỳ trung bao hàm cai sinh thành dẫn kình đích trạng thái, dụng lai sản sinh loạn sổ. Đệ nhị, nhất cá phân bố, giá khả dĩ dụng lai quyết định sản sinh loạn sổ đích phạm vi, dã khả dĩ quyết định dĩ hà chủng phân bố phương thức sản sinh loạn sổ. Loạn sổ sinh thành vật kiện tức thị do loạn sổ sinh thành dẫn kình hòa phân bố sở cấu thành.

Bất đồng ô C tiêu chuẩn khố đíchrand;Châm đối sản sinh loạn sổ đích cơ chế, C++11 tương hội đề cung tam chủng diễn toán pháp, mỗi nhất chủng diễn toán pháp đô hữu kỳ cường hạng hòa nhược hạng:

Dạng bản loại Chỉnh sổ / phù điểm sổ Phẩm chất Tốc độ Trạng thái sổ *
linear_congruential Chỉnh sổ Đê Trung đẳng[ lai nguyên thỉnh cầu ] 1
subtract_with_carry Lưỡng giả giai khả Trung đẳng Khoái 25
mersenne_twister Chỉnh sổ Giai Khoái 624

C++11 tương hội đề cung nhất ta tiêu chuẩn phân bố: uniform_int_distribution (Ly tán hình quân quân phân bố), bernoulli_distribution(Bá nỗ lợi phân bố), geometric_distribution (Kỉ hà phân bố), poisson_distribution (Bặc ngõa tùng phân bố), binomial_distribution (Nhị hạng phân bố), uniform_real_distribution (Ly tán hình quân quân phân bố), exponential_distribution (Chỉ sổ phân bố), normal_distribution (Thường thái phân bố) hòa gamma_distribution (Già mã phân bố).

Để hạ miêu thuật nhất cá loạn sổ sinh thành vật kiện như hà do loạn sổ sinh thành dẫn kình hòa phân bố cấu thành:

std::uniform_int_distribution<int>distribution(0,99);// dĩ ly tán hình quân quân phân bố phương thức sản sinh int loạn sổ, phạm vi lạc tại 0 đáo 99 chi gian
std::mt19937engine;// kiến lập loạn sổ sinh thành dẫn kình
autogenerator=std::bind(distribution,engine);// lợi dụng bind tương loạn sổ sinh thành dẫn kình hòa phân bố tổ hợp thành nhất cá loạn sổ sinh thành vật kiện
intrandom=generator();// sản sinh loạn sổ

Bao trang dẫn dụng[Biên tập]

Ngã môn khả dĩ thấu quá thật thể hóa dạng bản loạireference_wrapperĐắc đáo nhất cá bao trang dẫn dụng ( wrapper reference ). Bao trang dẫn dụng loại tự ô nhất bàn đích dẫn dụng. Đối ô nhậm ý vật kiện, ngã môn khả dĩ thấu quá mô bản loạirefĐắc đáo nhất cá bao trang dẫn dụng ( chí ô constant reference tắc khả thấu quácrefĐắc đáo ).

Đương dạng bản hàm thức nhu yếu hình tham đích dẫn dụng nhi phi kỳ khảo bối, giá thời bao trang dẫn dụng tựu năng phái thượng dụng tràng:

// thử hàm sổ tương đắc đáo hình tham 'r' đích dẫn dụng tịnh đối r gia nhất
voidf(int&r){r++;}

// dạng bản hàm thức
template<classF,classP>voidg(Ff,Pt){f(t);}

intmain()
{
inti=0;
g(f,i);// thật thể hóa 'g<void (int &r), int>'
// 'i' bất hội bị tu cải
std::cout<<i<<std::endl;// thâu xuất 0

g(f,std::ref(i));// thật thể hóa 'g<void(int &r),reference_wrapper<int>>'
// 'i' hội bị tu cải
std::cout<<i<<std::endl;// thâu xuất 1
}

Giá hạng công năng tương gia nhập tiêu đầu đương<functional>Chi trung, nhi phi thấu quá khoách triển ngữ ngôn lai đắc đáo giá hạng công năng.

Đa thái hàm sổ đối tượng bao trang khí[Biên tập]

Châm đối hàm sổ đối tượng đích đa thái bao trang khí ( hựu xưng đa thái hàm sổ đối tượng bao trang khí ) tại ngữ nghĩa hòa ngữ pháp thượng hòa hàm thức chỉ tiêu tương tự, đãn bất tượng hàm thức chỉ tiêu na ma hiệp ải. Chỉ yếu năng bị hô khiếu, thả kỳ tham sổ năng dữ bao trang khí tương dung đích đô năng dĩ đa thái hàm sổ đối tượng bao trang khí xưng chi ( hàm thức chỉ tiêu, thành viên hàm thức chỉ tiêu hoặc phảng hàm thức ).

Thấu quá dĩ hạ lệ tử, ngã môn khả dĩ liễu giải đa thái hàm sổ đối tượng bao trang khí đích đặc tính:

std::function<int(int,int)>func;// lợi dụng dạng bản loại 'function'
// kiến lập bao trang khí
std::plus<int>add;// 'plus' bị tuyên cáo vi 'template<class T> T plus( T, T );'
// nhân thử 'add' đích hình biệt thị 'int add( int x, int y )'
func=&add;// khả hành. 'add' đích hình tham hòa hồi phản trị hình biệt dữ 'func' tương phù

inta=func(1,2);// chú ý: Nhược bao trang khí 'func' một hữu tham khảo đáo nhậm hà hàm thức
// hội đâu xuất 'std::bad_function_call' lệ ngoại

std::function<bool(short,short)>func2;
if(!func2){// nhân vi thượng vị phú trị dữ 'func2' nhậm hà hàm thức, thử điều kiện thức vi chân

booladjacent(longx,longy);
func2=&adjacent;// khả hành. 'adjacent' đích hình tham hòa hồi phản trị hình biệt khả thấu quá hình biệt chuyển hoán tiến nhi dữ 'func2' tương phù

structTest{
booloperator()(shortx,shorty);
};
Testcar;
func=std::ref(car);// dạng bản loại 'std::ref' hồi truyện nhất cá struct 'car'
// kỳ thành viên hàm thức 'operator()' đích bao trang
}
func=func2;// khả hành. 'func2' đích hình tham hòa hồi phản trị hình biệt khả thấu quá hình biệt chuyển hoán tiến nhi dữ 'func' tương phù

Mô bản loạifunctionTương định nghĩa tại tiêu đầu đương<functional>,Nhi bất tu canh động đáo ngữ ngôn bổn thân.

Dụng ô nguyên biên trình đích hình biệt chúc tính[Biên tập]

Đối ô na ta năng tự hành sang kiến hoặc tu cải bổn thân hoặc kỳ tha trình thức đích trình thức, ngã môn xưng chi viNguyên biên trình.Giá chủng hành vi khả dĩ phát sinh tại biên dịch hoặc chấp hành kỳ. C++ tiêu chuẩn ủy viên hội dĩ kinh quyết định dẫn tiến nhất tổ doMô bảnThật hiện đích hàm thức khố, trình thức viên khả lợi dụng thử nhất hàm thức khố ô biên dịch kỳ tiến hành nguyên biên trình.

Để hạ thị nhất cá dĩ nguyên biên trình lai kế toán chỉ sổ đích lệ tử:

template<intB,intN>
structPow{
// recursive call and recombination.
enum{value=B*Pow<B,N-1>::value};
};

template<intB>
structPow<B,0>{
// ''N == 0'' condition of termination.
enum{value=1};
};
intquartic_of_three=Pow<3,4>::value;

Hứa đa diễn toán pháp năng tác dụng tại bất đồng đích tư liêu hình biệt; C++ mô bản chi việnPhiếm hình,Giá sử đắc đại mã năng canh khẩn thấu hòa hữu dụng. Nhiên nhi, diễn toán pháp kinh thường hội nhu yếu mục tiền tác dụng đích tư liêu hình biệt đích tư tấn. Giá chủng tư tấn khả dĩ thấu quá hình biệt chúc tính (type traits) ô mô bản thật thể hóa thời tương cai tư tấn tụy thủ xuất lai.

Hình biệt chúc tính năng thức biệt nhất cá vật kiện đích chủng loại hòa hữu quan nhất cá hình biệt ( class hoặc struct ) đích đặc trưng. Tiêu đầu đương<type_traits>Miêu thuật liễu ngã môn năng thức biệt na ta đặc trưng.

Để hạ đích lệ tử thuyết minh liễu mô bản hàm thức ‘elaborate’ thị như hà căn cư cấp định đích tư liêu hình biệt, tòng nhi thật thể hóa mỗ nhất đặc định đích diễn toán pháp (algorithm.do_it).

// diễn toán pháp nhất
template<boolB>structAlgorithm{
template<classT1,classT2>staticintdo_it(T1&,T2&){/*...*/}
};

// diễn toán pháp nhị
template<>structAlgorithm<true>{
template<classT1,classT2>staticintdo_it(T1,T2){/*...*/}
};

// căn cư cấp định đích hình biệt, thật thể hóa chi hậu đích 'elaborate' hội tuyển trạch diễn toán pháp nhất hoặc nhị
template<classT1,classT2>
intelaborate(T1A,T2B)
{
// nhược T1 vi int thả T2 vi float, tuyển dụng diễn toán pháp nhị
// kỳ tha tình huống tuyển dụng diễn toán pháp nhất
returnAlgorithm<std::is_integral<T1>::value&&std::is_floating_point<T2>::value>::do_it(A,B);
}

Thử chủng biên trình kỹ xảo năng tả xuất ưu mỹ, giản khiết đích đại mã; nhiên nhi trừ thác thị thử chủng biên trình kỹ xảo đích nhược xử: Biên dịch kỳ đích thác ngộ tấn tức nhượng nhân bất tri sở vân, chấp hành kỳ đích trừ thác canh thị khốn nan.

Dụng vu kế toán hàm sổ đối tượng phản hồi loại hình đích thống nhất phương pháp[Biên tập]

Yếu tại biên dịch kỳ quyết định nhất cá dạng bản phảng hàm thức đích hồi phản trị hình biệt tịnh bất dung dịch, đặc biệt thị đương hồi phản trị y lại ô hàm thức đích tham sổ thời. Cử lệ lai thuyết:

structClear{
intoperator()(int);// tham sổ dữ hồi phản trị đích hình biệt tương đồng
doubleoperator()(double);// tham sổ dữ hồi phản trị đích hình biệt tương đồng
};

template<classObj>
classCalculus{
public:
template<classArg>Argoperator()(Arg&a)const
{
returnmember(a);
}
private:
Objmember;
};

Thật thể hóa dạng bản loạiCalculus<Clear>,CalculusĐích phảng hàm thức kỳ hồi phản trị tổng thị hòaClearĐích phảng hàm thức kỳ hồi phản trị cụ hữu tương đồng đích hình biệt. Nhiên nhi, nhược cấp định loại biệtConfused:

structConfused{
doubleoperator()(int);// tham sổ dữ hồi phản trị đích hình biệt bất tương đồng
intoperator()(double);// tham sổ dữ hồi phản trị đích hình biệt bất tương đồng
};

Xí đồ thật thể hóa dạng bản loại Calculus<Confused> tương đạo trí Calculus đích phảng hàm thức kỳ hồi phản trị hòa loại biệt Confused đích phảng hàm thức kỳ hồi phản trị hữu bất đồng đích hình biệt. Đối ôintHòadoubleChi gian đích chuyển hoán, biên dịch khí tương cấp xuất cảnh cáo.

Mô bảnstd::result_ofBị TR1 dẫn tiến thả bị C++11 sở thải nạp, khả duẫn hứa ngã môn quyết định hòa sử dụng nhất cá phảng hàm thức kỳ hồi phản trị đích hình biệt. Để hạ,CalculusVer2Vật kiện sử dụngstd::result_ofVật kiện lai thôi đạo kỳ phảng hàm thức đích hồi phản trị hình biệt:

template<classObj>
classCalculusVer2{
public:
template<classArg>
typenamestd::result_of<Obj(Arg)>::typeoperator()(Arg&a)const
{
returnmember(a);
}
private:
Objmember;
};

Như thử nhất lai, tại thật thể hóaCalculusVer2<Confused>Kỳ phảng hàm thức thời, bất hội hữu hình biệt chuyển hoán, cảnh cáo hoặc thị thác ngộ phát sinh.

Mô bảnstd::result_ofTại TR1 hòa C++11 hữu nhất điểm bất đồng. TR1 đích bản bổn duẫn hứa thật tác tại đặc thù tình huống hạ, khả dĩ vô pháp quyết định nhất cá hàm thức hô khiếu kỳ hồi phản trị hình biệt. Nhiên nhi, nhân vi C++11 chi trì liễudecltype,Thật tác bị yếu cầu tại sở hữu tình huống hạ, giai năng kế toán xuất hồi phản trị hình biệt.

iota hàm sổ[Biên tập]

iota hàm sổ khả tương cấp định khu gian đích trị thiết định vi tòng mỗ trị khai thủy đích liên tục trị, lệ như tương liên tục thập cá chỉnh sổ thiết định vi tòng 1 khai thủy đích liên tục chỉnh sổ ( tức 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ).

#include<iostream>
#include<array>
#include<numeric>

std::array<int,10>ai;
std::iota(ai.begin(),ai.end(),1);
for(inti:ai){
std::cout<<i<<"";//1 2 3 4 5 6 7 8 9 10
}

Dĩ bị di trừ hoặc thị bất bao hàm tại C++11 tiêu chuẩn đích đặc tính[Biên tập]

Dự kế do Technical Report đề cung chi viện:

Diên hậu thảo luận:

  • Concepts (Khái niệm (C++))
  • Canh hoàn chỉnh hoặc tất bị đích lạp ngập hồi thu chi viện
  • Reflection
  • Macro Scopes

Bị di trừ hoặc phế khí đích đặc tính[Biên tập]

  • Tuần tự điểm (sequence point), giá cá thuật ngữ chính bị canh vi dịch đổng đích miêu thuật sở thủ đại. Nhất cá vận toán khả dĩ phát sinh ( is sequenced before ) tại lánh nhất cá vận toán chi tiền; hựu hoặc giả lưỡng cá vận toán bỉ thử chi gian một hữu thuận tự quan hệ ( are unsequenced ).
  • export
  • exception specifications
  • std::auto_ptr(Anh ngữ:std::auto ptr)Bịstd::unique_ptrThủ đại.
  • Phảng hàm thức cơ để loại biệt (std::unary_function, std::binary_function), hàm thức chỉ châm thích phối khí, loại biệt thành viên chỉ châm thích phối khí dĩ cập bảng định khí (binder).

Biên dịch khí thật hiện[Biên tập]

C++ biên dịch khí đối C++11 tân đặc tính đích chi trì tình huống:

Quan liên hạng mục[Biên tập]

  • C++ Technical Report 1
  • C11,C trình thức ngữ ngôn đích tối tân tiêu chuẩn
  • C++17,C++ đích tối tân tiêu chuẩn
  • Constexpr,Dụng ô biên dịch thời đích thường lượng dữ thường lượng hàm sổ.

Tham khảo tư liêu[Biên tập]

  1. ^N3376(PDF).[2012-07-12].( nguyên thủy nội dungTồn đương(PDF)Vu 2012-08-13 ).
  2. ^N2544(PDF).[2009-02-06].( nguyên thủy nội dungTồn đương(PDF)Vu 2008-12-21 ).

C++ tiêu chuẩn ủy viên hội văn kiện[Biên tập]

Văn chương[Biên tập]

Ngoại bộ liên kết[Biên tập]