纵观LLVM文件,他们提到,他们使用"RTTI的自定义窗体",这是他们的原因isa<>,cast<>和dyn_cast<>模板功能.
通常,阅读一个库重新实现一种语言的一些基本功能是一种可怕的代码味道,只是邀请运行.但是,这是我们所说的LLVM:这些人正在研究C++编译器和 C++运行时.如果他们不知道他们在做什么,我会非常沮丧,因为我更喜欢Mac OS附带clang的gcc版本.
尽管如此,由于缺乏经验,我还是想知道正常RTTI的缺陷是什么.我知道它只适用于有v-table的类型,但只提出两个问题:
virtual?虚拟析构函数似乎很擅长这一点.我想知道如何使用该push_back方法向我的结构向量添加值
struct subject
{
string name;
int marks;
int credits;
};
vector<subject> sub;
Run Code Online (Sandbox Code Playgroud)
那么现在我该如何添加元素呢?
我有函数初始化字符串名称(主题名称)
void setName(string s1, string s2, ...... string s6)
{
// how can i set name too sub[0].name= "english", sub[1].name = "math" etc
sub[0].name = s1 // gives segmentation fault; so how do I use push_back method?
sub.name.push_back(s1);
sub.name.push_back(s2);
sub.name.push_back(s3);
sub.name.push_back(s4);
sub.name.push_back(s6);
}
Run Code Online (Sandbox Code Playgroud)
函数调用
setName("english", "math", "physics" ... "economics");
Run Code Online (Sandbox Code Playgroud) 我正在尝试深入探索新C++ 11标准的所有选项,同时使用std :: async并阅读其定义,我注意到两件事,至少在linux下使用gcc 4.8.1:
pthread,如果你想使用std::async你需要pthread.在这一点上,我很自然地问为什么选择std :: async甚至是一组简单的仿函数?这是一个根本无法扩展的解决方案,您调用的未来越多,您的程序响应就越少.
我错过了什么吗?你能展示一个被授予以异步,非阻塞方式执行的例子吗?
我正在学习C++,我看到了一个for像这样的基于范围的循环:
for (int i : {1,2,3,4,5})
std::cout << i << ' ';
Run Code Online (Sandbox Code Playgroud)
{1,2,3,4,5}幕后for循环的临时性是什么?
我将以下行添加到build.gradle(Module:app):
compile 'com.android.support:design:25.4.0'
Run Code Online (Sandbox Code Playgroud)
但是当我执行Gradle时,我正在接受
Failed to resolve: com.android.support.design:25.4.0
Run Code Online (Sandbox Code Playgroud)
我从android 支持设计库获得了支持代码并将其添加到新项目中.我将其添加到依赖项部分:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
compile 'com.android.support:design:25.4.0'
}
Run Code Online (Sandbox Code Playgroud)
关于我做错了什么的任何想法?
我如何决定是否需要addressof(x)而不是&x在获取对象的地址时?
似乎这个问题令人困惑,所以需要澄清:
addressof显然绕过了重载的地址运算符.我已经意识到了这一点.
我想知道的是:
我怎么知道这是不是我真的想做什么?(特别是在模板内部等)
是否有某种"规则"可以帮助我找出什么时候需要addressof而不是&?
毕竟,他们都返回对象的"地址",那么我什么时候使用哪个?
我已经使用C++几年了,今天我看到了一些代码,但这怎么能完全合法呢?
int main(int argc, char **argv)
{
size_t size;
cin >> size;
int array[size];
for(size_t i = 0; i < size; i++)
{
array[i] = i;
cout << i << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
根据海湾合作委员会编制.
如何在没有new或没有运行时确定大小malloc?
只是为了仔细检查,我用谷歌搜索了一些和我的所有类似的代码声称存储大小错误.
甚至Deitel的C++如何编程p.共同编程错误4.5下的261个状态:
只有常量可用于声明自动和静态数组的大小.
给我看.
我发现以下代码被Visual C++ 2008和GCC 4.3编译器接受:
void foo()
{
}
void bar()
{
return foo();
}
Run Code Online (Sandbox Code Playgroud)
它编译时我有点惊讶.这是语言功能还是编译器中的错误?C/C++标准对此有何看法?
我无法编译将类型从整数转换为字符串的代码.我正在运行Rust for Rubyists教程中的一个示例,该教程具有各种类型转换,例如:
"Fizz".to_str()和 num.to_str()(其中num是整数).
我认为这些to_str()函数调用的大部分(如果不是全部)都已被弃用.将整数转换为字符串的当前方法是什么?
我得到的错误是:
error: type `&'static str` does not implement any method in scope named `to_str`
error: type `int` does not implement any method in scope named `to_str`
Run Code Online (Sandbox Code Playgroud)