C++构造函数(速度)

C++构造函数(速度),c++,object,constructor,C++,Object,Constructor,我有时在调用构造函数时读到,它创建临时对象,然后将其复制到true变量。所以我不应该把一些东西放进构造函数中,比如创建对象的计数器等等,而一些创建对象的语法应该比其他的更快 A a(10); A a = 10; // temporary object? A a = A(10); // temporary object? 那么我应该使用哪种类型的构造函数呢?的确,当你说a=10时,编译器原则上可以生成一个临时对象;或A=A10;,但当你说一个“a10”时,永远不会;。然而,标准明确允许省略这个

我有时在调用构造函数时读到,它创建临时对象,然后将其复制到true变量。所以我不应该把一些东西放进构造函数中,比如创建对象的计数器等等,而一些创建对象的语法应该比其他的更快

A a(10); 
A a = 10; // temporary object?
A a = A(10); // temporary object?

那么我应该使用哪种类型的构造函数呢?

的确,当你说a=10时,编译器原则上可以生成一个临时对象;或A=A10;,但当你说一个“a10”时,永远不会;。然而,标准明确允许省略这个不必要的副本,任何健全的编译器都将执行此优化

在GCC中,您可以禁止使用标志-fno-elide构造函数进行优化


但是,作为一种形式上的结果,后两种形式的初始化要求构造函数a::AIT不是显式的,而第一种形式的直接初始化也适用于显式构造函数。隐式转换的概念有些微妙,值得记住。

在发布模式下,它不会有什么不同,因为现在的编译器已经足够好,可以优化掉临时对象。尽管处于调试模式,但它们可能都会创建一个临时对象,以允许调试器有一种附加到对象创建的方式。

如果使用优化标志在发行版中编译,则编译器将删除技术上称为删除副本的副本@我可以给你一些代码,后者不编译,但前者编译。