我正在从关于常量的cplusplus.com 教程中学习 C++ 中的原始字符串。根据该站点上的定义,原始字符串应R"sequence(以)sequencewhere开始和结束,wheresequence可以是任何字符序列。
该网站的示例之一如下:
R"&%$(string with \backslash)&%$"
但是,当我尝试编译包含上述原始字符串的代码时,出现编译错误。
test.cpp:5:28: error: invalid character '$' in raw string delimiter
5 | std::string str = R"&%$(string with \backslash)&%$";
| ^
test.cpp:5:23: error: stray 'R' in program
Run Code Online (Sandbox Code Playgroud)
我在 Windows 和 Linux 上使用 g++ 和 clang++ 进行了尝试。他们都没有工作。
之间有什么区别
enum week{Mon, Tue, Wed, Thur, Fri, Sat, Sun};
enum week day = Wed;
Run Code Online (Sandbox Code Playgroud)
和
enum week{Mon, Tue, Wed, Thur, Fri, Sat, Sun};
int day = Wed;
Run Code Online (Sandbox Code Playgroud)
在 C?
我找不到使用类型变量而enum不是使用常规int.
算法头文件中不是已经有max函数了吗?和 by using namespace std;,我将函数导入到全局命名空间(它接受参数,在这种情况下两者都是整数,所以它不应该是一个重载)。
那么为什么没有任何命名冲突呢?
#include <iostream>
#include <algorithm>
using namespace std;
int max(int a, int b)
{
return (a > b) ? a : b;
}
int main()
{
cout << max(5, 10) << endl;
}
Run Code Online (Sandbox Code Playgroud) 我是组装新手,我正在从头开始编程学习它。在第 41 页和第 42 页,该书讨论了索引寻址模式。
内存地址引用的一般形式是:
ADDRESS_OR_OFFSET(%BASE_OR_OFFSET,%INDEX,MULTIPLIER)
所有字段都是可选的。要计算地址,只需执行以下计算:
FINAL ADDRESS = ADDRESS_OR_OFFSET + %BASE_OR_OFFSET + MULTIPLIER * %INDEX
ADDRESS_OR_OFFSET 和 MULTIPLIER 必须都是常量,而另外两个必须是寄存器。如果任何部分被遗漏,它只是在等式中用零代替。
所以我决定稍微玩一下这个。我写了下面的一段代码:
.code32
.section .data
str:
.ascii "Hello world\0"
.section .text
.global _start
_start:
movl $2, %ecx # The index register.
mov str(, %ecx, ), %bl
movl $1, %eax
int $0x80
Run Code Online (Sandbox Code Playgroud)
我希望得到 72(H 的 ASCII 代码)作为程序的退出结果,因为没有任何乘数(根据这本书,应该用零代替)。但令人惊讶的是,我得到了 108(l 的 ASCII 代码)。我认为这可能是.ascii一回事,并试图查看是否可以使用不同的数据类型获得不同的结果。我得到了相同的结果.byte。
我尝试使用 AT&T 语法在 x86 程序集中查找索引寻址模式,但找不到任何有用的信息(可能是因为我不知道要搜索什么)。
有什么我遗漏的或者是书中的错误吗?鉴于我是该领域的新手,如果您详细说明,我真的很感激。