배열 및 값 초기화에 대한 질문이 두 개 있습니다. here 및 here입니다. 는하지만이 코드로, 나는 잃었어요 : 그 값이 제로가 초기화되지 않습니다으로왜 std :: array <int, 10> x는 0으로 초기화되지 않지만 std :: array <int, 10> x = std :: array <int, 10>() 인 것 같습니다.
예상대로#include <iostream>
#include <iomanip>
#include <array>
template <class T, class U = decltype(std::declval<T>().at(0))>
inline U f1(const unsigned int i)
{T x; return x.at(i);}
template <class T, class U = decltype(std::declval<T>().at(0))>
inline U f2(const unsigned int i)
{T x = T(); return x.at(i);}
int main()
{
static const unsigned int n = 10;
static const unsigned int w = 20;
for (unsigned int i = 0; i < n; ++i) {
std::cout<<std::setw(w)<<i;
std::cout<<std::setw(w)<<f1<std::array<int, n>>(i);
std::cout<<std::setw(w)<<f2<std::array<int, n>>(i);
std::cout<<std::setw(w)<<std::endl;
}
return 0;
}
는, 임의의 값을 반환 f1
.
0 0 0
1 61 0
2 0 0
3 0 0
4 297887440 0
5 32767 0
6 4196848 0
7 0 0
8 297887664 0
9 32767 0
는 개인적으로 내가
f2
이/임의의 값 및 복사와 배열을 생성
x
로 이동합니다 생각 : 그러나
f2
독점적으로 0 값을 반환하는 것 같다. 그러나 그럴 것 같지 않습니다.
- 이유 :
그래서, 나는이 개 질문이?
- Do C++ 11
std::array<T, N>
및 C-styleT[N]
은 이러한 상황에서 동일한 동작을합니까?=
없이 우리와 같이 초기화{}
또는()
사용
'T()'는 값으로 초기화되는'T'입니다. 그리고'T'가 C 스타일 배열 타입이라면 유효하지 않은 구문입니다. 'T x = {};'또는'T x {};'는보다 일반적으로 적용 가능한 구문입니다. – Casey
@ Casey 값 초기화는 C 스타일 배열에 적용됩니다. 'T'가 단순형 지정자가 아닌 경우, 즉 유형을 명명하는 단일 식별자 또는 키워드가 아닌 경우 'T()'는 구문 오류입니다. C++ 03에서,'= {}'은 배열에만 적용되며 간단한'{}'는 에러입니다. – Potatoswatter
복제본은 값 초기화에 관한 것이지만이 질문은 기본 초기화에 관한 것입니다. 다시 열어 적절한 사본을 찾거나 대답하십시오. – Potatoswatter