小编Pha*_*rap的帖子

如何防止GCC内联

GCC概述了一个声明 - 无论我多么努力地阻止它.我试过了

  • -fno-inline
  • -O0
  • __attribute__ ((noinline))
  • dummy asm("")

没有成功!这里的代码:

#include<iostream>

using namespace std;

struct A {
  A() {cout << "A::A()" <<endl; }
  A(const A& a) {cout << "A::A(copy)" <<endl; }
  A& operator=(const A& a) {cout << "A::=()" <<endl; return *this;}
};

A __attribute__ ((noinline)) func() 
{
  cout << "func()" << endl;
  A loc;
  asm("");
  return loc;
}

int main() {
  A a = func();
}
Run Code Online (Sandbox Code Playgroud)

不幸的输出(g ++(Ubuntu/Linaro 4.5.2-8ubuntu4)4.5.2)是

func()
A::A()
Run Code Online (Sandbox Code Playgroud)

声明A a = func(); ??

这个实验的原因是我想知道执行到这个语句时会发生什么(因为我需要控制如何完成):

A a = …
Run Code Online (Sandbox Code Playgroud)

c++ inline variable-assignment

6
推荐指数
2
解决办法
5132
查看次数

Noexcept equivilent in C#

I want to ask is there in C# analogue for C++ "noexcept" attribute for methods which does not generate any exceptions. Something like that:

    public int SomeMethod() noexcept
    {
     throw new ArgumentNullException (); //Compile error: Method with 'noexcept' 
attribute can't generate exceptions.
    }
Run Code Online (Sandbox Code Playgroud)

And when I want to call this method in my code I need not to think about try/catch block for this method.

.net c# language-features exception

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

为什么嵌套类在Java和C#之间表现不同?

我不明白为什么Java中出现以下代码错误:

public abstract class TestClass
{
    private final int data;

    protected TestClass(int data) { this.data = data; }

    public final class InnerClass extends TestClass
    {
    private InnerClass(int data) { super(data); }

    public static final TestClass CONSTANT = new InnerClass(5);
    }
}
Run Code Online (Sandbox Code Playgroud)

错误在于public static final TestClass CONSTANT = new InnerClass(5);部分.错误是:

我:\ Documents\NetBeansProjects\TestingGround\src\testingground\TestClass.java:22:错误:非静态变量这不能从静态上下文引用public static final TestClass CONSTANT = new InnerClass(5); ^ I:\ Documents\NetBeansProjects\TestingGround\src\testingground\TestClass.java:22:error:内部类中的非法静态声明TestClass.InnerClass public static final TestClass CONSTANT = new InnerClass(5); ^ modifier'static'仅允许在常量变量声明2中出错

如果我尝试在C#中实现相同,它可以正常工作.

public abstract class TestClass
{
    private …
Run Code Online (Sandbox Code Playgroud)

c# java

4
推荐指数
1
解决办法
110
查看次数

当您无法测量差异时,如何处理iterator :: difference_type?

我正在为第3个C方库编写C ++包装器。

该库提供了一些用于迭代一系列对象的功能。

我想编写一个迭代器来包装此行为,从而使迭代更容易,但是我无法考虑如何提供强制性的“差异”类型,因为迭代的对象没有有意义的相对顺序并且我正在使用的API不能提供预先查找可用对象数量的方法。

我无法计算对象的迭代次数,因为尽管这可以解决单个迭代器,但会使end()迭代器与其他迭代器之间的差异不确定。

c++ iterator difference

4
推荐指数
1
解决办法
1403
查看次数

MIPS 左加载字 (LWL) 和右加载字 (LWR) 指令的作用是什么?

最近我一直在研究 MIPS 指令集,当时我遇到了两个在其他指令集中没有见过的不寻常指令。

我环顾四周,想找到一个关于指令到底做什么的合理解释,但我所能弄清楚的是,它们在某种程度上与未对齐的内存访问有关。

例如,维基百科说

MIPS I 要求所有内存访问与其自然字边界对齐,否则会发出异常信号。为了支持有效的未对齐存储器访问,存在以“左”或“右”为后缀的加载/存储字指令。

但没有进一步详细说明这实际上意味着什么。

我能找到的最接近正确解释的是约翰·卢米斯博士的网站

通过使用一对特殊指令,可以仅在两条指令中加载或存储未对齐的字和双字。对于加载,LWL 指令与 LWR 指令配对。加载指令从对齐字中读取左侧或右侧字节(寄存器的左侧或右侧),并将它们合并到目标寄存器的正确字节中。

但这对我来说似乎仍然只是故事的一半,我很难弄清楚确切的细节。即我正在努力理解哪些地址的哪些字节将被移动到哪里。

那么这些指令到底有什么作用呢?

assembly mips instruction-set memory-alignment instructions

4
推荐指数
1
解决办法
5186
查看次数

使用枚举或#define?

我正在构建一个玩具解释器,我已经实现了一个包含令牌类型和值的令牌类.

令牌类型通常是一个整数,但我应该如何抽象int?

什么是更好的主意:

// #defines
#define T_NEWLINE 1
#define T_STRING 2
#define T_BLAH 3

/**
 * Or...
 */

// enum
enum TokenTypes
{
   t_newline = 1,
   t_string = 2,
   t_blah = 3
};
Run Code Online (Sandbox Code Playgroud)

c++

3
推荐指数
1
解决办法
1068
查看次数

VB相当于c#"属性反抗"

在C#中,有可能逃脱这个:

interface IImpliedReadOnly
{
int SomeNumber {get;}
}
class Implementation : IImpliedReadOnly
{
private int someNumber = 0;
public int SomeNumber {get{return someNumber;}set{someNumber=value;}}
}
Run Code Online (Sandbox Code Playgroud)

但我找不到在VB中执行此操作的等效方法.如果我在接口ReadOnly中创建属性,实现类必须匹配这些访问权限,并将属性声明为ReadOnly,而不是像C#中那样实现getter和setter.

有没有办法解决?如果没有,为什么VB不允许它?

.net c# vb.net

3
推荐指数
1
解决办法
195
查看次数

VB无法使用正确的函数来处理字符串

基本上,我正在尝试进行一些字符串操作来编辑目录.我找到了一些代码来尝试编辑目录,但是当我使用它时,它不会将'right'识别为函数并且只将它识别为正确的属性,从而产生错误.

我想知道是否有一些我没有导入的东西,或者"正确"是一个过时的功能,在VB6中使用但是被某些东西取代.

我的代码如下:

Dim Foo As String
Dim Bar As String
Bar = 'some form of directory input i.e. my.computer.currentdirectory
Foo = right(Bar, (Len(Bar) - InStrRev(Bar, "/")))
MsgBox(Foo)
Run Code Online (Sandbox Code Playgroud)

理想情况下,我需要一种更好的操作目录的方法或一种让"正确"功能正常工作的方法.

vb.net vba visual-studio-2010

2
推荐指数
1
解决办法
6357
查看次数

是否有一个不包围的字节/单词的名称?

某些处理器具有能够对字/字节进行算术运算而没有值环绕的寄存器(即,在字节的情况下,字节被钳位在0和255之间).我不确定,但我相信这是用于某些专为图像处理而设计的矢量扩展(其中一个钳位字节在表示RGB/RGBA值方面是有益的);

算术/寄存器是否有适当的名称,其中值被钳位并且不包装,或者它们是否一般被称为"非包装算术"/"非包装寄存器"?

math cpu-registers

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

是否有使用yield return实现的方法的命名约定?

当我记得yield return声明的存在时,我一直在给自己写一些涉及集合的工具.

然后我想知道,对于使用的yield return方法或返回的方法,是否存在已建立的命名约定Enumerable<T>

c#

2
推荐指数
1
解决办法
99
查看次数

C#中地图的等价物是什么?

在C++我正在使用map<string, map<string, string>> Any_name;.在C#中,这相当于什么?

c# c++

2
推荐指数
1
解决办法
1822
查看次数

C++/C语言独立内存分配

通常的做法是为C语言定义一个转换为new的宏,为C转换为malloc吗?(和等效的删除/免费宏)

c c++ memory-management

0
推荐指数
1
解决办法
200
查看次数

标准对成员变量声明的顺序有何规定?

在C++中,如果我声明一个类/结构:

struct Data
{
    int member0;
    int member1;
};
Run Code Online (Sandbox Code Playgroud)

在大多数编译器中,member0在对象表示中出现的比较早member1.

标准是否要求这种行为,或者理论上是否允许编译器放在对象表示member1之前member0
标准对此有何看法,它在哪里说出来?
(如果强制行为在任何时候发生了变化,我对所有标准版本感兴趣.)

c++ memory standards object language-lawyer

0
推荐指数
1
解决办法
65
查看次数