Рассмотрим следующий код простого класса с конструктором, принимающим аргумент со значением по умолчанию.
// Version 1
template <class T>
struct object1 {
using type = T;
constexpr object1(const type& val = type()): value(val) {}
type value;
};
// Version 2
template <class T>
struct object2 {
using type = T;
constexpr object2(const type& val = {}): value(val) {}
type value;
};
// Main
int main(int argc, char* argv[]) {
using type = /* Something */;
object1<type> x1;
object2<type> x2;
auto value1 = x1.value;
auto value2 = x2.value;
// Is there certain types for which value1 and value2 will be different?
return 0;
}
Являются ли две версии конструктора эквивалентными (всегда будут давать один и тот же результат для любого T
) или они разные?
Если они разные, не могли бы вы привести пример T
, для которого они привели бы к разным результатам?
T t = {};
иT t = T();
? - person 463035818_is_not_a_number   schedule 15.08.2018