我知道对于类型foo
,函数bar
的声明应该是这样的:
void bar(const foo*) and void bar(foo* const)
这两者是相同的。但是什么是双重间接?也就是说,
void bar(const foo**) and void bar(foo** const)
这两件事情是否相同?如果不是,那么我需要怎么做才能将 const
放在 void bar(foo** const)
的前面?
我知道对于类型foo
,函数bar
的声明应该是这样的:
void bar(const foo*) and void bar(foo* const)
这两者是相同的。但是什么是双重间接?也就是说,
void bar(const foo**) and void bar(foo** const)
这两件事情是否相同?如果不是,那么我需要怎么做才能将 const
放在 void bar(foo** const)
的前面?
在这里我们考虑
void bar(const foo*); #1
void bar(foo* const) #2
#1
中,我们有一个指向const foo
的指针,而在#2
中,我们有一个指向非常量foo
的常量指针。std::is_same
来确认它们不同:std::cout << std::is_same<const foo*, foo* const>::value << ' '; //false
这里我们考虑
void bar(const foo**); #3
void bar(foo** const); #4
std::cout << std::is_same<const foo**, foo** const>::value << ' '; //false
const foo *
与foo const *
相同,但在给出的示例中没有这种情况。std::cout << std::is_same<const foo *, foo const *>::value << ' '; //true
const foo **
是指向常量foo
的指针的指针,而foo ** const
是指向非常量foo
的指针的常量指针。另一方面,const foo *
是指向常量foo
的指针,而foo * const
是指向非常量foo
的常量指针。 - Jasonconst foo *
和foo const *
是相同的,但两者都不同于foo * const
。 - franji1void bar(foo*);
和void bar(foo* const);
。const
不影响函数签名。 - Eljay