본문 바로가기

프로그래밍/C++

How to initialize a constant class array




회사에 Visual C++ Special Interest Group이라는 메일링리스트가 있는데,
흥미있는 주제들이 오가곤 합니다.
그 중의 한 내용이 "How to initialize a constant class array"였는데,
저도 이전서부터 흥미를 가지고 있던 내용이라 참여하게 됐네요.

간단하게 VS 2010에서 아래와 같은 구문이 가능할까 입니다.
·         Foo() : myArray {1, 2, 3, 4} {} // constructor
·         array<int, 4> = {1, 2, 3, 4};

결론적으로 말하면 후자만 됩니다.
전자는 Initialize lists라는 C++0x의 표준입니다.
C++0x 도 요새 나오는 웹브라우저와 비슷해서 지원되는 내역이 따로 있더군요.
아쉽게도 아직 지원하지 않는다고 합니다.
근데, 밑은 그것이 가능한데 그 이유는 tr1을 지원하기 때문이랍니다.
std::tr1::array<> 클래스를 쓸 때 저런 초기화를 이제 지원한다는 건데,
VS 2010엔 가능하고, VS 2008에서도 서비스 팩을 깔면 가능하다고 하는군요.
const array를 생성하는 예제는 다음과 같습니다.

#include <array>
void main()
{
array<int, 4> const a = {1, 2, 3, 4};
int b = a[1]; 
a[2] = 3; // error C3892: 'a' : you cannot assign to a variable that is const
}

단지 안타까운 건 여전히 Member Variable로 const array를 선언할 수는 없다는 점입니다.

개인적으로 이런 식의 시도를 해봤습니다만..
struct Foo
{
auto at;
Foo(int x) { at = [&](int i) -> int 
static int tempArray[] = {1, x, x+x, x*x}; return tempArray[i]; }
};

안 돌아가더군요 흑흑.
Initialize lists가 지원되기를 기다리는 수밖에..
그러고보니 VS 2010에서 지원되는 tr1 라이브러리가 뭐뭐인지 정리된 곳 있나요?

아래는 VS 2010에서 지원되는 기능들입니다.

 

C++0x Core Language Features

VC9

VC10

Rvalue references

No

v2

    Rvalue references v2

No

v2

    Rvalue references for *this

No

No

    Initialization of class objects by rvalues

Yes

Yes

static_assert

No

Yes

auto

No

Yes

    Multi-declarator auto

No

Yes

    Removing old auto

No

Yes

    Trailing return types

No

Yes

Lambdas

No

v1.0

decltype

No

Yes

Right angle brackets

Yes

Yes

Extern templates

Yes

Yes

nullptr

No

Yes

Strongly typed enums

Partial

Partial

Forward declared enums

No

No

Extended friend declarations

Partial

Partial

Local and unnamed types as template arguments

Yes

Yes

C++0x Core Language Features: Concurrency

exception_ptr

No

Yes

Thread-local storage

Partial

Partial

C++0x Core Language Features: C99

__func__

Partial

Partial

C99 preprocessor

Partial

Partial

long long

Yes

Yes


'프로그래밍 > C++' 카테고리의 다른 글

메시지 처리기  (0) 2009.10.08
My C++ Tips  (4) 2009.02.18
STL에 대한 단상  (4) 2008.01.29
C++ 기본 문제 By Choo  (6) 2007.07.26
임시변수의 범위는 어디까지일까요  (2) 2007.07.13