问题描述
我正在查看构造函数的cppreference,发现了这一点:
class X {
int a,b,i,j;
public:
const int& r;
X(int i)
: r(a) // initializes X::r to refer to X::a,b{i} // initializes X::b to the value of the parameter i,i(i) // initializes X::i to the value of the parameter i,j(this->i) // initializes X::j to the value of X::i
{ }
};
构造b和i时,为什么使用不同的括号?第一个使用{},第二个使用()
有人可以向我解释吗?我尝试同时使用两者,但没有发现任何区别。
解决方法
构造b和i时,为什么使用不同的括号?
因为写它的人都选择这样做。他们为什么选择所做的工作只能由作者回答。
我找不到区别。
在这种情况下没有区别。
初始化类类型或涉及隐式转换时可能会有所不同。
使用引用成员通常是一个坏主意。引用成员引用另一个成员可能总是一个坏主意。
,在您的示例中没有区别,您可以使用它们中的任何一个,但是在某些其他上下文中存在一些区别,例如,可以使用花括号初始化矢量,请参见下面的程序。
#include<iostream>
#include<vector>
int main(){
std::vector<int> first(12,3,5,6); // Compile time error
std::vector<int> second{12,6}; // Ok
return 0;
}
希望,这可以帮助您了解不同之处,有关更多信息,您应该检查@Thomas Salik提及的链接。 Link。