strict-aliasing

    0热度

    2回答

    我想要做这样的事情: #define EQ4(a_,b_) (*(int*)(a_)==*(int*)(b_)) char *s1 = "food"; char *s2 = "fred"; return EQ4(s1,s2); 但GCC是生产这样的警告:警告:提领型punned指针将打破严格走样规则。 我不认为我在做什么计算作为解除引用的严格别名的目的,因为我没有将解引用的指针分配给

    5热度

    3回答

    根据严格别名规则: struct B { virtual ~B() {} }; struct D : public B { }; D d; char *c = reinterpret_cast<char*>(&d); char*一个不同类型的任何对象是有效的。但现在的问题是,它是否会指向& d的相同地址? C++ Standard保证它会返回相同的地址是什么?

    0热度

    1回答

    回答后验收摘要:问题是使用指向已超出范围的堆栈变量的指针。它与优化无关。这是一个可惜的valgrind找不到堆栈错误... 我只能够在GCC 4.4.4 -O1级优化版本(CentOS 5.5)时,会出现段错误。所有其他优化级别(0,2,3,s)都很好。我还没有设法为它创建一个简化的测试用例,但它似乎与数组偏移量计算有关,导致堆栈被覆盖。 如果我启用-O1并禁用所有具有标志的优化(http://g

    2热度

    3回答

    我有一些代码使用类型双引号来避免必须调用成员“object”的构造函数析构函数,除非/实际上有必要使用该对象。 它工作正常,但在G ++ 4.4.3,我得到这个可怕的编译器警告: [email protected]:~$ g++ -O3 -Wall puns.cpp puns.cpp: In instantiation of ‘Lightweight<Heavyweight>’: puns.c

    20热度

    4回答

    我想从浮点中提取位而不调用未定义的行为。这是我的第一次尝试: unsigned foo(float x) { unsigned* u = (unsigned*)&x; return *u; } 据我所知,这是不能保证工作,由于严格的别名规则,对吧?如果使用字符指针进行中间步骤,它会工作吗? unsigned bar(float x) { char* c =

    2热度

    2回答

    在在网络上一个最教程或代码片段见下表: float *arr= (float*) _aligned_malloc(length * sizeof(float), 16); __m128 *m1 = (__m128*)arr; 这是否违反严格别名规则或不?我会认为它的确如此,但那么肯定所有这些教程编写者都不会忽略它,只是为了方便起见,因为__m128是一个包含float的联合[4],也许我误解

    5热度

    1回答

    boost :: optional <>对于简单的数据类型是完美的,但只要用于从类实现接口的类继承,它会在启用严格别名时失败。 例子: #include <boost/optional.hpp> struct MyLine{ double a; double b; }; class Edge{ public: MyLine toMyLine() c

    7热度

    1回答

    假设我有一个范例源文件test.c的,这我编译如下所示: $ GCC -03 -Wall 测试。 ç看起来是这样的.. /// CMP128(x, y) // // arguments // x - any pointer to an 128-bit int // y - any pointer to an 128-bit int // // returns -1, 0, or 1 i

    15热度

    4回答

    我试图在编译使用GCC的特定程序时修复两个警告。该警告是: 警告:提领型punned指针将打破 严格走样规则[-Wstrict走样] 和两个罪魁祸首是: unsigned int received_size = ntohl (*((unsigned int*)dcc->incoming_buf)); 和 *((unsigned int*)dcc->outgoing_buf) = htonl (

    2热度

    1回答

    我正在关注Boost网站上的“入门”tutorial。我想用下面的命令来建立separatly编译库: ./bootstrap.sh 然后 ./b2 在建设,我得到这些警告的很多(比如数百个): ./boost/...whatever.hpp:linenumber: warning: dereferencing pointer ‘...’ does break strict-aliasin