爲了讓類內init選擇我想要的構造函數,似乎有必要使用類內init的賦值風格。In-class init(賦值樣式)vs構造函數的性能
class Foo {
// This lets me sets the vector size
std::vector<char> buf = std::vector<char>(BUF_SIZE);
// this didn't compile and made me realize finding another way to provide constructor parameters was necessary
// std::vector<char> buf{BUF_SIZE};
};
這是否意味着在這個風格初始化「BUF」,構建兩個對象,一個賦值運算符調用,第二個目的是破壞?或者這只是語法糖,而生成的代碼最終結果相同:
class Bar {
public:
Bar() : buf(BUF_SIZE) {}
std::vector<char> buf;
};
可能這是編譯器特定的嗎?
'的std ::矢量 BUF {} BUF_SIZE'和'的std ::矢量 BUF(BUF_SIZE)'做不同的事情 - 所以你要哪一個? –
UnholySheep
任何好的編譯器都會隱瞞這一點,但在C++ 17中,無論如何也沒有什麼可以隱藏的。 – chris
我澄清了我的帖子,指出我的目標是設置矢量的初始化大小,而不是提供任何初始值。 – Kevin