使用 () 或 {} 作为初始值设定项列表有什么区别
Whats the difference between using () or {} for an initializer list
我在查看构造函数的 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构造时,为什么用不同的括号?第一个使用 {},第二个使用 ()
谁能给我解释一下?我尝试同时使用两者,但没有发现任何区别。
When constructing for b and i, why do they use different brackets?
因为写它的人选择了这样做。他们为什么选择他们所做的,只能由作者来回答。
I can't find a difference.
在这种情况下没有区别。
初始化 class 类型或涉及隐式转换时可能会有所不同。
使用引用成员通常不是一个好主意。一个引用成员引用另一个成员可能总是一个坏主意。
在你的例子中没有区别,你可以使用它们中的任何一个,但是,在其他一些上下文中存在一些差异,例如,你可以使用花括号来初始化一个向量,见下面的程序。
#include<iostream>
#include<vector>
int main(){
std::vector<int> first(12,3,5,6); // Compile time error
std::vector<int> second{12,3,5,6}; // Ok
return 0;
}
希望,这可以帮助您理解差异,有关更多信息,您应该查看@Thomas Salik 提到的link。
Link.
我在查看构造函数的 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构造时,为什么用不同的括号?第一个使用 {},第二个使用 ()
谁能给我解释一下?我尝试同时使用两者,但没有发现任何区别。
When constructing for b and i, why do they use different brackets?
因为写它的人选择了这样做。他们为什么选择他们所做的,只能由作者来回答。
I can't find a difference.
在这种情况下没有区别。
初始化 class 类型或涉及隐式转换时可能会有所不同。
使用引用成员通常不是一个好主意。一个引用成员引用另一个成员可能总是一个坏主意。
在你的例子中没有区别,你可以使用它们中的任何一个,但是,在其他一些上下文中存在一些差异,例如,你可以使用花括号来初始化一个向量,见下面的程序。
#include<iostream>
#include<vector>
int main(){
std::vector<int> first(12,3,5,6); // Compile time error
std::vector<int> second{12,3,5,6}; // Ok
return 0;
}
希望,这可以帮助您理解差异,有关更多信息,您应该查看@Thomas Salik 提到的link。 Link.