user-defined-literals相关内容
什么是C++20的字符串文字运算符模板?在这方面,CpPreferences的example相当简明,我不是很清楚: struct A { A(const char *); auto operator(const A&) const = default; }; template A operator ""_a(); 在尝试理解此功能时,我刚刚了解到在C++中可以使用数
..
为什么编译失败? char programDate[] = "("__DATE__")"; 但这编译得很好(见空间): char programDate[] = "(" __DATE__")"; 我知道 VC2015 现在支持文字运算符.但这不应该在编译阶段吗?__DATE__ 应该已经被预处理器处理了.这是怎么回事? 我想到了一些 Unicode/非 Unicode 构建的混合匹配
..
能够在 C++ 编译时创建和操作字符串有几个有用的应用.尽管可以在 C++ 中创建编译时字符串,但该过程非常繁琐,因为该字符串需要声明为可变字符序列,例如 using str = sequence; 字符串连接、子字符串提取等操作可以轻松实现为对字符序列的操作.是否可以更方便地声明编译时字符串?如果没有,是否有工作中的提案可以方便地声明编译时字符串? 为什么现有方法失败 理想情况下
..
我的问题听起来像是一个矛盾,但是除了 user-defined-literal .我不知道该如何引用新的文字语法. std :: string运算符“" s(const char * str,size_t len){返回std :: string(str,len);}assert("foo" s =="bar" s); 我记得听到用户定义的文字应该以 _ 前缀开头.这意味着该库为我们定义了
..
我有一堆测试向量,以十六进制字符串形式表示: MSG: 6BC1BEE22E409F96E93D7E117393172A MAC: 070A16B46B4D4144F79BDD9DD04A287C MSG: 6BC1BEE22E409F96E93D7E117393172AAE2D8A57 MAC: 7D85449EA6EA19C823A7BF78837DFADE 等我需要以某种方式将它们
..
我在用户定义的字符串文字中找到了以下内容: 对于用户定义的字符串文字,令str为不带后缀的文字: a)如果重载集包含带有非类型模板参数的字符串文字运算符模板,且该字符串的str如果是格式良好的模板参数,则将用户定义的文字表达视为函数调用 operator“”。 X(), 这对我来说听起来有点神秘。有人可以举一个例子说明如何使用它吗? 以下内容根本不起作用,我无法
..
void运算符“” test(const char * str,size_t sz) { std :: cout
..
我什至不确定是否允许使用否定的用户定义文字。如果没有,为什么将它们排除在外? 例如,我想使用: auto money_i_owe_jack = -52_jpy; 这是我使用gcc 4.7.2尝试过的操作: constexpr int64_t运算符“” _jpy(long long l) { return static_cast(l)
..
再一次,在回答另一个问题时,我忘记了(我的错)仅当找到整数或浮点文字时,才从声明集中选择文字运算符模板。 例如: template constexpr int运算符“” _x(){ 返回0; } 它可以用作 10_x ,但不能同时用作 foo_x 或“ foo” _x。 除了显而易见的原因是 因为标准说的是 ,在处理字符串文
..
在 cppreference 上,有人提到可以使用模板用户文字运算符,但有一些限制: 如果文字运算符是模板,则它必须具有一个空参数列表并且可以具有只有一个模板参数,该参数必须是元素类型为 char 的非类型模板参数包,例如 模板双重运算符“” _x(); 所以我在下面的代码中写了一个: 模板 双重运算符“” _x(
..
有什么方法可以在左值上调用用户定义的文字吗? 例如我想 int运算符“” _xor1(int a){返回a ^ 1; } //工作正常 17_xor1; auto myint = get_something_only_availabe_at_runtime(); //是否可以在myint上使用_xor1? _xor1(myint); //不起作用
..
以下代码在GCC和Clang中均进行编译: long double运算符“” _a(long double); auto x = 0e1_a + 0; // OK 但不是这样(替换 _a 与 _e ): long double运算符“” __(long双); auto y = 0e1_e + 0; //错误:找不到数字文字运算符'operator“” _
..
请考虑以下内容: #include 命名空间X { void运算符“” _test(unsigned long long x) { std :: cout
..
我在 MyLiteral.h 中定义了以下用户定义的文字: namespace my_literals { constexpr uint64_t运算符“” _nanoseconds(无符号long long int值){ 返回值* 1000; } } 现在我可以在另一个标头中使用运算符 SomeComponent.h : 使用命名空间my_literals;
..
我正在学习用户定义的文字,并与以下测试代码混淆: std :: chrono: :seconds运算符“” _s(unsigned long long s){ return std :: chrono :: seconds(s); } std :: string运算符“” _str(const char * s,std :: size_t len){ 返回std :: stri
..
在我最初被介绍的语言中,有一个函数repeat(),它接受了一个字符串,并重复了n次.例如,repeat ("hi", 3)给出"hihihi"的结果. 我确实有几次使用此函数,但令我沮丧的是,我从未在C ++中找到类似的东西.是的,我可以轻松制作自己的产品或使其更易于使用,但是令我感到惊讶的是它尚未包含在内. 一个非常合适的地方是std::string: std::string
..
如何使用字面后缀将标识符由#identifier转换为MACRO中的字面量字符串? struct SomeType; SomeType operator "" _udl(const char* self); #define STRINGIFY_AS_UDL(id) /* #id _udl doesn't work */ /* How to have "id"_udl */ STRING
..
为什么无法编译? char programDate[] = "("__DATE__")"; 但这可以很好地编译(请参见空格): char programDate[] = "(" __DATE__")"; 我知道VC2015现在支持文字运算符.但是那不应该在编译阶段吗? __DATE__应该已经被预处理程序处理过.这是怎么回事? 我想到了Unicode/非Unicode构建
..
使用线路时 using std::literals::chrono_literals::operator""s; 在g ++ 6.3.0中,编译器发出警告,指出: 警告:保留不带'_'的文字运算符后缀以供将来标准化 using std::literals::chrono_literals::operator""s; 在MSVS中也发出了类似的警告.但是,clang 3.8
..
自C ++ 11起,就可以创建用户定义的文字.如预期的那样,可以从此类文字中返回复杂的结构.但是,当尝试使用123_foo.bar(): 这样的运算符时 struct foo { int n; int bar() const { return n; } }; constexpr foo operator ""_foo(unsigned long long test) {
..