小编JRG*_*JRG的帖子

使用const_cast进行未定义行为的非平凡示例

根据我的理解,以下代码是根据c ++标准的未定义行为(特别是第7.1.5.1.4节[dcl.type.cv]/4).

#include <iostream>

struct F;
F* g;

struct F {
    F() : val(5)
    {
        g = this;
    }
    int val;
};


const F f;

int main() {
    g->val = 8;
    std::cout << f.val << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

但是,这打印'8'与我尝试过的每个编译器和优化设置.

问题:是否存在使用此类"隐式const_cast"显示意外结果的示例?

我希望有一些像结果一样壮观的东西

#include <iostream>
int main() {
    for (int i = 0; i <=4; ++i)
        std::cout << i * 1000000000 << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

例如,gcc 4.8.5 with -O2

编辑:标准的相关部分

7.1.5.1.4:除了可以修改声明为mutable(7.1.1)的任何类成员之外,任何在其生命周期内修改const对象的尝试(3.8)都会导致未定义的行为.

在回复提出重复的评论; 它不是重复的,因为我要求一个"意外"结果发生的例子.

c++ undefined-behavior

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

在importlib.reload之前更改环境变量

我有一个c-extension在静态初始化期间加载环境变量.我需要能够更改这些值并重新加载模块(我无法更改它们是静态加载的事实).我试着设置os.environ,但似乎没有成为一个env在选择importlibsubprocess.call

这是一个例子:假设我有一个如下定义的模块

#include <boost/python.hpp>
#include <cstdlib>
#include <string>
std::string get() {
    return ::getenv("HOME");
}

BOOST_PYTHON_MODULE(sample) {
    boost::python::def("get", &get);
}
Run Code Online (Sandbox Code Playgroud)

我有python代码:

import importlib, os
import sample as s
print(s.get()) # prints /home/username

# do something like 
# os.environ['HOME'] = 'foo'
importlib.reload(s)
print(s.get()) # I would like this to print 'foo'
Run Code Online (Sandbox Code Playgroud)

换句话说,我可以做什么而不是os.environ['HOME'] = 'foo'导致环境变量在c模块中改变?

注意:我无法使用,setenv因为变量是静态加载的,我无法重新初始化所有依赖于它们的东西.

python python-3.x python-importlib

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

objective-c复杂性参考

对于c ++ STL,有一个事实上的标准位置 (除了de-jour标准,我的意思是)找到有关标准容器操作的复杂性保证的信息.

是否有类似的,可通过Web访问的文档列出了NSArray,NSDictionary等的复杂性保证?

例如,我找不到给出复杂性的参考 [NSArray count]

complexity-theory objective-c

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