相关疑难解决方法(0)

C++ 11的原始字符串文字R"(...)"中括号的基本原理是什么?

C++ 11中引入了一个非常方便的特性,称为原始字符串文字,它是没有转义字符的字符串.而不是写这个:

  regex mask("\\t[0-9]+\\.[0-9]+\\t\\\\SUB");
Run Code Online (Sandbox Code Playgroud)

你可以简单地写一下:

  regex mask(R"(\t[0-9]+\.[0-9]+\t\\SUB)");
Run Code Online (Sandbox Code Playgroud)

更具可读性.但是,请注意字符串周围的额外括号,以定义原始字符串文字.

我的问题是,为什么我们甚至需要这些呢?对我来说,它看起来很丑陋和不合逻辑.以下是我看到的缺点:

  • 额外的冗长,而整个功能用于使文字更紧凑
  • 难以区分文字的主体和定义的符号

这就是我所说的难以区分的意思:

"good old usual string literal"
 ^-    body inside quotes   -^

R"(new strange raw string literal)"
   ^- body inside parenthesis  -^
Run Code Online (Sandbox Code Playgroud)

以下是专业人士:

  • 更灵活,原始字符串中可用的字符更多,尤其是与分隔符一起使用时: "delim( can use "()" here )delim"

但是,嘿,如果你需要更多的灵活性,你有旧的好逃脱字符串文字.为什么标准委员会决定用这些绝对不必要的括号来污染每个原始字符串文字的内容?那背后的理由是什么?我没有提到的专业是什么?

UPD Kerrek的答案很棒,但不幸的是,这不是一个答案.因为我已经描述过我理解它是如何工作的,它给了什么好处.自从我提出这个问题五年过去了,仍然没有答案.我仍然对这个决定感到沮丧.可以说这是一个品味问题,但我不同意.你使用了多少个空格,你如何命名你的变量,是这个SomeFunction()还是some_function()- 这是品味问题.而且我可以轻松地从一种风格切换到另一种风格.

但是这个?经过这么多年后仍然感到尴尬和笨拙.不,这不是味道.这是关于我们如何想要涵盖所有可能的情况,无论如何.每当我们需要编写特定于Windows的路径,或正则表达式或多行字符串文字时,我们注定要编写这些丑陋的parens.为了什么?..对于那些我们实际需要放入"字符串的罕见情况?我希望我参加委员会会议,他们决定这样做.我强烈反对这个非常糟糕的决定.我希望.现在我们注定了.

感谢您阅读此内容.现在我觉得好一点.

UPD2以下是我的备选方案,我认为两者都比现有方案好很多.

提案1.灵感来自python.不能使用三引号支持字符串文字:R"""Here is a string literal with any content, except for triple quotes, which you don't actually use that often."""

提案2.受常识的启发.支持所有可能的字符串文字,就像当前的一样:R"delim"content of string"delim".用空分隔符:R""Looks …

c++ standards string-literals c++11

68
推荐指数
2
解决办法
2万
查看次数

如何在Swift中实现这个多行字符串文字宏?

在我的GPUImage框架的Objective-C代码中,我有以下宏:

#define STRINGIZE(x) #x
#define STRINGIZE2(x) STRINGIZE(x)
#define SHADER_STRING(text) @ STRINGIZE2(text)
Run Code Online (Sandbox Code Playgroud)

这允许我在自定义过滤器子类中将多行顶点和片段着色器内联为NSString文字,如下所示:

NSString *const kGPUImagePassthroughFragmentShaderString = SHADER_STRING
(
 varying highp vec2 textureCoordinate;

 uniform sampler2D inputImageTexture;

 void main()
 {
     gl_FragColor = texture2D(inputImageTexture, textureCoordinate);
 }
);
Run Code Online (Sandbox Code Playgroud)

GPUImage需要这样才能提供包含在过滤器子类正文中的格式化顶点和片段着色器.将它们作为单独的文件运送会使框架无法编译到静态库中.使用上面的宏,我可以使这些着色器能够在框架代码和外部着色器文件之间进行复制和粘贴,而无需进行大量的重新格式化工作.

Swift取消了编译器宏,文档中有这样说:

复杂的宏在C和Objective-C中使用,但在Swift中没有对应的.复杂的宏是不定义常量的宏,包括带括号的,类似函数的宏.您可以在C和Objective-C中使用复杂的宏来避免类型检查约束或避免重新输入大量的样板代码.但是,宏可能使调试和重构变得困难.在Swift中,您可以使用函数和泛型来实现相同的结果,而不会有任何妥协.因此,C和Objective-C源文件中的复杂宏不可用于Swift代码.

根据"在Swift中,您可以使用函数和泛型来实现相同的结果而不会有任何妥协",Swift中是否有一种方法可以提供多行字符串文字而无需求助于一串串联操作?

objective-c swift

52
推荐指数
1
解决办法
4579
查看次数

Xcode 6 Beta没有编译

我有以下问题:我已经编写了我的第一个Swift应用程序(适用于iOS7),它运行良好.在更改了一些细微的细节(在某处添加了一个字符串)之后,它就不再编译了,即使我改变了之前的状态.

没有错误消息或类似的东西,它说它正在构建项目(编译Swift源文件)但它根本没有进展,即使经过几个小时的"构建".

我已经尝试过使用Xcode 6 b1和b2并且它们都是相同的:所有其他项目都在编译而没有任何问题,这一个被卡住了.

有没有人知道可能是什么问题以及如何解决它?

xcode compilation ios7

12
推荐指数
1
解决办法
6234
查看次数

UITextField多行

只是想知道是否可以在XCode中的UITextField中使用多行.我知道如何增加身高.但是对它的线条有所了解:/

xcode textfield ios

10
推荐指数
2
解决办法
5万
查看次数

Swift中的多行语句

我正在研究Swift教程,发现Swift有一种奇怪的方式来处理多行语句.

首先,我定义了标准String类的一些扩展:

extension String {
    func replace(target: String, withString: String) -> String {
        return self.stringByReplacingOccurrencesOfString(target, withString: withString)
    }

    func toLowercase() -> String {
        return self.lowercaseString
    }
}
Run Code Online (Sandbox Code Playgroud)

这按预期工作:

let str = "HELLO WORLD"
let s1 = str.lowercaseString.replace("hello", withString: "goodbye") // -> goodbye world
Run Code Online (Sandbox Code Playgroud)

这不起作用:

let s2 = str
            .lowercaseString
            .replace("hello", withString: "goodbye")
// Error: could not find member 'lowercaseString'
Run Code Online (Sandbox Code Playgroud)

如果我用lowercaseString函数调用替换属性的引用,它再次起作用:

let s3 = str
            .toLowercase()
            .replace("hello", withString: "goodbye") // -> goodbye world
Run Code Online (Sandbox Code Playgroud)

Swift语言规范中是否有任何内容可以防止将属性划分为自己的行?

Swift Stub的代码.

multiline swift

5
推荐指数
1
解决办法
4543
查看次数

Swift 中的多行字符串

如何在 Swift 中创建多行字符串?这是我尝试过的:

var myMultilineString = "This is a " + "\n" + "multiline string"
print(myMultilineString)
Run Code Online (Sandbox Code Playgroud)

我想让它打印:

这是一个

多行字符串

string multiline swift

4
推荐指数
2
解决办法
5598
查看次数