问题列表 - 第15632页

在C++中链接类中2个变量的方法

假设我想让一个类中的一个变量始终与另一个变量处于某种关系而不明确地更改"链接"变量.

例如:int foo总是比int bar小10.

这样做,如果我改变了bar,foo也会改变.有没有办法做到这一点?(整数溢出实际上是不可能的,所以不要担心它.)

示例:(显然不起作用,但理解的一般代码)

class A
{
    int x;
    int y = x - 10; // Whenever x is changed, y will become 10 less than x
};
Run Code Online (Sandbox Code Playgroud)

c++

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

不同的字符串初始化会产生不同

为什么我使用以下方法,用于将字符串中的所有字符转换为大写,

while (*postcode) {
    *postcode = toupper(*postcode);

    postcode++;
}
Run Code Online (Sandbox Code Playgroud)

使用以下参数有效,

char wrong[20];
strcpy(wrong, "la1 4yt");
Run Code Online (Sandbox Code Playgroud)

但是,以下,不是,尽管它们是相同的?

char* wrong = "la1 4yt";
Run Code Online (Sandbox Code Playgroud)

我的程序崩溃试图写入非法地址(我认为是一个段错误).这不是问题malloc吗?不是无效的?它应该不是......

通过调试我发现它在尝试将第一个字符分配为大写时崩溃了.

任何帮助赞赏!

c

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

在结束标记之前添加节点?

使用JavaScript 直接结束标记之前将元素插入到页面的HEAD中的最佳方法是什么?

...<HEAD>
<script>...</script>
<script>...</script>
<script>...</script>
<link .../>
<link .../>
<link title="MY NEW LINK ELEMENT" />
</HEAD>...
Run Code Online (Sandbox Code Playgroud)

我知道这个'' insertBefore(sp1, sp2.nextSibling)技巧' ,但这只是让你结束标签之后放弃一些东西.

html javascript css dom

0
推荐指数
1
解决办法
1327
查看次数

Windows边栏小工具重新加载

我想开发一个Windows桌面小工具为Windows 7只是不知道是否有重新载入Widget或有某种形式的调试代码,将刷新窗口小部件每隔10秒的简单方法.

我问的原因是在开发小部件时,如果我改变任何东西,我需要关闭小部件并读到桌面以显示我的更改.

干杯.

windows-desktop-gadgets

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

NSMutableString stringByReplacingOccurrencesOfString警告

我有一个RSS解析器方法,我需要从我提取的HTML摘要中删除空格和其他废话.我有一个NSMutableString类型'currentSummary'.我打电话的时候:

currentSummary = [currentSummary 
        stringByReplacingOccurrencesOfString:@"\n" withString:@""];
Run Code Online (Sandbox Code Playgroud)

Xcode告诉我"警告:从不同的Objective-C类型分配"

这有什么问题?

iphone objective-c

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

为什么STL容器没有虚拟析构函数?

有谁知道为什么STL容器没有虚拟析构函数?

据我所知,唯一的好处是:

  • 它通过一个指针(到虚拟方法表)减少实例的大小
  • 它使破坏和构造更快一点.

缺点是以通常的方式对容器进行子类化是不安全的.

编辑: 也许我的问题可以改写"为什么不是STL容器设计允许继承?"

因为它们不支持继承,所以当有人想要一个需要STL功能的新容器加上少量的附加功能时(例如一个专门的构造函数或带有地图默认值的新访问器),就会遇到以下选择:管他呢):

  • 组合和接口复制:创建一个拥有STL容器作为私有成员的新模板或类,并为每个STL方法提供一个传递内联方法.这与继承一样高效,避免了虚方法表的成本(在重要的情况下).不幸的是,STL容器具有相当广泛的接口,因此这需要许多代码行,这看起来应该很容易.
  • 只需创建函数:使用裸(可能是模板化的)文件范围的函数,而不是尝试添加成员函数.在某些方面,这可能是一个很好的方法,但封装的好处将丢失.
  • 具有公共STL访问权限的组合:让STL容器的所有者允许用户访问STL容器本身(可能通过访问者保护).这需要编写库编写器的编码最少,但对用户来说却不太方便.一个用于组成的大卖点之一是,你减少代码耦合,但这种方法完全夫妇与业主容器STL容器(因为业主返回一个真正的STL容器).
  • 编译时多态性:编写可能有些棘手,需要一些代码体操,并不适合所有情况.

作为一个附带问题:是否存在一种使用非虚拟析构函数进行子类化的标准安全方法(让我们假设我不想覆盖任何方法,只是我想添加新方法)?我的印象是,如果没有能力更改定义非虚拟类的代码,则没有通用且安全的方法.

编辑2:

正如@doc所指出的那样,C++ 11的发言人using声明在一定程度上降低了作曲的成本.

c++ destructor stl

31
推荐指数
4
解决办法
7066
查看次数

PHP中的echo,print和print_r有什么区别?

我用echoprint_r多,而且几乎从来不使用print.

我觉得它echo是一个宏,print_r是别的var_dump.

但这不是解释差异的标准方法.

php

190
推荐指数
5
解决办法
20万
查看次数

C++:与泛型const指针斗争

我在一些模板化的代码中遇到了一些烦人的问题 - 最终归结为以下观察:由于某种原因,给定一个STL-ish容器类型T,const typename T::pointer实际上似乎并不是一个常量指针类型,即使T::pointer相当于T::value_type*.

以下示例说明了该问题.假设您有一个模板化函数,它接受一个必须满足STL随机访问容器概念要求的Container.

template <class Container>
void example(Container& c)
{
    const typename Container::pointer p1 = &c[0]; // Error if c is const
    const typename Container::value_type* p2 = &c[0]; 
}
Run Code Online (Sandbox Code Playgroud)

然后,如果我们传递这个函数一个const容器......

const std::vector<int> vec(10);
example(vec);
Run Code Online (Sandbox Code Playgroud)

...我们得到一个无效转换const int*int*.但是为什么const typename Container::pointerconst int*这个例子不一样呢?

请注意,如果我const typename Container::pointer改为简单typename Container::const_pointer编译就好了,但据我所知,const_pointer typedef是一个扩展,(我没有在C++标准容器要求(23.5,表65)中看到它),以及所以我不想用它.

那么如何从容器T中获取通用的,const-correct指针类型呢?(我实在看不出如何做到这一点,而不使用boost :: MPL :: if_与type_traits一起检查,如果容器是不变的......但必须有这样做一个更简洁的方式)

编辑:如果重要,我正在使用gcc 4.3.2来编译它.

c++ templates stl const

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

将二进制数据写入c#中的stdout?

我正在尝试用c#编写一个快速的cgi应用程序.我需要到stdout流并写一些二进制数据.我唯一能找到的就是Console.Write,它接受文本.我也试过了

Process.GetCurrentProcess().StandardOutput.BaseStream.Write 
Run Code Online (Sandbox Code Playgroud)

这也不起作用.这甚至可能吗?

c# cgi

6
推荐指数
2
解决办法
3292
查看次数

有没有办法让gcc输出原始二进制文件?

是否有一组命令行选项可以说服gcc从自包含的源文件生成平面二进制文件?例如,假设foo.c的内容是

static int f(int x)
{
  int y = x*x;
  return y+2;
}
Run Code Online (Sandbox Code Playgroud)

没有外部引用,没有什么可以导出到链接器.我想获得一个只包含此功能的机器说明的小文件,没有任何其他装饰.类似于(DOS).COM文件,除了32位保护模式.

linux x86 linker command-line gcc

29
推荐指数
4
解决办法
3万
查看次数