小编ybu*_*ill的帖子

0是十进制文字还是八进制文字?

零总是为零,所以没关系.但在最近与我的朋友讨论时,他说今天几乎没有使用八进制文字.然后我突然意识到我的代码几乎所有的整数文字都是八进制的,即0.

0根据C++语法是八进制文字吗?标准说什么?

c++ zero octal

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

标准委员会关心的异域架构

我知道C和C++标准留下了语言实现的许多方面 - 仅仅因为如果存在具有其他特征的体系结构,那么为它编写符合标准的编译器是非常困难或不可能的.

我知道40年前任何电脑都有自己独特的规格.但是,我不知道今天使用的任何架构:

  • CHAR_BIT != 8
  • signed 不是两个补充(我听说Java有这个问题).
  • 浮点不符合IEEE 754(编辑:我的意思是"不是IEEE 754二进制编码").

我问的原因是我经常向人们解释C++不强制要求任何其他低级方面如固定大小的类型.这很好,因为与其他语言不同,它使你的代码在正确使用时可以移植(编辑:因为它可以移植到更多架构而不需要模拟机器的低级方面,例如符号+幅度架构上的二进制补码算法) .但我感到很难过,我自己也无法指出任何特定的架构.

所以问题是:哪些架构具有上述属性?

uint*_ts是可选的.

c c++ architecture

149
推荐指数
7
解决办法
1万
查看次数

LR,SLR和LALR解析器有什么区别?

LR,SLR和LALR解析器之间的实际区别是什么?我知道SLR和LALR是LR解析器的类型,但就解析表而言,它们的实际区别是什么?

以及如何显示语法是LR,SLR还是LALR?对于LL语法,我们只需要显示解析表的任何单元格都不应包含多个生产规则.LALR,SLR和LR的任何类似规则?

例如,我们如何才能显示语法

S --> Aa | bAc | dc | bda
A --> d
Run Code Online (Sandbox Code Playgroud)

是LALR(1)但不是SLR(1)?


编辑(ybungalobill):我没有得到一个满意的答案,LALR和LR之间有什么区别.因此LALR的表格较小,但它只能识别LR语法的一个子集.有人可以详细说明LALR和LR之间的区别吗?LALR(1)和LR(1)足以应答.它们都使用1个令牌前瞻,两个都是表驱动的!它们有何不同?

compiler-construction algorithm grammar parsing

101
推荐指数
5
解决办法
8万
查看次数

68
推荐指数
1
解决办法
8265
查看次数

如何将boost :: posix_time :: ptime转换为time_t?

是否有一些"标准"方式或我能做的最好的是直接通过减去来计算它gregorian::date(1970,1,1)

c++ boost boost-date-time

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

转义#define宏中的#符号?

在没有进入血腥细节的情况下,我想使用一个#define扩展为a 的宏,#include但是'#'符号会混淆预处理器(因为它认为我想引用一个参数.)

例如,我想做这样的事情:

#define MACRO(name) #include "name##foo"
Run Code Online (Sandbox Code Playgroud)

并使用它:

MACRO(Test)
Run Code Online (Sandbox Code Playgroud)

这将扩展到:

#include "Testfoo"
Run Code Online (Sandbox Code Playgroud)

简单的#符号导致预处理器进入barf.MinGW给我以下错误:

'#' is not followed by a macro parameter

我想我需要逃避#符号,但如果这是可能的话,我不会.

是的,宏确实很邪恶......

c c++ macros c-preprocessor preprocessor-directive

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

如何使用CMake通过命令行定义C++预处理器宏?

我尝试在CMake的命令行中设置预处理器宏.我试过了:

set generator="Visual Studio 8 2005"
set params=-D MY_MACRO=1
cmake.exe -G %generator% %params% ..\some_project
Run Code Online (Sandbox Code Playgroud)

但是我在编译时既没有定义,也没有MY_MACRO在CMake生成的文件中找到该名称,除了CMakeCache.txt它在表单中的位置:

MY_MACRO:UNINITIALIZED=1
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

c++ cmake

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

实现是否应该防止逗号重载?

例如uninitialized_copy,在标准中定义为:

功效:

for (; first != last; ++result, ++first)
  ::new (static_cast<void*>(&*result))
    typename iterator_traits<ForwardIterator>::value_type(*first);
Run Code Online (Sandbox Code Playgroud)

如果从字面上理解,这是要求打电话operator ,(ForwardIterator, InputIterator).实际上这段代码打印Hello world!十次:

#include <memory>
#include <iterator>
#include <iostream>

using namespace std;

namespace N {     
    struct X : iterator<forward_iterator_tag, int> {
        pointer _p;
        X(pointer p) : _p(p) {}
        X& operator++() { ++_p; return *this; }
        X operator++(int) { X r(*this); ++_p; return r; }
        reference operator*() const { return *_p; }
        pointer operator->() const { return _p; }
    };

    bool …
Run Code Online (Sandbox Code Playgroud)

c++ comma-operator language-lawyer

26
推荐指数
1
解决办法
455
查看次数

如何在C++ 0x中使用`>>>`lexed?

>>>被贬低为>> >.但是如果第一个>关闭模板参数列表会发生什么,结果是否应该等于> > >> >>

它在以下代码中很重要:

template<class T> struct X { };

void operator >>(const X<int>&, int) { }

int main() {
    *new X<int>>> 1;
}
Run Code Online (Sandbox Code Playgroud)

c++ c++11

25
推荐指数
1
解决办法
383
查看次数

为什么复杂的memcpy/memset优越?

在调试时,我经常进入memcpy和memset的手写汇编实现.这些通常使用流指令(如果可用),循环展开,对齐优化等实现...我最近也遇到了由于glibc中的memcpy优化而导致的"错误".

问题是:为什么硬件制造商(英特尔,AMD)不能优化具体情况

rep stos
Run Code Online (Sandbox Code Playgroud)

rep movs
Run Code Online (Sandbox Code Playgroud)

被认可,并尽可能快地填写和复制他们自己的架构?

c optimization 64-bit x86 assembly

22
推荐指数
3
解决办法
9127
查看次数