我目前正在重新设计同事的代码。我觉得他经常使用像
这样的语法double a(anotherDouble); --- A
而不是
double a = anotherDouble; --- B
我想知道他的语法是否更快,也许方法A可以保存构造函数操作?
有人可以在这里给出一点见解吗?
谢谢,度过了愉快的假期!
答案 0 :(得分:1)
对于内置数据类型double
,它们都是相同的,没有性能差异。
如果是自定义课程。
首先是直接初始化,第二个叫做复制初始化。
好读:
<强> Is there a difference between copy initialization and direct-initialization 强>
答案 1 :(得分:1)
对于double
(或某种预定义类型),这无关紧要。我发现double pi=3.14;
比double pi(3.14);
更具可读性,但这是一个品味问题。
对于用户定义的class C
,编写C x = C(3);
可能涉及用于初始化的构造函数和用于复制的另一个构造函数,但有时它由编译器优化。
答案 2 :(得分:1)
此处根本没有调用赋值运算符。 A a = b;
总是调用构造函数。如果b
是A
类型的对象,则调用copy-constructor。如果b
是某个其他类型B
的对象,则调用合适的构造函数,例如A( const B& )
。在任何情况下,A a(b);
和A a = b;
将使用相同的构造函数调用一次完全相同的代码。
以下将不会编译,因为没有合适的构造函数,即使类TB
有合适的赋值运算符和默认构造函数:
#include <iostream>
class TA
{
public:
TA()
{
std::cout << "TA()" << std::endl;
}
TA( const TA& )
{
std::cout << "TA(const TA&)" << std::endl;
}
};
class TB
{
public:
TB()
{
std::cout << "TB()" << std::endl;
}
TB( const TB& )
{
std::cout << "TB(const TB&)" << std::endl;
}
TB& operator=( const TA& )
{
std::cout << "TB& operator=( const TA& )" << std::endl;
return ( *this );
}
};
int main( void )
{
TA la;
TB lb = la;
return ( 0 );
}
所以你的问题的答案是“不,它不是更快,它是100%相同”。
答案 3 :(得分:0)
double
不是一个开始的课程。
但无论如何,我从来没有见过为这两个构造生成不同代码的编译器,即使是类,它们也会生成等效的代码,标准会明确说明。