#include #include "Array.hpp" // Function declarations int main(); Array ones( std::size_t const n ); // Function definitions int main() { Array data_1{5}; std::cout << data_1 << std::endl << std::endl; Array data_2{ data_1 }; std::cout << data_2 << std::endl << std::endl; Array data_3{ ones( 5 ) }; std::cout << data_3 << std::endl << std::endl; data_1 = data_3; std::cout << data_1 << std::endl << std::endl; data_1 = ones( 5 ); std::cout << data_1 << std::endl << std::endl; return 0; } Array ones( std::size_t const n ) { std::cout << "ones( " << n << " ) called..." << std::endl; if ( n == 0 ) { return Array{ 0 }; } else { Array one_array{ n }; for ( std::size_t k{0}; k < n - 1; ++k ) { one_array[k] = 1.0; } return one_array; } } /******************************************************************** ******************************************************************** // Note that the GNU C++ compiler is very intelligent // If // Array data_3{ ones( 5 ) }; // is called with this function, it simply initializes // data_3 and does alway with the temporary local variable // of 'one_array', so no move constructor is required! Array ones( std::size_t const n ) { std::cout << "ones( " << n << " ) called..." << std::endl; Array one_array{ n }; for ( std::size_t k{0}; k < n - 1; ++k ) { one_array[k] = 1.0; } return one_array; } ******************************************************************** ********************************************************************/