小编Joh*_*ohn的帖子

C++:返回值是L值吗?

考虑以下代码:

struct foo
{
  int a;
};

foo q() { foo f; f.a =4; return f;}

int main()
{
  foo i;
  i.a = 5;
  q() = i;
}
Run Code Online (Sandbox Code Playgroud)

没有编译器抱怨它,甚至Clang.为什么q() = ...线路正确?

c++ return-value lvalue

71
推荐指数
3
解决办法
7471
查看次数

在C++中真正的编译时字符串散列

基本上我需要在C++中使用真正的编译时字符串散列.我不关心技术细节,可以是模板,宏,任何东西.到目前为止我见过的所有其他散列技术只能在编译时生成散列表(如256个CRC32散列),而不是真正的散列.

换句话说,我需要这个

printf("%d", SOMEHASH("string"));
Run Code Online (Sandbox Code Playgroud)

编译为(在伪汇编程序中)

push HASHVALUE
push "%d"
call printf
Run Code Online (Sandbox Code Playgroud)

甚至在Debug构建中,对字符串没有运行时操作.我正在使用GCC 4.2和Visual Studio 2008,我需要这些编译器的解决方案(所以没有C++ 0x).

c++ hash compile-time

9
推荐指数
2
解决办法
4647
查看次数

如何在C++中修复Visual Studio本地人/手表(调试版本)

有时VS autos/locals/watch会中断而不是变量/值我只有不同的类型:

CXX0029: Error: not struct pointer  
CXX0033: Error: error in OMF type information   
CXX0072: Error: type information missing or unknown 
CXX0025: Error: operator needs class/struct/union   
Run Code Online (Sandbox Code Playgroud)

重建项目,清理PDB/NCB等并没有解决它.我能做什么?

c++ visual-studio

8
推荐指数
1
解决办法
2993
查看次数

在扩展期间将矢量成员推入向量:vector.push_back(vector [0])

我正在用C++做自定义向量类.我对这样的代码有疑问:

    vector<T> vec;
    vec.push_back(one);
    vec.push_back(two);
    vec.push_back(vec[0]);
Run Code Online (Sandbox Code Playgroud)

push_back的定义如下:

    void push_back(const T & v)
Run Code Online (Sandbox Code Playgroud)

避免不必要的复制.它的实现看起来像

    if (size == capacity)
    {
        allocate new storage
        copy old values into new storage
        // 2
        delete old storage
        fix pointers and counters
    }
    // 1
    copy v at the end of storage
Run Code Online (Sandbox Code Playgroud)

如果我们想要推送已经在向量中的元素并且向量需要扩展(大小等于其容量),则会出现问题.如果我们这样做(vec.push_back(vec[0]))然后// 1,它已被解除分配.所以我们需要有一份副本.另一种选择是在扩展期间添加它,在某处,// 2但这看起来并不漂亮.

你怎么解决这个问题?

c++ vector

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

C#属性网格字符串编辑器

在PropertyGrid中使用类似Visual Studio的编辑器的最简单方法是什么?例如,在Autos/Locals/Watches中,您可以在线预览/编辑字符串值,但您也可以单击放大镜并在外部窗口中查看字符串.

c# winforms

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

调试.NET中的Invoked函数

我使用Reflection(Method.Invoke)在.NET中调用函数.如果在此方法中发生错误并引发异常,则调试器不会显示实际代码,而是在Invoke()调用时停止.我可以从InnerException中检索异常信息,但与使用callstack的常规调试等相比,这非常不方便.可以像使用常规函数调用一样调试使用Method.Invoke调用的方法吗?

.net reflection debugging invoke visual-studio

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

Lua:存储未指定数量的项目的返回值

function foo()
  return "a", "b", "c"
end

function bar()
  return foo()
end

function process()
  -- ...
end

function bar_store()
  local v = foo()
  process()
  return v
end

print(bar())        -- A
print(bar_store())  -- B
Run Code Online (Sandbox Code Playgroud)

结果:

a   b   c           -- A
a                   -- B
Run Code Online (Sandbox Code Playgroud)

如何使B版本像A版本一样?在"bar_store"中我需要调用函数而不是返回任意数量的返回值,但是我需要在函数调用之后做一些工作(在我的例子中为"process")

lua

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

部署Linux游戏,共享库/依赖项

我有一个跨平台的应用程序(游戏).它使用SDL库.由于LGPL许可,我无法静态链接它.在Windows上我捆绑了DLL文件,在Mac OSX上捆绑了Frameworks目录.但是如何在GNU/Linux上解决它呢?如果用户的系统上没有安装SDL库,则会出现错误:

加载共享库时出错:libSDL-1.2.so.0:无法打开共享对象文件:没有这样的文件或目录

即使我捆绑.so文件,系统似乎也没有使用它.

另一个问题是我不想强行覆盖用户库.SDL不是问题,但是例如OpenAL库差异很大,用户可以使用OpenAL库,而我的机器可能会崩溃.

linux sdl

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

.NET反射中的转换

我在哪里可以找到转换方法,如

    public static implicit operator MyType(OtherType d)
    public static implicit operator OtherType(MyType d)
Run Code Online (Sandbox Code Playgroud)

Type对象?

.net c# reflection

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

C中的参考文献

这是一个理论问题.

我想知道如何在没有引用的情况下在内部执行C中的某些构造.例如:

struct Foo { int a; };
int main() {
  struct Foo foo;
  foo.a = 10;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

是什么类型的foo.a?它绝对不是指针,因为我们将其指定10为值,而不是地址.但它也不是一种价值类型,因为它改变了数据foo.在C++中,我只想说它是一个参考,但在C?

c reference

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