小编Kir*_*rov的帖子

我可以确定char*参数解决了多少有效内存?

我有一个功能:

// string is a null-terminated char array. Replace all a in the string with b
void ReplaceCharInString(char *string, char a, char b)
{
// loop over the string char by char, to find all "a"s and replace them with "b"
}
Run Code Online (Sandbox Code Playgroud)

我在做防守编程.问题是客户端上的实现回复真正传递了一系列字符.如果传入单个字符的地址,程序肯定会遇到错误的状态(可能崩溃).我该如何检查并避免这种情况?(我知道如果我传入std :: string对象,问题就会消失)

c c++

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

装饰方法(类方法重载)

受Muhammad Alkarouri的启发,回答Python3的"功能注释"有什么用处,我想multimethod为方法做到这一点,而不是常规功能.但是,当我这样做

registry = {}

class MultiMethod(object):
    def __init__(self, name):
        self.name = name
        self.typemap = {}
    def __call__(self, *args):
        types = tuple(arg.__class__ for arg in args) # a generator expression!
        function = self.typemap.get(types)
    if function is None:
        raise TypeError("no match")
    return function(*args)
def register(self, types, function):
    if types in self.typemap:
        raise TypeError("duplicate registration")
    self.typemap[types] = function

def multimethod(function):
    name = function.__name__
    mm = registry.get(name)
    if mm is None:
        mm = registry[name] = MultiMethod(name)
    types = tuple(function.__annotations__.values()) …
Run Code Online (Sandbox Code Playgroud)

python methods decorator python-3.x

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

C++中的静态类

在我声明的标题中

#ifndef SOUND_CORE
#define SOUND_CORE

static SoundEngine soundEngine;

...
Run Code Online (Sandbox Code Playgroud)

但SoundEngine的构造函数被多次调用,当它被声明为全局静态时,它是如何可能的

我称之为

#include "SoundCore.h"
Run Code Online (Sandbox Code Playgroud)

并直接使用它

soundEngine.foo()
Run Code Online (Sandbox Code Playgroud)

谢谢

c++ static class

4
推荐指数
2
解决办法
212
查看次数

编译几个项目(使用makefile),但在第一次破坏的构建时停止?

我想做的事情如下:

for i in *
do
    if test -d $i
    then
        cd $i; make clean; make; cd -;
    fi;
done
Run Code Online (Sandbox Code Playgroud)

这样可以正常工作,但是for如果构建破坏,我希望"打破" -loop.

有没有办法做到这一点?也许某种 - if陈述,可以检查成功make吗?

bash makefile

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

C/C++中的运算符优先级和关联性

请注意,这与Operator Precedence ..()和++,未定义的行为和序列点无关,为什么这些构造(使用++)是未定义的行为?以及关于此的数百个类似问题


简而言之:标准保证了协会性吗?

详细示例:来自维基百科关于运算符优先级的文章,operator*并且operator/具有相同的优先级,它们是Left-to-right运算符.这是否意味着,标准保证,这:

int res = x / y * z / t;
Run Code Online (Sandbox Code Playgroud)

将被评估为

int res = ( ( x / y ) * z ) / t;
Run Code Online (Sandbox Code Playgroud)

还是它的实现定义了?

如果有保证,你能引用吗?


这只是出于好奇,我总是在这些情况下写括号.
准备删除问题,如果有这样的话.

c c++ operator-precedence associativity

4
推荐指数
2
解决办法
666
查看次数

C++中私有成员函数的良好命名约定?

对于会员,我使用

//.......vv
SomeType m_XXX;
//.......^^
Run Code Online (Sandbox Code Playgroud)

我喜欢_用作成员函数的前缀,但名称以___以保留开头且不应使用.

我的想法是,当我有:

SomeClass myObject;
myObject.[XXX]
Run Code Online (Sandbox Code Playgroud)

当用户(lib)写入dot(.)时,只能查看所有函数(一个接一个)public.

这有一个共同的命名约定吗?

我知道,我可以使用pImpl或继承接口和实现类

c++ naming-conventions private-methods

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

不同库和链接顺序中的相同符号

我有2个库:test.1test.2.两个库都包含单个全局extern"C" void f();函数,具有不同的实现(仅cout用于测试).

我做了以下测试:

测试1动态链接:
如果我添加libtest.1.so,然后libtest.2.so在可执行文件的生成文件,然后调用f();main,libtest.1.so->f()被调用.
如果我更改makefile中的顺序,libtest.2.so->f()则调用

测试2静态链接:
静态库完全相同

测试3动态加载
手动加载库时,一切都按预期工作.


我预计多个定义会出错,这显然不会发生.

此外,这不会打破单一定义规则,因为情况不同.

它也不是一个依赖地狱(不是它与此有关),也不是任何链接惨败..

那么,这是什么呢?未定义的行为?未指明的行为?或者它确实取决于链接顺序?

有没有办法轻松检测到这种情况?


相关问题:
dlopen与链接开销
动态链接和动态加载之间的区别
使用-Bsymbolic函数是否存在缺点?
为什么库链接的顺序有时会导致GCC错误?
将两个共享库与一些相同的符号链接起来


编辑我做了两个测试,证实了这个UB:

我添加了第二个函数void g()test.1,而不是在test.2.

使用动态链接和.so库,同样的事情 - f以相同的方式调用,g也是可执行的(如预期的那样).

但是使用静态链接现在改变了一些事情:如果test.1之前 test.2,没有错误,test.1则会调用两个函数.
但是当订单更改时,会出现"多个定义"错误.

很明显,"不需要诊断"(参见@MarkB的答案),但有时候发生错误是"奇怪的",有时候 - 它没有.

无论如何,答案很清楚,并解释了上面的一切 - UB.

c c++ dynamic-linking multiple-definition-error static-linking

4
推荐指数
2
解决办法
3421
查看次数

'for each'不是std的成员.已启用C++ 11支持

我教授的家庭作业的代码如下.这是开箱即用的,我没有修改我教授的代码.程序还有更多内容,但这是错误发生的地方.问题行以粗体显示.

std::cout << "\nAll remaining courses with enrollments:\n";
allCourses = WSUCourse::getAllCourses();
std::for_each(
  allCourses.begin(),
  allCourses.end(),
  WSUCoursePrinter());
Run Code Online (Sandbox Code Playgroud)

我收到以下错误.

g++    -c -g -std=c++11 -MMD -MP -MF "build/Debug/Cygwin_4.x-Windows/main.o.d" -o build/Debug/Cygwin_4.x-Windows/main.o main.cpp
main.cpp: In member function 'void WSUStudentPrinter::operator()(const WSUStudent*)':
main.cpp:26:20: error: 'to_string' is not a member of 'std'
       std::cout << std::to_string(studentPtr->getUniqueID()) <<
                    ^
main.cpp: In function 'void test()':
main.cpp:162:4: error: 'for_each' is not a member of 'std'
    std::for_each(
    ^
main.cpp:174:4: error: 'for_each' is not a member of 'std'
    std::for_each(
    ^
nbproject/Makefile-Debug.mk:84: recipe for target 'build/Debug/Cygwin_4.x-Windows/main.o' …
Run Code Online (Sandbox Code Playgroud)

c++ netbeans std codeblocks c++11

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

clock_gettime(CLOCK_REALTIME ....)和time()之间有什么区别?

一个简单的问题:你time(...)clock_gettime( CLOCK_REALTIME, ... )(仅就秒),理论上产生相同的时间?


这就是我的意思:

time_t epoch;
time( &epoch );
Run Code Online (Sandbox Code Playgroud)

struct timespec spec;
clock_gettime( CLOCK_REALTIME, &spec );
Run Code Online (Sandbox Code Playgroud)

这两个应该返回完全相同的结果(相对于秒)?

我通过改变时间和时区来"测试"这个epoch并且spec.tv_sec总是显示相同的结果,但是文档CLOCK_REATIME让我感到困惑,我不确定,它们将始终是相同的.


现实世界的情况:我有一段代码,它使用time.现在我想要以毫秒为单位的时间(可以取spec.tv_nsec,乘以1000000).所以我考虑time直接删除和使用clock_gettime,但我不确定在所有情况下这是否会保持不变.


这个问题在某种程度上与Linux中的测量时间有关- 时间与时间对比getrusage vs clock_gettime vs gettimeofday vs timespec_get?但那里的信息对我来说还不够......我想.

c c++ time datetime

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

如何调用以及如何完成(`function_name.decorator`)?

真的很抱歉极其愚蠢的头衔,但如果我知道它是什么,我不会写在这里(:

def some_decorator( func ):
    # ..

class A:
    @some_decorator
    def func():
        pass
    @func.some_decorator    # this one here - func.some_decorator ?
    def func():
        pass
Run Code Online (Sandbox Code Playgroud)

some_decorator装饰func- 没关系.但是,成员(或其他什么?)是什么func.some_decorator以及如何some_decorator成为func

PS我90%肯定,这里有这样的问题(因为这似乎是基本的东西),但我不知道如何搜索它.如果有完全重复,我会删除这个问题.


注意:两个成员函数都被命名,这不是错字,也不是偶然的func.装饰器用于重载:问题与装饰方法有关(类方法重载)

python decorator python-3.x

3
推荐指数
1
解决办法
91
查看次数