小编Gav*_*ith的帖子

为什么指针向量不能转换为const指针的const向量?

该类型 vector<char *>不可转换为const vector<const char*>.例如,以下内容给出了编译错误:

#include <vector>

using namespace std;

void fn(const vector<const char*> cvcc)
{
}

int main()
{
    vector<char *> vc = vector<char *>(); 

    fn(vc);
}
Run Code Online (Sandbox Code Playgroud)

我理解为什么vector<char*>不能转换为vector<const char*>- 类型的额外成员const char *可以添加到向量中,然后它们可以作为非const访问.但是,如果向量本身是常量,则不会发生这种情况.

我最好的猜测是,这将是无害的,但是编译器无法推断出这将是无害的.

怎么能解决这个问题?

这个问题是由C++ FQA 在这里提出的.

c++ casting const

15
推荐指数
2
解决办法
7068
查看次数

如何在GNU make中使用模式规则和patsubst时正确转义"%"符号?

我有一个如下所示的makefile:

m1:
    @echo building m1

m1_:
    @echo building m1_


m2:
    @echo building m2

m2_:
    @echo building m2_

m3_DEPS = m2 m1

SUBSTITUTE=$(patsubst %,%_,$($@_DEPS))
.SECONDEXPANSION:

#%: $$(SUBSTITUTE)
%:  $$(patsubst \%,\%_,$$($$@_DEPS))
    @echo Building $@
    @echo Dependencies are $^
Run Code Online (Sandbox Code Playgroud)

关键是

%:  $$(patsubst \%,\%_,$$($$@_DEPS))
Run Code Online (Sandbox Code Playgroud)

我正在使用模式规则和patsubst,它本身使用百分号.我以为我可以%用a 逃脱角色\,但我仍然没有得到预期的行为.运行"make m3"给出输出

building m2
building m1
Building m3
Dependencies are m2 m1
Run Code Online (Sandbox Code Playgroud)

但是,我希望得到

building m2_
building m1_
Building m3
Dependencies are m2_ m1_
Run Code Online (Sandbox Code Playgroud)

注释掉该行并patsubst通过变量间接调用确实产生了该输出.

SUBSTITUTE=$(patsubst %,%_,$($@_DEPS))

%: $$(SUBSTITUTE)
Run Code Online (Sandbox Code Playgroud)

另外,我已经测试过使用非模式规则有效,这让我觉得它与模式规则和百分号的交互有关:

m3:  $$(patsubst %,%_,$$($$@_DEPS))
Run Code Online (Sandbox Code Playgroud)

makefile gnu-make

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

标签 统计

c++ ×1

casting ×1

const ×1

gnu-make ×1

makefile ×1