깊은 조사를하고 대신 도움을받을 시간이 없으므로 사과드립니다. C++ 14 + 기본 값을 사용하는 인수에 대한 자동 유형 공제
는 간단한 코드를 고려해#include <iostream>
enum class PrintColour
{
COLOUR_1 = 0,
COLOUR_2 = 1,
};
void colour(auto c = PrintColour::COLOUR_1)
{
switch (c)
{
case PrintColour::COLOUR_1:
std::cout << "Colour 1" << std::endl;
break;
case PrintColour::COLOUR_2:
std::cout << "Colour 2" << std::endl;
}
}
int main()
{
// colour(); couldn't deduce template parameter ‘auto:1’
colour(PrintColour::COLOUR_1); // Fine!
}
가 컴파일하고 문제없이 실행 정확하게이 코드.
auto_param.cpp: In function ‘int main()’:
auto_param.cpp:27:10: error: no matching function for call to ‘colour()’
colour();
^
auto_param.cpp:13:6: note: candidate: template<class auto:1> void colour(auto:1)
void colour(auto c = PrintColour::COLOUR_1)
^~~~~~
auto_param.cpp:13:6: note: template argument deduction/substitution failed:
auto_param.cpp:27:10: note: couldn't deduce template parameter ‘auto:1’
colour();
^
그냥 바보 같은 점을 잃었거나 정말 바보 오전 전체를 오해 가능성이 가능성이 : 나는 주석을 해제하면 colour();
는하지만, g ++는 오류를 발생합니다.
함수 매개 변수를 auto
으로 선언해도 C++ 11 또는 C++ 14에서 기본값을 제공 할 수 있어야합니까? 나는 주어진 디폴트 값이 컴파일러로 하여금 매개 변수 유형을 추론 할 수있을 것이라고 생각했다. ...
미리 감사드립니다.
편집 1 :
그것은 여기 Is there a way to pass auto as an argument in C++?
점으로 착각하지 않도록 내가 함수에 auto
를 전달하지만, 필요하지 않습니다 내 질문에 명확하게 할 필요가 있다고 생각 auto
과 디폴트 값은이며, 앞서 언급 한 질문에서 고려되지 않은 것입니다.
편집 2 :
C++ (11)가 같은 매개 변수로 auto
를 전달하는 기능을하지만, C++ (14) 및 (g ++ 6.3.1 기본값이없는, 여기 의견에 명확히으로 "GNU ++ 14 ")로 보입니다. 내 원래의 질문은 C++ 11과 관련이 없지만 C++ 11이 auto
매개 변수를 지원하는지 여부는 제 질문과 다릅니다. 매개 변수로 auto
을 사용했지만 최소한의 표준 버전을 두 번 확인하는 것을 잊었습니다. 내 사과와 나는 이제 그것을 고쳤다.
g++ -std=c++11 auto_param.cpp -o auto_param
auto_param.cpp:13:14: error: use of ‘auto’ in parameter declaration only available with -std=c++14 or -std=gnu++14
나는 내 질문과 Is auto as a parameter in a regular function a GCC 4.9 extension?의 차이점을 분명히 알기를 바랍니다. 그렇지 않으면 말해주세요.
의 사용 가능한 복제가 [C++에서 인수로 자동 전달하는 방법이 있나요? (http://stackoverflow.com/questions/29944985/is-there-a-way-to- pass-auto-as-an-argument-in-c) –
* 여기서 '자동'이라고 가정하면 템플릿 매개 변수에 대한 구문 적 설탕 일 뿐이므로 매개 변수 유형을 추론 할 수 없으므로이 함수는 매개 변수를 사용하여 호출 할 수 없습니다 문맥. –
[GCC 4.9 확장 기능에서 자동으로 매개 변수로 사용할 수 있습니까?] (http://stackoverflow.com/questions/25879705/is-auto-as-a-parameter-in-a-regular-function -a-gcc-4-9-extension) – cpplearner