C++字面值操作符

g++: "error: unable to find string literal operator"
g++: "warning: invalid suffix on literal"

我:之前写的代码还能好好地编译,使用了带有C++11编译选项后编译器居然说代码有问题,肯定是编译器错了!!!

例如以下代码:

#include <cstdio>
#define _SLO_ "string literal operator."
int main()
{
    printf("Hello "_SLO_);
    return 0;
}

然而,如果在"_SLO_"前面加一个空格,又可以正确地编译了,这时为什么呢?

继续阅读C++字面值操作符

C++字符串字面值常量

在C++中,一个字符串字面值(string literal)一般是指使用双引号("")包围起来的一段字符串,例如:

const char *s = "string literal";

有时,人们习惯于写成 char *s = "string literal",实际上这是不对的,因为C++中的字符串字面值是一个常量,将一个常量直接赋值给一个非const变量可能会造成不可预知的行为,例如:

char *s = "ttring literal";
s[0] = 's'; // undefined behavior

继续阅读C++字符串字面值常量

C++大整数运算(八):总结

C++大整数系列文章基本已经完成,主要介绍了无符号大整数的实现细节,基于无符号大整数的带符号大整数,以及基于无符号大整数的有理数实现。 本文计划对前面的过程做一下小小的总结,应该不会太长。

继续阅读C++大整数运算(八):总结

C++大整数运算(七):有理数

C++大整数运算系列文章在前五节讲述了实现一个无符号大整数类的基本方法,第六节介绍了如何使用无符号大整数实现一个带符号大整数类。 本文的目的是介绍有理数类的实现方法。

在数学上,可以表达为两个整数的比(a/b 且 b不为0)的数被定义为有理数。 为了便于统一表示和方便计算,我们规定有理数必须表示为其最简形式(比如2/4应当表示为1/2),整数的分母必须为1。 有了之前大整数类的工作基础,我们可以通过采用两个带符号大整数来表示有理数,也可以通过两个无符号大整数和一个符号位来表示有理数,考虑到二者编程难度相似且后者效率可能会更高一些,因此本文采用两个无符号大整数和一个符号位来表示。

继续阅读C++大整数运算(七):有理数

C++大整数运算(六):带符号大整数

C++大整数运算系列文章在前五节讲述了实现一个无符号大整数类的基本方法,而在实际应用中,通常还会有用到负数的情况。由于我们之前已经实现了无符号大整数类,重新再设计一个带符号大整数类无疑会做很多类似的且没有必要的工作。本文将介绍如何使用之前完成的无符号大整数类实现一个带符号大整数类。

继续阅读C++大整数运算(六):带符号大整数