나는 오픈 소스 프로그램을 유지하고 있으며 내 사용자 중 한 명은 전에 사용 해본 적이없는 clang
으로 컴파일되지 않는다고보고했다. 내가 얻는 오류 중 하나는 입니다. * 경고 : 함수 유형 'junky_t'에 대한 한정자 (일명 'void (const int &, const int &)')의 동작이 명시되지 않았습니다. *.이 const 지정자가 비정상적인 동작을하는 이유는 무엇입니까?
$clang -DHAVE_CONFIG_H -g -g -O3 -Wall -MD -Wpointer-arith -Wshadow -Wwrite-strings -Wcast-align -Wredundant-decls -Wdisabled-optimization -Wfloat-equal -Wmultichar -Wmissing-noreturn -Woverloaded-virtual -Wsign-promo -funit-at-a-time -Weffc++ -D_FORTIFY_SOURCE=2 -MT demo.o -MD -MP -c -o demo.o demo.cpp
demo.cpp:5:5: warning: qualifier on function type 'junky_t' (aka 'void (const int &, const int &)') has unspecified behavior
const junky_t *junk;
^~~~~~~~~~~~~
1 warning generated.
는, 클래스 demo
이있는 함수에 대한 함수 포인터를 가지고 :
typedef void junky_t(const int &foo,const int &bar);
class demo {
public:;
const junky_t *junk;
};
그리고 여기에 내가 컴파일 할 때 무슨이다 : 나는이 문제를 보여주는 작은 프로그램을 만들었습니다 많은 const 참조가 필요한 서명. demo
클래스의 const
은 junk
이 변경되지 못하도록되어 있습니다. 함수 자체가 const
으로 간주 될 수 있기 때문에 분명히 모호합니다. gcc
또는 llvm
으로 컴파일하는 데 문제가 없지만 Mac에서는 clang
으로 컴파일되지 않습니다. 어떻게해야합니까?
쓰기 쓰기, 당신은'junky_t 필요 * const 정크'. –
http://stackoverflow.com/a/7739009/412080 –
const가 의미하는 바는 무엇이라고 생각하십니까? – PlasmaHH