标签: string-literals

字符串文字不允许作为非类型模板参数

以下引用来自Addison Wesley的C++模板.有人可以帮助我用简单的英语/外行人的术语来理解它的要点吗?

因为字符串文字是具有内部链接的对象(两个字符串文字具有相同的值但在不同的模块中是不同的对象),所以您不能将它们用作模板参数:

c++ templates string-literals

37
推荐指数
3
解决办法
5784
查看次数

如何让Jade停止HTML编码元素属性,并生成一个文字字符串值?

UPDATE Jade v0.24.0使用!=属性语法修复此问题.option(value!='<%= id %>')


我正在尝试<option>使用jade 构建一个,其中选项的值是UnderscoreJS模板标记:<%= id %>但我无法让它工作,因为jade将我的标记文本转换为&lt;= id &gt;.

这是我的Jade标记:

script(id="my-template", type="text/template")
  select(id="type")
    &lt;% _.each(deviceTypes, function(type){ %>
    option(value='&lt;%= type.id %>') <%= type.name %>
    &lt;% }) %>
Run Code Online (Sandbox Code Playgroud)

我希望它能产生这个html:

<script id="my-template" type="text/template">
  <select id='type'>
    <% _.each(deviceTypes, function(type){ %>
    <option value="<%= type.id %>"> <%= type.name %> </option>
    <% }) %>
  </select>
</script>
Run Code Online (Sandbox Code Playgroud)

但我得到的是这样的:

<script id="my-template" type="text/template">
  <select id='type'>
    <% _.each(deviceTypes, function(type){ %>
    <option value="&lt;%= type.id %&gt;"> <%= type.name %> </option>
    <% }) …
Run Code Online (Sandbox Code Playgroud)

templates html-encode string-literals underscore.js pug

37
推荐指数
3
解决办法
4万
查看次数

将字符串文字限制为仅限文本

我知道OverloadedStrings语言编译指示包含fromString所有字符串文字的隐含.我想要做的不是实际上重载字符串,而只是改变它们的含义以便它们总是被转换为Text,因此,使用字符串文字作为字符列表应该导致类型错误.

如果不导入IsString该类的String实例,则导入该类似乎是不可能的.ghc是否为我提供了一些限制字符串文字的方法Text

haskell ghc string-literals overloaded-strings

36
推荐指数
1
解决办法
3632
查看次数

decltype("Hello")的结果是什么?

我从我尝试过的所有编译器中得到了意想不到的结果(GCC 4.7.2,GCC 4.8.0 beta,ICC 13.0.1,Clang 3.2,VC10):

#include <type_traits>

int main()
{
    // This will fire
    static_assert(
        std::is_same<decltype("Hello"), char const[6]>::value, 
        "Error!"
        );
}
Run Code Online (Sandbox Code Playgroud)

我原本以为上面的编译时断言不会触发,但确实如此.毕竟,这个没有(如预期的那样):

#include <type_traits>

int main()
{
    char const hello[6] = "Hello";

    // This will not fire
    static_assert(
        std::is_same<decltype(hello), char const[6]>::value, 
        "Error!"
        );
}
Run Code Online (Sandbox Code Playgroud)

那么decltype("Hello")根据C++ 11标准的结果是什么(参考文献受到高度赞赏)?我应该将它与什么进行比较,以便上面的编译时断言不会触发?

c++ decltype string-literals c++11

36
推荐指数
1
解决办法
1845
查看次数

%S在PHP,HTML或XML中意味着什么?

我正在查看Webmonkey的PHP和MySql教程,第2课.我认为这是一个PHP文字.什么%s意思?print_f()至少在前几个代码块中,它位于while循环中的函数内部.

printf("<tr><td>%s %s</td><td>%s</td></tr>n", ...

html php xml string-literals

33
推荐指数
3
解决办法
6万
查看次数

如何在JavaScript中"实例化"原始字符串(字符串文字)

在JavaScript中,我可以通过以下方式声明字符串;

var a = "Hello World";
var b = new String("Hello World");
Run Code Online (Sandbox Code Playgroud)

但是a不是String的实例......

console.log(a instanceof String); //false;
console.log(b instanceof String); //true;
Run Code Online (Sandbox Code Playgroud)

那么如何找到类型或" instanceof"字符串文字?

可以强制JavaScript new String()为每个字符串文字创建一个?

javascript string instanceof string-literals

31
推荐指数
3
解决办法
3万
查看次数

为什么输出流优先使用“ \ n”而不是“ \ n”?

这个答案中,我们可以看到:

我猜想using '\n'或using 之间没有什么区别"\n",但是后者是一个(两个)字符的数组,必须逐个字符地打印,为此必须建立一个循环,这比输出单个字符更为复杂。

重点矿

这对我来说很有意义。我认为,输出const char*需要一个循环,这将测试空终止符,其必须推出比更多的操作,比方说,一个简单的putchar(不是暗示std::coutchar代表们呼吁-它只是引进一个实例的简化)。

说服我使用

std::cout << '\n';
std::cout << ' ';
Run Code Online (Sandbox Code Playgroud)

而不是

std::cout << "\n";
std::cout << " ";
Run Code Online (Sandbox Code Playgroud)

在这里值得一提的是,我知道性能差异几乎可以忽略不计。但是,有些人可能会争辩说,前一种方法的意图是实际上传递单个字符,而不是恰好是一个char长字符(如果算上是2 char s '\0')的字符串文字。

最近,我为使用后一种方法的人做了一些代码修改。我对此案发表了一点评论,然后继续。然后,开发人员感谢我,并说他甚至都没有想到这种差异(主要集中在意图上)。完全没有影响(毫不奇怪),但是采用了更改。

然后,我开始怀疑这种变化到底有多重要,所以我狂奔。令我惊讶的是,当在带有标志的GCC(树干)上进行测试时,它显示出以下结果-std=c++17 -O3。为以下代码生成的程序集:

#include <iostream>

void str() {
    std::cout << "\n";
}

void chr() {
    std::cout << '\n';
}

int main() {
    str();
    chr();
}
Run Code Online (Sandbox Code Playgroud)

我很惊讶,因为看起来chr() …

c++ performance cout string-literals

29
推荐指数
3
解决办法
1549
查看次数

Java和.NET字符串文字在哪里?

关于 .NET中字符串文字的最新问题引起了我的注意.我知道字符串文字被实习,因此具有相同值的不同字符串引用同一个对象.我也知道字符串可以在运行时实现:

string now = DateTime.Now.ToString().Intern(); 
Run Code Online (Sandbox Code Playgroud)

显然,在运行时实例化的字符串驻留在堆上,但我假设文字放在程序的数据段中(并且在我对所述问题的回答中这样说).但是我不记得在任何地方看到这个.我认为这是这种情况,因为我是如何做到这一点以及ldstrIL指令用于获取文字并且似乎没有进行分配的事实似乎支持我.

简而言之,字符串文字在哪里?它是在堆上,数据段还是我没想过的某个地方?


编辑:如果字符串文字确实驻留在堆上,它们何时分配?

.net java string-literals string-table

28
推荐指数
2
解决办法
8727
查看次数

在javascript中将字符串转换为对象数组的最佳方法?

我想在javascript中将下面的字符串转换为数组.

{a:12, b:c, foo:bar}
Run Code Online (Sandbox Code Playgroud)

如何将此字符串转换为对象数组?有什么好主意吗?

javascript arrays jquery literals string-literals

28
推荐指数
3
解决办法
8万
查看次数

如何在C ++中使用memset?

我来自Python,最近学习C ++。我正在学习一个名为C / C ++的函数,memset并从https://www.geeksforgeeks.org/memset-in-cpp/网站中遵循在线示例,在该示例中我遇到了一些编译错误:

/**
 * @author      : Bhishan Poudel
 * @file        : a02_memset_geeks.cpp
 * @created     : Wednesday Jun 05, 2019 11:07:03 EDT
 * 
 * Ref: 
 */

#include <iostream>
#include <vector>
#include <cstring>

using namespace std;

int main(int argc, char *argv[]){
    char str[] = "geeksforgeeks";

    //memset(str, "t", sizeof(str));
    memset(str, 't', sizeof(str));

    cout << str << endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用单引号't'时出错
这将打印多余的字符。

tttttttttttttt!R@`
Run Code Online (Sandbox Code Playgroud)

在双引号中使用“ t”时出错

tttttttttttttt!R@`
Run Code Online (Sandbox Code Playgroud)

如何在C ++中使用memset?

进一步的研究此处
提供了具有缺点的优秀教程memsethttps : //web.archive.org/web/20170702122030/https …

c++ string initialization memset string-literals

28
推荐指数
4
解决办法
3599
查看次数