考虑以下代码:
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++中使用真正的编译时字符串散列.我不关心技术细节,可以是模板,宏,任何东西.到目前为止我见过的所有其他散列技术只能在编译时生成散列表(如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).
有时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++做自定义向量类.我对这样的代码有疑问:
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但这看起来并不漂亮.
你怎么解决这个问题?
在PropertyGrid中使用类似Visual Studio的编辑器的最简单方法是什么?例如,在Autos/Locals/Watches中,您可以在线预览/编辑字符串值,但您也可以单击放大镜并在外部窗口中查看字符串.
我使用Reflection(Method.Invoke)在.NET中调用函数.如果在此方法中发生错误并引发异常,则调试器不会显示实际代码,而是在Invoke()调用时停止.我可以从InnerException中检索异常信息,但与使用callstack的常规调试等相比,这非常不方便.可以像使用常规函数调用一样调试使用Method.Invoke调用的方法吗?
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")
我有一个跨平台的应用程序(游戏).它使用SDL库.由于LGPL许可,我无法静态链接它.在Windows上我捆绑了DLL文件,在Mac OSX上捆绑了Frameworks目录.但是如何在GNU/Linux上解决它呢?如果用户的系统上没有安装SDL库,则会出现错误:
加载共享库时出错:libSDL-1.2.so.0:无法打开共享对象文件:没有这样的文件或目录
即使我捆绑.so文件,系统似乎也没有使用它.
另一个问题是我不想强行覆盖用户库.SDL不是问题,但是例如OpenAL库差异很大,用户可以使用OpenAL库,而我的机器可能会崩溃.
我在哪里可以找到转换方法,如
public static implicit operator MyType(OtherType d)
public static implicit operator OtherType(MyType d)
Run Code Online (Sandbox Code Playgroud)
在Type对象?
这是一个理论问题.
我想知道如何在没有引用的情况下在内部执行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?