这一问题的动机是clang和gcc对指针值与nullptr检查的不均衡处理。对于this,它们都发出警告,但是对于在对象上使用address-of运算符获取的指针,它们保持安静。
我非常肯定这样的指针应该总是有效的,因为我们已经经历了一些错误,因为现代编译器将对c++代码的这种检查从它真正触发的地方删除了。
它困扰我为什么编译器保持沉默在一般情况下。if 是否有可能触发,还是这只是两个主要编译器的设计决策?在我开始编写补丁或调试编译器开发程序之前,我想确定我没有遗漏什么。
#include <iostream>
class A {
void f(){
if
好的,这一次我决定用STL做一个列表。我需要为每个客户端创建一个专用的TCP套接字。所以每次我有一个连接时,我实例化一个套接字,并在列表中添加一个指向它的指针。
list<MyTcp*> SocketList; //This is the list of pointers to sockets
list<MyTcp*>::iterator it; //An iterator to the list of pointers to TCP sockets.
将新指针放到套接字很容易,但现在每次连接结束时,我都应该断开套接字并删除指针,这样就不会出现大量的内存泄漏,对吧?
我使用的是clang静态分析器4.0.0。对于下面的示例
int fun(){
int aa = 1,bb = 0;
int cc = aa/bb; // 1) devide by zero. // Reported by clang
int *pt = nullptr;
int a = *pt; // 2) null pointer dereference. // NOT Reported by clang
int b;
int c = a + b; // 3) Unused initialization. // Reported
我刚刚开始使用C++,遇到了一些参考资料,而且还没有完全理解。
引用,正如我所读到的,是object.Why使用的替代名称,而不是直接访问对象,因为引用上的任何操作都直接反映在对象上.?
为什么和何时使用?
ist是否像每次使用时引用的常量指针.?
而且,上面说
double& dr = 1; ---- says it is an error (some lavalue needed)
const double& cdr = 1; ---- says it is ok.
我不明白,properly..So,请解释一下为什么.
谢谢.)
我是AS3的新手,我不明白为什么这个循环没有按照它“应该”的方式运行。
for each (var s in [_set, _set.otherSet]) {
for each (var f in [s.frame_top_mc, s.frame_bottom_mc]) {
f.addEventListener(MouseEvent.CLICK, function( ):void {
_score[f.category] += 1;
madeSelection(f);
});
}
}
我如何才能给每个匿名函数一个对f表示的每个对象的引用,而不是每
我无法用g++或clang编译以下代码段
void foo(vector<bool>& p)
{
for( auto& b : p )
b=true;
}
我知道有/曾经有vector<bool>专门化。
这是已知的窃听器吗?或者标准对这种情况有异议吗?
还是我错过了一些简单的东西?
g++给了我以下内容:
error: invalid initialization of non-const reference of type std::_Bit_reference
from an rvalue of type std::_Bit
我对取消引用C指针有一些疑问。给定以下代码:
void *vptr; // declare as a void pointer type
int val = 1;
int *iptr;
// void type can hold any pointer type or reference
iptr = &val;
vptr = iptr;
printf("iptr=%p, vptr=%p\n", (void *)iptr, (void *)vptr);
当我们做(void *)iptr时,我们实际打印的是什么?我以为在取消引用时,它应该打印数字1,但实际上它打印了一个
有人能解释为什么两个编译器在第二个示例中抛出错误,而只有gcc在第一个示例中抛出错误吗?它与static_cast作为xvalue的结果有某种关系吗?
int& example1 = reinterpret_cast<int&>(static_cast<int&&>(10));
//(gcc 10.2) error: invalid cast of an rvalue expression of type 'int' to type 'int&'
//(clang 11.0.0) no errors
在学习锈病方面,我还有很长的路要走,但我发现价值观和引用的方式是不一致的。这可能是我自己对语言的无知所造成的。
例如,这起作用是:
let x = (1..100).find(|a| a % 2 == 0);
但let x = (1..100).find(|a| a > 50);没有。我不确定-为什么?
使用let x = (1..100).find(|&a| a > 50);修复了错误,但是我认为使用&a就像从范围中询问元素的引用一样,因此下面的内容应该是有效的,但它不能:
let x = (1..100).find(|&a| *a > 50);
再
我有:
[OperationContract]
string GetData(string input);
我说cannot have two operations in the same contract with the same name, methods GetDataAsync and GetData in type....violate this rule时出错了
但是我没有配置任何GetDataAsync函数!那么为什么要自动创建异步函数呢?我怎样才能阻止它(因为我不需要)?
我尝试使用lambda将引用有条件地绑定到两个变量中的一个:
int foo, bar;
int &choice = [&]() -> int & {
if (true /* some condition */) {
return foo;
} else {
return bar;
}
}();
这在clang 3.4中产生了一个警告:
stack_stuffing.cpp:5:20: warning: reference to stack memory associated with
local
我有一个QList,其中插入了对象的指针。我正在尝试遍历此QList以读取这些对象的名称。每当我这样做时,我都会得到这些对象的地址,而不是读取对象名本身。我想知道如何才能读取对象名称而不是地址?
QList<MyObject*> newObjectList;
QList<MyObject*>::iterator i;
MyObject *pNewObject = new MyObject(name);
MyObject.append(pNewObject);
for (i = newObjectList.begin(); i != newObjectList.en
在我的C++课上,我们正在学习使用函数对象之类的东西,但现在我们得到了一个可以在老师的编译器上运行的代码片段(我们使用的是不同的操作系统)。
我们用几个编译器(MSVC,clang)测试了下面的代码片段,他们都拒绝了它,有点被最小化了:
#include <functional>
struct Fraction {
Fraction();
Fraction(int z, int n);
Fraction(Fraction&);
// various data members
};
struct FractionComparator {
int op