在左值上调用用户定义的文字
Invoke user-defined literal on lvalue
有什么方法可以调用左值上的用户定义文字吗?
例如我想
int operator "" _xor1(int a) { return a^1; }
// Works fine
17_xor1;
auto myint = get_something_only_availabe_at_runtime();
// Any way to use _xor1 on myint?
_xor1(myint); // Doesn't work
另外,在编译器资源管理器中编译以下代码时,我惊讶地发现它在运行时已全部解析,尽管所有数据在编译时都是可用的。这是为什么?
constexpr int operator "" _xor1(unsigned long long a) {
return a^1;
}
int main() {
// This code resolves the user defined literal at runtime on gcc,
// msvc and clang - I don't see why I can't use the
// user defined literal at runtime?
return 17_xor1;
}
我不确定您是否真的想要 - 如评论所述,您最好定义一个普通函数并调用它 - 但您可以使用以下方式调用它:
operator""_xor1(myInt);
有关详细信息,请参阅 User-defined literals。
不,您不能在运行时填充的变量上调用用户定义的文字。你也不需要。只需定义一个独立的函数,不同的代码片段可以在需要时调用,例如:
template <typename T>
T do_xor1(T a) { return a^1; }
int operator "" _xor1(unsigned long long a) { return do_xor1(a); }
// Works fine
17_xor1;
auto myint = get_something_only_availabe_at_runtime();
do_xor1(myint);
有什么方法可以调用左值上的用户定义文字吗?
例如我想
int operator "" _xor1(int a) { return a^1; }
// Works fine
17_xor1;
auto myint = get_something_only_availabe_at_runtime();
// Any way to use _xor1 on myint?
_xor1(myint); // Doesn't work
另外,在编译器资源管理器中编译以下代码时,我惊讶地发现它在运行时已全部解析,尽管所有数据在编译时都是可用的。这是为什么?
constexpr int operator "" _xor1(unsigned long long a) {
return a^1;
}
int main() {
// This code resolves the user defined literal at runtime on gcc,
// msvc and clang - I don't see why I can't use the
// user defined literal at runtime?
return 17_xor1;
}
我不确定您是否真的想要 - 如评论所述,您最好定义一个普通函数并调用它 - 但您可以使用以下方式调用它:
operator""_xor1(myInt);
有关详细信息,请参阅 User-defined literals。
不,您不能在运行时填充的变量上调用用户定义的文字。你也不需要。只需定义一个独立的函数,不同的代码片段可以在需要时调用,例如:
template <typename T>
T do_xor1(T a) { return a^1; }
int operator "" _xor1(unsigned long long a) { return do_xor1(a); }
// Works fine
17_xor1;
auto myint = get_something_only_availabe_at_runtime();
do_xor1(myint);