让我们看下面的代码:
class const_int
{
public:
constexpr const_int(int data) : data_(data) {}
constexpr const_int(const const_int &) = default;
constexpr const_int(const_int &&) = default;
private:
int data_;
};
class test
{
public:
constexpr static const const_int USER = 42;
constexpr static const double NATIVE = 4.2;
};
// constexpr const const_int test::USER;
void pass_by_copie(double)
{
}
void pass_by_copie(const_int)
{
}
void pass_by_const_ref(const const_int&)
{
}
void pass_by_rvalue_ref(const_int&&)
{
}
int main(void)
{
pass_by_copie(test::NATIVE);
pass_by_copie(test::USER);
pass_by_const_ref(test::USER);
pass_by_rvalue_ref(const_int(test::USER));
return (0);
}
以下两行:
pass_by_copie(test::USER);
pass_by_const_ref(test::USER);
在下产生以下错误g++ 4.7
:
未定义对“test::USER”的引用
我知道没有test::USER
. (该行是故意注释的)
我有两个问题:
为什么需要显式实例
test::USER
而无需显式实例test::NATIVE
来调用函数pass_by_copie
?为什么我可以
pass_by_rvalue_ref
通过显式创建临时副本来调用,而编译器在调用时test::USER
无法(或不想)自己隐式创建相同的副本?pass_by_copie
test::USER
谢谢