- 论坛徽章:
- 8
|
原帖由 silverzi 于 2008-7-15 13:13 发表 ![]()
const只写了一次(const A),那么成员指针变量会被如何解释?
const char *
还是
char const*
还是
const char const *
muteable能解决这个问题不?
首先,这三个写法是等价的(我记得好像const const char之类东西会被自动去掉重复的吧)
当然,我知道你想说的是 const char * const^_^
其次,对于
class A
{
public:
void func() const;
private:
char * m_S;
}
假设func内部这样使用m_S:
A::func() const
{
//为m_S分配内存
m_S = getMemory(BUFF_SIZE); //1
//为*m_S赋值
strcpy(m_S, "test short str"); //2
//把测试字符串拷贝给m_S;如果m_S容量过小,则用realloc重新分配足够空间后再完成拷贝
ReallocAndCpy(&m_S, "test long long long long string"); //3
}
那么,你要问的问题应该可以清晰表达为如下几个问题吧:
1、//1、//2、//3是否都能被编译器准确阻止?
——答案是:肯定能。做不到就说明编译器不能严格符合c++标准。(亦即:func里,m_S是 const char * const)。
2、muteable能否精确的分别阻止编译器“对m_S本身的修改的报警”和“对m_S指向内容的报警”?
(或者说: 能否声明 muteable char * muteable m_S?)
——显然,支持这种声明是很自然的事;编译器作者想不区分它们恐怕反而要多花一些力气(对程序员来说,这句话想必不难理解^_^)。
当然,不同编译器对c++标准的支持程度是不同的;具体到每一个编译器上,任何较生僻的东西还是应该先做验证。 |
|