【问题标题】:Custom String Literals自定义字符串文字
【发布时间】:2012-07-19 07:25:25
【问题描述】:

出于好奇,我想知道不同的文件如何分配某些符号以将它们的常规 c 字符串文字更改为其他文字。

例如...

在Objective-C中,NSString字面量可以写成@"..."

在 C++ 中(我认为),C++ 字符串字面量写成 S"..."

在 wchar 库中,wchar_t 字面量是 writtel L"..."

谁能告诉我如何做一个字符串,比如 MyClass 字面量为#"..."

谢谢

【问题讨论】:

  • 这些都是用 C++ 实现的。据我所知,S"" 不存在; L"" 预定义为表示宽字符文字。但是,C++11 实现了user-defined literals。即便如此,他们也只能走到最后,不以下划线开头的任何内容都是保留的,IIRC。
  • L"" 在哪里定义? PS 也许 S"" 是 c#
  • 它不在任何标题中;它在语言本身中,就像int 和所有其他关键字一样。
  • c 编译器是否只是假设 wchar 存在?
  • 不太熟悉预处理器技术,但我认为您可以使用与自定义文字有点相似的预处理器来实现一些东西。

标签: c++ objective-c cstring string-literals wchar


【解决方案1】:

你只能使用这样的东西。

#include <iostream>
#include <string>

struct MyClass
{
public:
   MyClass(const char* a, size_t sz):
   s(a, sz)
   {
   }
   std::string get() const { return s; }
private:
   std::string s;
};

MyClass operator "" _M(const char* arr, size_t size) { return MyClass(arr, size); }

int main()
{
   MyClass c = "hello"_M;
   std::cout << c.get() << std::endl;
}

C++11 允许用户定义文字。 http://liveworkspace.org/code/cfff55e34d3b707e1bf0cb714e8e8f29
但是没有定义前缀文字的能力。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 2023-03-11
    • 2015-06-11
    • 2019-12-21
    • 2017-01-13
    相关资源
    最近更新 更多